JAXB 解组到对象并添加原始 xml

JAXB unmarshal to object and add raw xml

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

可以制作一个提取原始有效负载的肥皂处理器

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;
    }
}

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

@Resource private WebServiceContext webServiceContext;

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

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