У меня есть исходный веб-сервис, который выполняет операцию, которая не принимает тело в качестве запроса. Это ожидаемый запрос:
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
<soap:Header/>
<soap:Body/>
</soap:Envelope>
У меня есть служба поддержки пользователей, которая вызывает эту операцию, используя camel-cxf: cxfEndpoint. Конечная точка настроена на использование dataFormat как «Полезная нагрузка». Примерно так:
<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>
Я устанавливаю тело как нулевое во время вызова этой операции, ожидая, что CXFInterceptor обернет тело SOAPEnvelope. Однако, когда я звоню в службу, я получаю:
java.lang.IllegalArgumentException: элементы PayLoad не могут поместиться
с частями сообщения операции BindingOperation. Пожалуйста, проверьте
BindingOperation и PayLoadMessage
Я проверил сгенерированный ServiceClass из исходного wsdl, чтобы проверить, ожидает ли операция какое-либо тело. Вот метод, который он ожидает:
@WebMethod(operationName = "SomeOperation", action = "SomeOperation")
@WebResult(name = "Result", targetNamespace = "namespace_for_the_service", partName = "data")
public Result someOperation();
Я также пытался использовать XSLT для преобразования в XML, который не добавляет никаких элементов, но ничего не решает. Я что-то пропустил? Это из-за dataFormat, который является полезной нагрузкой?