2013-04-15 47 views
4

我使用CXF开发了一个代码优先的SOAP Web服务,这是我得到的一个WSDL。为什么会出现在WSDLCXF自动生成WSDL导入本身?

一个进口的第二行是利益的一个:我猜测,也许它是与命名空间

?我想知道发布web服务impl的代码会有帮助吗?

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

WSDL从Web服务生成:

<?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> 
+0

wsdl是否导致任何问题?如果您没有手动指出它们,CXF将生成并指向这些网址。它仍然会工作。 – ABose

+0

没有网址工作正常,我的问题是:为什么wsdl看起来很奇怪,好像它由两部分组成:一个引用另一个,为什么不在一个wsdl中?或者CXF如何自动生成它? –

回答

2

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