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/literalスタイルのwsdlです。
問題は、Exchangeからの要求がCxfPayloadにキャストされている場合です。 nullになります。 DOMSourceは、次のようになります。
<ObjectInfo>
<value1>null</value1>
<value2>null</value2>
</ObjectInfo>
私のSOAPリクエストは、実際に(WSDLは、特定のSOAPリクエストのためのマルチパートメッセージを持っている)もヌルであるObjectInfo
後にそれ以上の要素のカップルが含まれています。
CXFがRPCスタイルのWebサービスをサポートしていないという事実に関連している可能性があります。これを見てください:http://stackoverflow.com/questions/14831499/will-apache-cxf-supports-jax-rpc-based-web-servicessoap – Namphibian
Ah。私はそれも疑った。それは試してみる価値があった。一方、回避策を見つけたのは、Sourceを使用する代わりに、XmlConverterを使用して本文をStringに変換しています。そしてそれを必要なオブジェクト型に非整列化します。 –