添加标头到所有传出的CXF请求

Tri*_*ind 7 spring client cxf

是否可以从客户端向所有传出的cxf连接添加标头.

使用Spring 3.0和CXF 2.6.0

sau*_*ode 6

我想在这里给我两分钱.我在我的帖子中解决了同样的情况 -

http://saurzcode.in/2014/05/08/adding-header-to-soap-request-using-cxf-2/

弹簧配置: -

<jaxws:client id="mywebServiceClient"
    serviceClass="com.saurzcode.TestService"
    address="http://saurzcode.com:8088/mockTestService">

    <jaxws:binding>
        <soap:soapBinding version="1.2" mtomEnabled="true" />
    </jaxws:binding>
</jaxws:client>
<cxf:bus>
    <cxf:outInterceptors>
        <bean class="com.saurzcode.ws.caller.SoapHeaderInterceptor" />
    </cxf:outInterceptors>
</cxf:bus>
Run Code Online (Sandbox Code Playgroud)

CXF拦截器 -

public class SoapHeaderInterceptor extends AbstractSoapInterceptor {

    public SoapHeaderInterceptor() {
        super(Phase.POST_LOGICAL);
    }

    @Override
    public void handleMessage(SoapMessage message) throws Fault {
        List<Header> headers = message.getHeaders();
        TestHeader testHeader = new TestHeader();
        JAXBElement<TestHeader> testHeaders = new ObjectFactory()
        .createTestHeader(testHeader);

        try {
            Header header = new Header(testHeaders.getName(), testHeader,
            new JAXBDataBinding(TestHeader.class));
            headers.add(header);
            message.put(Header.HEADER_LIST, headers);

        } catch (JAXBException e) {
            e.printStackTrace();
        }

    }
Run Code Online (Sandbox Code Playgroud)


Tri*_*ind 3

我就是这样做的

Spring.xml

<import resource="classpath:META-INF/cxf/cxf.xml" />

<bean id="cxf" class="org.apache.cxf.bus.spring.SpringBus">
    <property name="outInterceptors">
        <list>
            <ref bean="headerInterceptor"/>
        </list>
    </property>
    <property name="inInterceptors">
        <list>
            <ref bean="headerInterceptor"/>
        </list>
    </property>
</bean>

<bean id="headerInterceptor" class="logging.Interceptor"/>
Run Code Online (Sandbox Code Playgroud)

拦截器:

 public class UUIDHeaderInterceptor extends AbstractPhaseInterceptor {


private static final Logger logger = LoggerFactory.getLogger(UUIDHeaderInterceptor.class);



public UUIDHeaderInterceptor() {
    super(Phase.RECEIVE);

}

@Override
public void handleMessage(Message message) throws Fault {

        Map<String, List<String>> headers = (Map<String, List<String>>) message.get(Message.PROTOCOL_HEADERS);
        headers.put(REQUEST_ID_ATTRIBUTE_NAME, Arrays.asList(new String[]{"TEST"}));

   }
 }

@Override
public void handleFault(Message message) {
    handleMessage(message);
  }
Run Code Online (Sandbox Code Playgroud)