我正面临将SOAP请求从CXF有效负载格式转换为所需格式的问题。CxfPayload对象不会传播SOAP请求中的值
这是要求是什么样子:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Header/>
<soapenv:Body>
<ObscureSOAPOperation xmlns="<wsdl-namespace-url>">
<ObjectInfo>
<value1>value1</value1>
<value2>value2</value2>
</ObjectInfo>
</ObscureSOAPOperation>
</soapenv:Body>
</soapenv:Envelope>
这是我的路线是什么样子:
from("properties:soapoperation.service.cxf.endpoint")
.to("log:info?showAll=true")
.process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
CxfPayload<?> request = (CxfPayload<?>) exchange.getIn().getBody();
Source source = request.getBodySources().get(0);
JAXBElement<ObjectInfo> objectInfoElement =
jaxbContext.createUnmarshaller().unmarshal(source, ObjectInfo.class);
System.out.println("~~~~~~~~~Object Info value1: " + objectInfoElement.getValue().getValue1() + "~~~~~~~~~");
}
})
ObjectInfo
是WSDL生成的类。顺便提一下,WSDL是一种rpc /文字风格的wsdl。
问题是,当来自exchange的请求被转换为CxfPayload。它变为空。该DOMSource的样子:
<ObjectInfo>
<value1>null</value1>
<value2>null</value2>
</ObjectInfo>
我的SOAP请求实际上包含ObjectInfo
后夫妇更多的元素(WSDL中具有特定的SOAP请求多部分消息),这同样为空。
我怀疑你的问题可能与CXF不支持RPC风格的Web服务有关。看到这个:http://stackoverflow.com/questions/14831499/will-apache-cxf-supports-jax-rpc-based-web-servicessoap。 – Namphibian
啊。我也怀疑过。值得一试。同时,我找到了一个解决方法,而不是使用Source,我使用XmlConverter将主体转换为String。然后将它解组到所需的对象类型。 –