1

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

4

1 回答 1

0

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

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);
于 2020-12-11T13:31:10.433 回答