CXF发布服务,WebService缺少<wsdl:types/><wsdl:message/>标签

在使用CXF发布服务时,发现生成的wsdl文件中缺失<wsdl:types/><wsdl:message>标签。经过排查,原因是接口类未指定命名空间,而实现类指定了不同的命名空间。为解决此问题,需确保接口类和实现类的@WebService注解中targetNamespace属性一致。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

发布CXF时遇到一个问题,发布的服务,wsdl文件中没有<wsdl:types/><wsdl:message/>标签,wsdl文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
  xmlns:tns="com.oristartech.sms.core.ws.server" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
  xmlns:ns2="http://schemas.xmlsoap.org/soap/http" xmlns:ns1="http://server.ws.core.sms.oristartech.com/" 
  name="dispatchService" targetNamespace="com.oristartech.sms.core.ws.server">
  <wsdl:import location="http://localhost:8080/sms/webservice/isSwitch?wsdl=DispatchService.wsdl" namespace="http://server.ws.core.sms.oristartech.com/">
    </wsdl:import>
  <wsdl:binding name="dispatchServiceSoapBinding" type="ns1:DispatchService">
    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
    <wsdl:operation name="isSwitchHall">
      <soap:operation soapAction="" style="document"/>
      <wsdl:input name="isSwitchHall">
        <soap:body use="literal"/>
      </wsdl:input>
      <wsdl:output name="isSwitchHallResponse">
        <soap:body use="literal"/>
      </wsdl:output>
    </wsdl:operation>
  </wsdl:binding>
  <wsdl:service name="dispatchService">
    <wsdl:port binding="tns:dispatchServiceSoapBinding" name="DispatchServiceImplPort">
      <soap:address location="http://localhost:8080/sms/webservice/isSwitch"/>
    </wsdl:port>
  </wsdl:service>
</wsdl:definitions>
对比别的wsdl文件,发现多了wsdl:import,将其地址复制到浏览器地址栏,发现里面是丢失的两个标签,这才发现不是丢失,而是包含在wsdl:import标签里面。

仔细查找原因:实现类中标明了命名空间@WebService(targetNamespace=“com.oristartech.sms.core.ws.server"),接口类未标明命名空间@WebService())

解决方案:将接口类和实现类标注命名空间,两者保持一致即可。

接口类代码:

@WebService(targetNamespace = "com.oristartech.sms.core.ws.server")
public interface DispatchService {

	public String isSwitchHall(@WebParam(name="isSwitch")String isSwitch);
	
}
实现类代码:

@WebService(endpointInterface = "com.oristartech.sms.core.ws.server.DispatchService", 
	targetNamespace = "com.oristartech.sms.core.ws.server", serviceName="dispatchService")
public class DispatchServiceImpl implements DispatchService {

	public String isSwitchHall(@WebParam(name="isSwitch")String isSwitch) {
		System.out.println("===="+isSwitch);
		return "111";
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值