2013-04-15 46 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中的(需要)導入。