java - JAX-WS - 在 JBoss 中添加 SOAP header

标签 java soap jboss jax-ws ws-addressing

我想在 JBoss 上运行的异步 Web 服务中设置/获取 SOAP header (特别是 wsa:ReplyTowsa: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/

相关文章:

java - 使用 XML 分配的 Java 字符串中的字符串操作

java - tomcat 8.5 上的 Apache cxf 回车问题

java - 在 Eclipse 中,maven 依赖项覆盖了项目依赖项

c# - SOAP header : why authenticate in the header and not the body?

c++ - 发送 GetItem 请求时出现 HTTP 401 未经授权的错误

Java 应用程序服务器替代品

grails - 结合使用IntelliJ和JBoss来创建Grails应用

java - 三层应用

java - 在 JTree 中获取属性 XML

java - Hibernate,无法执行查询,SQL 错误 : 17059, SQLState:99999