我没有在调用的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);
有人可以帮忙解决这个问题吗?
答案 0 :(得分:0)
通过cxf客户端发出任何同步请求时。它使用jdk的Http连接客户端通过http进行通信。 根据这个jira defect jdk不允许设置标头。 如果要设置标题,可以通过设置VM参数
来完成sun.net.http.allowRestrictedHeaders=true
如果在异步模式下使用cxf,则使用apache的HttpAsyncClient。这允许您设置请求标头。
希望这有帮助。