2016-09-16 114 views
0

我没有收到在SOAP消息的SOAPHEADER标签调用CXF服务。我当前的代码如下:的SOAPHeaders没有在对的SOAPMessage CXF服务通过在Apache的骆驼

我已经定义了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

当您通过cxf客户端发出任何同步请求时。它使用jdk的Http连接客户端通过http进行通信。 按照这jira defect jdk不允许设置标题。 如果你想通过设置VM参数

sun.net.http.allowRestrictedHeaders=true 

设置标题,你可以做,如果你使用异步模式CXF它使用Apache的HttpAsyncClient。这使您可以设置请求标头。

希望这会有所帮助。

+0

嗨Vijendra,谢谢你的回应。我可以设置请求标头,但问题在于有效负载消息中标签''下的SOAP标头。 – Prasann