jax-ws :: wsimport dan Apache CXF wsdl2java gagal pada contoh spesifikasi normatif W3C WSDL

Saya mencoba membuat wsimport atau Apache CXF wsdl2java menghasilkan stub untuk "Contoh 1" dari spesifikasi W3C WSDL 1.1. (juga disalin kata demi kata di akhir postingan).

Contohnya tampaknya memiliki kesalahan ketik kecil, tetapi bahkan setelah diganti:

binding="tns:StockQuoteBinding

dengan

binding="tns:StockQuoteSoapBinding

baik wsimport dan wsdl2java masih gagal.

Saya sudah mencoba, versi baris perintah (JAX-WS RI 2.2.4) dan versi Ant Task (JAX-WS RI 2.2.8) wsimport serta versi baris perintah Apache CXF wsdl2java (2.7.6) . Mereka semua tampaknya gagal karena alasan yang kurang lebih sama:

$ wsimport -version
JAX-WS RI 2.2.4-b01
$ wsimport -d src-auto-wsimport/ -p foo.client  -Xnocompile specs/example1.wsdl 
parsing WSDL...


[ERROR] Schema descriptor {http://example.com/stockquote.xsd}TradePriceRequest in message part "body" is not defined and could not be bound to Java. Perhaps the schema descriptor {http://example.com/stockquote.xsd}TradePriceRequest is not defined in the schema imported/included in the WSDL. You can either add such imports/includes or run wsimport and provide the schema location using -b switch.
 line 31 of file:/home/brutus/jax-ws/wsdl/specs/example1.wsdl

Dari apa yang saya lihat, tipe yang dikeluhkannya (TradePriceRequest) didefinisikan dengan benar dalam skema yang disediakan di dalam file WSDL jadi saya tidak mengerti mengapa gagal menemukannya. (Apache CXF wsdl2java mengeluh tentang tipe yang sama juga dalam pesan yang sedikit berbeda)

Adakah ide tentang apa yang salah dengan file WSDL ini?

contoh 1 WSDL (kata demi kata dari spesifikasi W3C WSDL 1.1 yang ditautkan di atas)

NB: Anda perlu mengubah binding="tns:StockQuoteBinding menjadi binding="tns:StockQuoteSoapBinding

<?xml version="1.0"?>
<definitions name="StockQuote"

targetNamespace="http://example.com/stockquote.wsdl"
      xmlns:tns="http://example.com/stockquote.wsdl"
      xmlns:xsd1="http://example.com/stockquote.xsd"
      xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
      xmlns="http://schemas.xmlsoap.org/wsdl/">

<types>
   <schema targetNamespace="http://example.com/stockquote.xsd"
          xmlns="http://www.w3.org/2000/10/XMLSchema">
       <element name="TradePriceRequest">
          <complexType>
              <all>
                  <element name="tickerSymbol" type="string"/>
              </all>
          </complexType>
       </element>
       <element name="TradePrice">
          <complexType>
              <all>
                  <element name="price" type="float"/>
              </all>
          </complexType>
       </element>
   </schema>
</types>

<message name="GetLastTradePriceInput">
    <part name="body" element="xsd1:TradePriceRequest"/>
</message>

<message name="GetLastTradePriceOutput">
    <part name="body" element="xsd1:TradePrice"/>
</message>

<portType name="StockQuotePortType">
    <operation name="GetLastTradePrice">
       <input message="tns:GetLastTradePriceInput"/>
       <output message="tns:GetLastTradePriceOutput"/>
    </operation>
</portType>

<binding name="StockQuoteSoapBinding" type="tns:StockQuotePortType">
    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
    <operation name="GetLastTradePrice">
       <soap:operation soapAction="http://example.com/GetLastTradePrice"/>
       <input>
           <soap:body use="literal"/>
       </input>
       <output>
           <soap:body use="literal"/>
       </output>
    </operation>
</binding>

<service name="StockQuoteService">
    <documentation>My first service</documentation>
    <port name="StockQuotePort" binding="tns:StockQuoteBinding">
       <soap:address location="http://example.com/stockquote"/>
    </port>
</service>

</definitions>

person Marcus Junius Brutus    schedule 23.09.2013    source sumber
comment
kemungkinan duplikat Baik WSDL atau wsimport dan wsdl (mono) rusak parah   -  person Paul Sweatte    schedule 21.05.2014