在apache camel中,SoapHeaders不会在SoapMessage中传递给CXF服务

时间:2016-09-16 12:04:37

标签: apache-camel cxf jbossfuse

我没有在调用的cxf服务中的Soap消息中获取SoapHeader标记。我目前的代码如下:

我为服务定义了一个cxf:cxfEndpoint:

<cxf:cxfEndpoint id="testService" address="${testserviceurl}"
    serviceClass="com.test.service.class" wsdlURL="test.wsdl"
    endpointName="ns:test" serviceName="ns:TestService"
    xmlns:ns="target.name.space.of.the.service">
    <cxf:properties>
        <entry key="dataFormat" value="PAYLOAD" />
    </cxf:properties>
</cxf:cxfEndpoint>

然后在调用我的cxf端点之前,我已将SoapHeader设置为:

CxfPayload<SoapHeader> payload = exchange.getIn().getBody(
        CxfPayload.class);
List<SoapHeader> headers = payload.getHeaders();
SoapHeader header = new SoapHeader(new QName("HeaderName"), "Test");
headers.add(header);

我也试过这个方法:

List<SoapHeader> soapHeaders = CastUtils.cast((List<?>) exchange
        .getIn().getHeader(Header.HEADER_LIST));
if (soapHeaders == null) {
    // we just create a new soap headers in case the header is null
    soapHeaders = new ArrayList<SoapHeader>();
}
SoapHeader header = new SoapHeader(new QName("HeaderName"),
        "Test");
header.setDirection(Direction.DIRECTION_OUT);
soapHeaders.add(header);

有人可以帮忙解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

通过cxf客户端发出任何同步请求时。它使用jdk的Http连接客户端通过http进行通信。 根据这个jira defect jdk不允许设置标头。 如果要设置标题,可以通过设置VM参数

来完成
sun.net.http.allowRestrictedHeaders=true

如果在异步模式下使用cxf,则使用apache的HttpAsyncClient。这允许您设置请求标头。

希望这有帮助。