【问题标题】:JAXB unmarshal to object and add raw xmlJAXB 解组对象并添加原始 xml
【发布时间】:2020-06-25 07:59:02
【问题描述】:

在我们的 java/spring 项目中,我们将 JAXB 2.0 与 JAX-WS 结合使用来接收一些 SOAP 请求。目标不仅是将有效负载解组为 java bean,而且还要将原始 xml 消息保存在该 java bean 上。 有没有办法做到这一点?加分点:如果解决方案与 jaxws-maven-plugin wsimport 目标一起使用。

【问题讨论】:

  • 你到底管理好了吗?尝试做同样的事情......
  • @seBaka28 是的,我刚刚发布了答案。这只是代码 sn-ps,所以不是 100% 完成,但你的编译器会向你大喊大叫。

标签: jaxb jax-ws jaxws-maven-plugin


【解决方案1】:

可以制作一个提取原始负载的肥皂处理程序

public class SoapRawPayloadHandler implements SOAPHandler<SOAPMessageContext> {
    
    @Override
    public boolean handleMessage(SOAPMessageContext smc) {

        ByteArrayOutputStream rawPayloadStream = new ByteArrayOutputStream())
        smc.getMessage().writeTo(rawPayloadStream);
        smc.put(ORIGINAL_MESSAGE, rawPayloadStream.toByteArray());
        smc.setScope(ORIGINAL_MESSAGE, MessageContext.Scope.APPLICATION);
        
        return true;
    }
}

创建 Endpoint 时,可以在 SoapController 中传递处理程序,并且必须将 WebserviceContext 注入到 SoapController 中

@Resource private WebServiceContext webServiceContext;

然后控制器方法可以访问有效负载。

byte[] payload = (byte[]) webServiceContext.getMessageContext().get(ORIGINAL_MESSAGE);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-22
    • 2014-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-15
    相关资源
    最近更新 更多