How to add soap header when making a soap request using the java objects generated by wsdl

后端 未结 4 513
时光说笑
时光说笑 2020-12-15 01:08

I generated client java objects using JAX-WS RI. I am trying to make a SOAP request to a web service. Service requires authentication in the header which looks like below: <

4条回答
  •  鱼传尺愫
    2020-12-15 02:00

    When you create your service from classess generated by cxf, add custom interceptor

    Service service = new MyService(wsdlURL, new QName("http://myservice.com/MyService/", "MyService"));
    MyPort port = service.getMyPort();
    Client client = ClientProxy.getClient(port);
    // adding interceptor programmatically
    client.getOutInterceptors().add(new MyHeaderHandler());
    

    Your can extend AbstractSoapInterceptor to implement your custom interceptor to handle message.

    import javax.xml.bind.JAXBException;
    import javax.xml.namespace.QName;
    
    import org.apache.cxf.binding.soap.interceptor.AbstractSoapInterceptor;
    import org.apache.cxf.headers.Header;
    import org.apache.cxf.jaxb.JAXBDataBinding;
    import org.apache.cxf.phase.Phase;
    
    import com.rpc.core.utils.DomainContext;
    
    public class MyHeaderHandler extends AbstractSoapInterceptor {
    
        /**
        * Constructor
        */
        public MyHeaderHandler() {
            super(Phase.PRE_LOGICAL);
    
        }
    
        @Override
        public void handleMessage(org.apache.cxf.binding.soap.SoapMessage message) throws org.apache.cxf.interceptor.Fault {
            try {
                message.getHeaders().add(new Header(new QName("MyCustomHeader"),"value", new JAXBDataBinding(String.class)));
                 } catch (JAXBException e) {
                     e.printStackTrace();
                 }
             };
         }
    }
    

提交回复
热议问题