【问题标题】:CXF autogenerates WSDL imports itself?CXF 自己自动生成 WSDL 导入?
【发布时间】:2013-04-15 09:20:45
【问题描述】:

我使用 CXF 开发了一个代码优先的 SOAP Web 服务,这是我得到的一个 WSDL。为什么要在 WSDL 上导入

第二行是兴趣所在:

我猜这可能与命名空间有关?不知道发布web service impl的代码有帮助吗?

<wsdl:import location="http://localhost:8080/abc/RaceCalc?wsdl=RaceCalc.wsdl" namespace="http://service.wrapper.ie/">
</wsdl:import>

从 Web 服务生成的 WSDL:

    <?xml version='1.0' encoding='UTF-8'?><wsdl:definitions name="RaceCalcImplService" targetNamespace="http://impl.service.wrapper.ie/" xmlns:ns1="http://service.wrapper.ie/" xmlns:ns2="http://cxf.apache.org/bindings/xformat" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://impl.service.wrapper.ie/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <wsdl:import location="http://localhost:8080/abc/RaceCalc?wsdl=RaceCalc.wsdl" namespace="http://service.wrapper.ie/">
    </wsdl:import>
<wsdl:binding name="RaceCalcImplServiceSoapBinding" type="ns1:RaceCalc">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" />
<wsdl:operation name="setRaceCalcHelper">
  <soap:operation soapAction="" style="document" />
  <wsdl:input name="setRaceCalcHelper">
    <soap:body use="literal" />
  </wsdl:input>
  <wsdl:output name="setRaceCalcHelperResponse">
    <soap:body use="literal" />
  </wsdl:output>
</wsdl:operation>
<wsdl:operation name="calculate">
  <soap:operation soapAction="" style="document" />
  <wsdl:input name="calculate">
    <soap:body use="literal" />
  </wsdl:input>
  <wsdl:output name="calculateResponse">
    <soap:body use="literal" />
  </wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="RaceCalcImplService">
<wsdl:port binding="tns:RaceCalcImplServiceSoapBinding" name="RaceCalcImplPort">
  <soap:address location="http://localhost:8080/abc/RaceCalc" />
</wsdl:port>
</wsdl:service>
</wsdl:definitions>

【问题讨论】:

  • wsdl 的 url 是否会导致任何问题?如果您没有手动指出这些 url,CXF 将生成并指向它们。它仍然可以工作。
  • 没有 url 工作正常,我的问题是:为什么 wsdl 看起来很奇怪,好像它由两部分组成:一个引用另一个,为什么不全部在一个 wsdl 中?还是只是 CXF 自动生成它的方式?

标签: web-services wsdl cxf


【解决方案1】:

因为您的实现中有两个不同的命名空间:{http://service.wrapper.ie/} 和 {http://impl.service.wrapper.ie/}。您肯定在包ie.wrapper.service 中有接口,在ie.wrapper.service.impl 中有实现。因此,CXF 假设名称空间 {http://service.wrapper.ie/} 用于逻辑内容(接口/端口类型),名称空间 {http://impl.service.wrapper.ie/} 用于物理内容(impl/service/binding)。将@WebService(targetNamespace = "http://whatever.you.want") 注释添加到接口和实现应该删除(需要)WSDL 中的导入。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-15
    • 2019-02-08
    • 1970-01-01
    相关资源
    最近更新 更多