SOAPメッセージにヘッダー要素を追加する方法を見つけようとしています。set toで使用すると、正常に@WebParam
動作し、そのパラメーターはにうまく収まります。ただし、はAPIに多数のパラメーターを追加する必要がありますが、これはほとんどオプションではありません。header
true
<soap:header>
最初はインターセプターを表示できないように見えるので、SOAPHandlerを調べていましたが、これに関する明確な情報を見つけるのは非常に困難です。
これは私の春の設定です:
<bean id="testWebservice" class="org.springframework.remoting.jaxws.JaxWsPortProxyFactoryBean" >
<property name="serviceInterface" value="com...TestWebService"/>
<property name="wsdlDocumentUrl" value="http://localhost:9062/test-ws/remoting/test?wsdl"/>
<property name="serviceName" value="TestWebService"/>
<property name="namespaceUri" value="http://test.com"/>
<property name="portName" value="TestServicePort"/>
<property name="lookupServiceOnStartup" value="false"/>
<property name="handlerResolver" ref="myResolver"/>
</bean>
<bean id="myResolver" class="com...TestHandlerResolver" />
私のハンドラー(TestHandlerResolverでチェーンされています):
public class TestHandler implements SOAPHandler<SOAPMessageContext> {
@Override
public void close(MessageContext context) {
}
@Override
public Set<QName> getHeaders() {
return null;
}
@Override
public boolean handleFault(SOAPMessageContext context) {
return true;
}
@Override
public boolean handleMessage(SOAPMessageContext context) {
if (Boolean.TRUE.equals(context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY))) {
try {
List<Header> headers = new ArrayList<Header>();
Header dummyHeader;
dummyHeader = new Header(new QName("dummy"), "decapitated", new JAXBDataBinding(String.class));
headers.add(dummyHeader);
context.put(Header.HEADER_LIST, headers);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
return true;
}
}
問題は、私が少し途方に暮れていることです。ハンドラーを使用することはこれを行うための正しい方法ですか?もしそうなら、あなたは私に良い例を与えるか、または指摘することができますか?インターセプターでそれを行う方法はありますか?それとも私はここで完全にターゲットになっていますか...