我有以下路线:
<route>
<from uri="cxf:bean:MyBean" />
<process ref="myProcessor" />
</route>
我需要处理SOAP消息但是在每次调用的开始时我必须将原始SOAP消息保存到数据库中(包含头和主体的整个信封)。 如您所见,我想在POJO dataFormat中使用cxf。
我无法找到原始SOAP消息被修改的原因(删除了整体部分,转换为POJO)。在我的案例中是否可以获得原始的SOAP消息?
由于
答案 0 :(得分:0)
org.apache.cxf.interceptor.LoggingInInterceptor
是如何提取原始SOAP内容和属性的一个很好的例子。有关源代码,请参阅github.com。
以下是如何在CXF消息中存储SOAP内容的示例(bos
是来自LoggingInInterceptor源代码的CachedOutputStream):
ByteArrayOutputStream baos = new ByteArrayOutputStream();
IOUtils.copy(bos.getInputStream(), baos);
message.getExchange().put("OriginalSoap", baos.toByteArray());
以下是从org.apache.camel.Exchange中检索存储的SOAP内容的方法:
byte[] content = (byte[])exchange.getIn()
.getHeader(CxfConstants.CAMEL_CXF_MESSAGE, org.apache.cxf.message.Message.class)
.getExchange()
.get("OriginalPayload");
的解决方案存储和检索内容