ネームスペースがoperationタグ内で定義されている場合、SOAPメッセージのCastorアンマーシャリングをどのように処理できますか?

StackOverflow https://stackoverflow.com/questions/626648

質問

Spring-WSに基づくコントラクトファーストWebサービスを開発しています。私はCastorマーシャリングに依存していますが、次の問題に遭遇しました。

" xmlns"名前空間は、次のようにEnvelopeタグで定義されます。

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
                      xmlns="http://www.mycompany.com/MyService/schemas">
  <soap:Header/>
  <soap:Body>
    <doPlaceHoldRequest>
      <hold>
        <accountInfo>
          <accountNumber>123456789</accountNumber>
        </accountInfo>
        <extended>false</extended>
        <afterHours>false</afterHours>
        <amountSavings>1.00</amountSavings>
        <amountChecking>0.00</amountChecking>
      </hold>
    </doPlaceHoldRequest>
  </soap:Body>
</soap:Envelope>

ただし、Spring-WSが提供する.wsdlから生成された.NETおよびJavaクライアント(XSDから生成された)は、次の方法で要求を形成します。

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Header/>
  <soap:Body>
    <doPlaceHoldRequest 
                xmlns="http://www.mycompany.com/MyService/schemas">
      <hold>
        <accountInfo>
          <accountNumber>123456789</accountNumber>
        </accountInfo>
        <extended>false</extended>
        <afterHours>false</afterHours>
        <amountSavings>1.00</amountSavings>
        <amountChecking>0.00</amountChecking>
      </hold>
    </doPlaceHoldRequest>
  </soap:Body>
</soap:Envelope>

Castorによってアンマーシャリング例外がスローされます。これらのメッセージが有効であるとCastorに認識させるにはどうすればよいですか? WSDL(または自動生成に使用したXSD)が間違っている可能性はありますか?

役に立ちましたか?

解決

このブログをご覧になった場合、他のウェブサービスにアクセスすることはないでしょう:) http://springkbase.blogspot.com/2009/06/ spring-webservice-with-castor.html

他のヒント

最初のSpring-WS / Castor Webサービスでこの問題に何度も遭遇しました。私の知る限り、コンポーネントは名前空間を意識しない方法でペイロードを抽出します。言い換えると、doPlaceHoldRequestのようなノードは、最上位の名前空間宣言を継承せずにXMLドキュメントのルートになり、上記の2つのケースでは、目的の名前空間にある になります。 1つはそうではありません-したがって、1つはスキーマに対して正常に検証され、もう1つは検証されません。

最善の解決策は、すべてのベースをカバーすることです。 XSDにelementFormDefault =&quot; qualified&quot;を設定し、すべての要素がネームスペースにあることを要求します。次に、Castorマッピングのすべてのmap-to要素でns-uriとns-prefixを指定します。結果は、すべての名前空間プレフィックスを使用して少し重くなりますが、サーバーコンポーネントでの遅延クライアント の文書化されていない動作に関しては、脆弱性がはるかに少なくなるようです。

JAX-WSが空のリストを返すが良い点です。も。 org.springframework.ws.soap.server.endpoint.interceptor.PayloadValidatingInterceptor は、出入りするものを検証する価値があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top