0

エンドポイントで WSS4JInInterceptor を使用して承認を検証しています。

エンドポイントにそれがあります

ここに私のSOAPメッセージがあります

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
   <SOAP-ENV:Header>
          <wsse:Security SOAP-ENV:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
                 <wsse:UsernameToken wsu:Id="UsernameToken-1">
                       <wsse:Username>username</wsse:Username>
                       <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText"/>
                 </wsse:UsernameToken>
          </wsse:Security>
   </SOAP-ENV:Header>
   <SOAP-ENV:Body>
          <newAsset xmlns="http://api.com.acme/">
                 <date xmlns="">2018-02-04T14:35:59Z</date>
                 <assetId xmlns="">1</assetId>
          </newAsset>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

メッセージを WSS4JInInterceptor にトレースすると、受信した SOAP メッセージが : (置き換えられた空白の名前空間) に書き換えられていることがわかります。

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
   <SOAP-ENV:Header>
          <wsse:Security SOAP-ENV:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
                 <wsse:UsernameToken wsu:Id="UsernameToken-1">
                       <wsse:Username>username</wsse:Username>
                       <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText"/>
                 </wsse:UsernameToken>
          </wsse:Security>
   </SOAP-ENV:Header>
   <SOAP-ENV:Body>
          <newAsset xmlns="http://api.com.acme/">
                 <date xmlns="http://api.com.acme/">2018-02-04T14:35:59Z</date>
                 <assetId xmlns="http://api.com.acme/">1</assetId>
          </newAsset>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

アンマーシャリング エラーが発生します。

しかし

代わりにこれを送信するために SOAP メッセージを少し変更 (プレフィックスを追加) すると、WSS4JInInterceptor はデフォルトの名前空間を変更せず、メッセージは受け入れられます。

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
   <SOAP-ENV:Header>
          <wsse:Security SOAP-ENV:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
                 <wsse:UsernameToken wsu:Id="UsernameToken-1">
                       <wsse:Username>username</wsse:Username>
                       <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText"/>
                 </wsse:UsernameToken>
          </wsse:Security>
   </SOAP-ENV:Header>
   <SOAP-ENV:Body>
          <api:newAsset xmlns:api="http://api.com.acme/">
                 <date xmlns="">2018-02-04T14:35:59Z</date>
                 <assetId xmlns="">1</assetId>
          </api:newAsset>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

それを避ける方法はありますか?最初のメッセージは有効だったので、受け入れる必要があります。xsd に何かを入れる必要がありますか? 無資格で利用しました。CXF 3.0.0 を使用しています

4

1 に答える 1

0

CXF 3.0.3 に更新し、それでも失敗するかどうかを確認します。最近修正されたいくつかの問題があったと思います。それでも失敗する場合は、テストケースでバグを記録してください。

于 2014-12-15T17:37:24.377 に答える