ws-security に Wss4jSecurityInterceptor を使用して、Spring-ws に実装された Web サービス クライアントがあります。
エンドポイントの呼び出しは機能し、データは暗号化され、署名されて送信されますが、応答が受信されても復号化されません。代わりに JAXB の unmarshaller が呼び出され、次のようなエラーが発生します。
Error : org.springframework.oxm.jaxb.JaxbUnmarshallingFailureException:
JAXB unmarshalling exception: unexpected element
(uri:"http://www.w3.org/2001/04/xmlenc#", local:"EncryptedData").
Expected elements are...
期待される要素は、xdd 内のすべてのデータ型をリストします。
これは私の Wss4jSecurityIntercepter が構成されているものです:
<!-- username / password for signing -->
<property name="enableSignatureConfirmation" value="false" />
<property name="securementUsername" value="${securementUsername}" />
<property name="securementSignatureKeyIdentifier" value="DirectReference" />
<property name="securementPassword" value="${keystore.password}" />
<property name="securementSignatureCrypto" ref="crypto" />
<!-- username (certificate) and keystore for encryption -->
<property name="securementEncryptionUser" value="${securementEncryptionUsername}" />
<property name="securementEncryptionKeyIdentifier" value="SKIKeyIdentifier" />
<property name="securementEncryptionCrypto" ref="crypto" />
<!-- validate incoming message signature and decrypt -->
<property name="validationActions" value="Signature Encrypt Timestamp" />
<property name="validationDecryptionCrypto" ref="crypto" />
<property name="validationSignatureCrypto" ref="crypto" />
<property name="validationCallbackHandler">
<bean
class="org.springframework.ws.soap.security.wss4j.callback.KeyStoreCallbackHandler">
<property name="privateKeyPassword" value="${keystore.password}" />
</bean>
</property>
何がうまくいかないのですか?
ありがとう。
EDIT : これは、handleResponse で false を返した ClientInterceptor が原因で、wss4j インターセプターの前に配置されていたため、すべての Interceptor 処理が停止しました。