使用 camel-cxf-endpoint 消耗一个没有主体的操作
Consuming an operation with no body using camel-cxf-endpoint
我有一个源 Web 服务,它有一个不将任何主体作为请求的操作。这是它期望的请求:
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
<soap:Header/>
<soap:Body/>
</soap:Envelope>
我有一个使用 camel-cxf:cxfEndpoint 调用此操作的消费者服务。端点配置为将数据格式设置为 "Payload"。像这样:
<camel-cxf:cxfEndpoint
address="SOURCE_ENDPOINT"
id="abcEndpoint" serviceClass="PATH_TO_GENERATED_SERVICE_CLASS">
<camel-cxf:properties>
<entry key="dataFormat" value="PAYLOAD"/>
</camel-cxf:properties>
<camel-cxf:outInterceptors>
<ref component-id="wss4jOutInterceptor"/>
</camel-cxf:outInterceptors>
</camel-cxf:cxfEndpoint>
我在调用此操作时将正文设置为 null,希望 CXFInterceptor 使用 SOAPEnvelope 包装正文。但是,当我调用该服务时,我得到:
java.lang.IllegalArgumentException: The PayLoad elements cannot fit
with the message parts of the BindingOperation. Please check the
BindingOperation and PayLoadMessage
我检查了从源 wsdl 生成的 ServiceClass,以检查该操作是否需要任何主体。这是它期望的方法:
@WebMethod(operationName = "SomeOperation", action = "SomeOperation")
@WebResult(name = "Result", targetNamespace = "namespace_for_the_service", partName = "data")
public Result someOperation();
我还尝试使用 XSLT 转换为 XML,它不添加任何元素,但不解决任何问题。我错过了什么吗?是因为 dataFormat 是 Payload 吗?
您的 SOAP 信封不需要包含至少包含目标调用方法的最小主体吗?
<soap:Body>
<m:SomeOperation xmlns:m="..."/>
</soap:Body>
我能够通过创建一个空的 CxfPayload 来解决这个问题:
List<Source> elements = new ArrayList<Source>();
CxfPayload<SoapHeader> cxfPayload = new CxfPayload<SoapHeader>(null, elements, null);
exchange.getIn().setBody(cxfPayload);
这对我有用!!!!
我有一个源 Web 服务,它有一个不将任何主体作为请求的操作。这是它期望的请求:
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
<soap:Header/>
<soap:Body/>
</soap:Envelope>
我有一个使用 camel-cxf:cxfEndpoint 调用此操作的消费者服务。端点配置为将数据格式设置为 "Payload"。像这样:
<camel-cxf:cxfEndpoint
address="SOURCE_ENDPOINT"
id="abcEndpoint" serviceClass="PATH_TO_GENERATED_SERVICE_CLASS">
<camel-cxf:properties>
<entry key="dataFormat" value="PAYLOAD"/>
</camel-cxf:properties>
<camel-cxf:outInterceptors>
<ref component-id="wss4jOutInterceptor"/>
</camel-cxf:outInterceptors>
</camel-cxf:cxfEndpoint>
我在调用此操作时将正文设置为 null,希望 CXFInterceptor 使用 SOAPEnvelope 包装正文。但是,当我调用该服务时,我得到:
java.lang.IllegalArgumentException: The PayLoad elements cannot fit with the message parts of the BindingOperation. Please check the BindingOperation and PayLoadMessage
我检查了从源 wsdl 生成的 ServiceClass,以检查该操作是否需要任何主体。这是它期望的方法:
@WebMethod(operationName = "SomeOperation", action = "SomeOperation")
@WebResult(name = "Result", targetNamespace = "namespace_for_the_service", partName = "data")
public Result someOperation();
我还尝试使用 XSLT 转换为 XML,它不添加任何元素,但不解决任何问题。我错过了什么吗?是因为 dataFormat 是 Payload 吗?
您的 SOAP 信封不需要包含至少包含目标调用方法的最小主体吗?
<soap:Body>
<m:SomeOperation xmlns:m="..."/>
</soap:Body>
我能够通过创建一个空的 CxfPayload 来解决这个问题:
List<Source> elements = new ArrayList<Source>();
CxfPayload<SoapHeader> cxfPayload = new CxfPayload<SoapHeader>(null, elements, null);
exchange.getIn().setBody(cxfPayload);
这对我有用!!!!