4

私は Apache CXF 2.7.3 を使用しており、本当に理解できない名前空間の問題に直面しています。これを広範囲に検索しようとしましたが、見つかった結果のほとんどはさまざまな動作に関するものです。問題は、Web サービスを呼び出すときに、パラメーター要素が名前空間で修飾されている場合に失敗することです。メッセージ内の残りの要素はすべて修飾されており、パラメータ要素だけではなく、それを受け入れます。正確な動作は次のとおりです。

パラメータ要素が修飾されていないリクエスト:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
                  xmlns:ord="http://www.example.org/order">
<soapenv:Header/>
   <soapenv:Body>
      <ord:getOrder>
         <id>a</id>
      </ord:getOrder>
   </soapenv:Body>
</soapenv:Envelope>

成功の結果:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
      <ns2:getOrderResponse xmlns:ns2="http://www.example.org/order">
         <return>
            <ns2:errorCode/>
            <ns2:errorMessage/>
            <ns2:order>
               <ns2:orderNumber>ABC123</ns2:orderNumber>
               <ns2:lastName>Smith</ns2:lastName>
            </ns2:order>
         </return>
      </ns2:getOrderResponse>
   </soap:Body>
</soap:Envelope>

修飾されたWITHパラメータを要求します。

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
                  xmlns:ord="http://www.example.org/order">
   <soapenv:Header/>
   <soapenv:Body>
      <ord:getOrder>
         <ord:id>a</ord:id>
      </ord:getOrder>
   </soapenv:Body>
</soapenv:Envelope>

JAXB からの例外が発生します。

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
      <soap:Fault>
         <faultcode>soap:Client</faultcode>
         <faultstring>Unmarshalling Error: unexpected element (uri:"http://www.example.org/order", local:"id"). Expected elements are &lt;{}id></faultstring>
      </soap:Fault>
   </soap:Body>
</soap:Envelope>

私が行ったすべての調査では、これは通常、名前空間がどこかで一致しないことを意味します。しかし、徹底的にチェックしたところ、名前空間は、ObjectFactory.class、package-info.class、cxf-servlet.xml 構成ファイル、および @WebService アノテーションを含め、どこでも同一です。ここで何が欠けているかについて、誰かが私を正しい方向に向けることができますか?

4

1 に答える 1