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);
在我们的 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);