我想在 JBoss 上运行的异步 Web 服务中设置/获取 SOAP header (特别是 wsa:ReplyTo
和 wsa:MessageId
)。
由于这是 JBoss 平台,因此我无法使用 com.sun.xml.ws.developer.WSBindingProvider
(如 JAX-WS - Adding SOAP Headers 中的建议)。
一种选择是使用SOAPHandler
。还有其他类似于 WSBindingProvider
解决方案吗?
最佳答案
不幸的是,您需要为此使用特定的处理程序。以前版本的 JBOSS EAP 确实支持 javax.xml.ws.addressing
包,但看起来这些包不是 EE6 的一部分。
定义处理程序,例如jaxws-handlers.xml
为:
<handler-chains xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee javaee_web_services_1_3.xsd">
<handler-chain>
<protocol-bindings>##SOAP11_HTTP</protocol-bindings>
<handler>
<handler-name>Application Server Handler</handler-name>
<handler-class>com.handler.ServerHandler</handler-class>
</handler>
</handler-chain>
将@HandlerChain
添加到Service类定义中:
@WebService (...)
@HandlerChain(file="jaxws-handlers.xml")
public class TestServiceImpl implements TestService {
public String sayHello(String name) {
return "Hello " + name + "!";
}
}
并将处理程序本身实现为:
public class ServerHandler implements SOAPHandler<SOAPMessageContext> {
@Override
public boolean handleMessage(final SOAPMessageContext context) {
final Boolean outbound = (Boolean)context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
if ((outbound != null) && !outbound) {
//...
}
return true;
}
}
关于java - JAX-WS - 在 JBoss 中添加 SOAP header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18839671/