我正在寻找一种方法来向SOAP消息中添加标题元素。如果我使用
乍一看,拦截器似乎不可行,因此我正在查看SOAP处理程序,但很难找到关于此的清晰信息。
以下是我的Spring配置:
@WebParam
并将header
设置为true
,那么它可以正常工作,该参数会被嵌套在<soap:header>
中。然而,这需要向我的API添加大量参数,这几乎不是一个选项。乍一看,拦截器似乎不可行,因此我正在查看SOAP处理程序,但很难找到关于此的清晰信息。
以下是我的Spring配置:
<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;
}
}
问题在于我有些不知所措。使用处理程序来完成这个任务是否是正确的方法?如果是,你能否提供一个好的示例或者指向一个好的示例?有没有使用拦截器来完成的方法?还是我完全错了...