5

私は CXF を使用してコード ファーストの SOAP Web サービスを開発しています。これは私が取得した WSDL です。WSDL にインポートがあるのはなぜですか

2行目は興味のあるものです:

おそらく名前空間と関係があると思いますか?Web サービス 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>
4

1 に答える 1

4

実装には、{ http://service.wrapper.ie/ } と {http:// impl .service.wrapper.ie/}という 2 つの異なる名前空間があるためです。確かにパッケージにインターフェースがie.wrapper.serviceあり、に実装がありie.wrapper.service.implます。したがって、CXF は、論理的なもの (interface/portType)の名前空間 { http://service.wrapper.ie/ }と、物理的なもの ( impl /サービス/バインディング)。インターフェイスと実装の両方に注釈を追加する@WebService(targetNamespace = "http://whatever.you.want")と、WSDL でのインポート (の必要性) がなくなるはずです。

于 2015-09-23T09:46:32.407 に答える