使用Java添加Soap操作头

使用Java添加Soap操作头,java,soap,wsdl,cxf,jax-ws,Java,Soap,Wsdl,Cxf,Jax Ws,如何在java中添加soap操作头。我使用在SoapUI中测试了该服务。如果没有此标头,我将得到消息“”上指定的SOAP操作与HTTP SOAP操作不匹配,error,这与我从Java客户端应用程序中得到的错误相同 PS:我使用ApacheCXF从wsdl生成存根。我还尝试通过使用wsimport生成java客户机存根来使用JAX-WSRI。使用这两种情况时出现相同的错误 有什么想法吗?我找不到一个正确的结论性文章,在Java中解决这个问题 这是我尝试过的,但我想使用com.sun中的类。。。不

如何在java中添加soap操作头。我使用
在SoapUI中测试了该服务。如果没有此标头,我将得到消息“”上指定的SOAP操作与HTTP SOAP操作不匹配,
error,这与我从Java客户端应用程序中得到的错误相同

PS:我使用ApacheCXF从wsdl生成存根。我还尝试通过使用wsimport生成java客户机存根来使用JAX-WSRI。使用这两种情况时出现相同的错误

有什么想法吗?我找不到一个正确的结论性文章,在Java中解决这个问题


这是我尝试过的,但我想使用com.sun中的类。。。不推荐使用这个包,它可能会导致不同JDK之间的可移植性问题。

我曾经遇到过类似的问题,下面是对我有效的方法。我已经使用wsimport生成了sei


如果头是wsdl的一部分,则可以使用-XadditionalHeaders生成接受头的SEI

如果不是,则必须使用SOAPHandler以编程方式添加标头。虽然很简单

这里有一个详细描述的链接。

更改方法,如下所示处理消息

//附加处理程序的代码

Service1 service1 = new Service1();
        IService1 iService1 = service1.getBasicHttpBindingIService1();

        BindingProvider bindingProvider = (BindingProvider) iService1;
        final Binding binding = bindingProvider.getBinding();
        List<Handler> handlerList = binding.getHandlerChain();

        if (handlerList == null) {
            handlerList = new ArrayList<Handler>();
        }

        handlerList.add(new HeaderHandler());
        binding.setHandlerChain(handlerList);
        ServiceResponse serviceResponse = iService1.callServiceMethod1(serviceRequest);
service1service1=newservice1();
IService1 IService1=service1.getBasicHttpBindingIService1();
BindingProvider BindingProvider=(BindingProvider)iService1;
final Binding Binding=bindingProvider.getBinding();
List handlerList=binding.getHandlerChain();
if(handlerList==null){
handlerList=新的ArrayList();
}
添加(新的HeaderHandler());
绑定。setHandlerChain(handlerList);
ServiceResponse ServiceResponse=iService1.callServiceMethod1(serviceRequest);

谢谢,但在链接中,它没有显示实际调用handleMessage方法的位置?另外,我们从何处获得SOAPMessageContext参数以将其传递给handleMessage?谢谢。这几乎完成了我的工作。但我使用@HandlerChain(file=“HandlerChain.xml”)将上述处理程序链接到代理生成的服务。这里有更多细节:很抱歉延迟回复。下面是我为调用该方法而编写的代码。“如果头是wsdl的一部分,则可以使用-XadditionalHeaders生成接受头的SEI。”。。。。。我想尝试一下,将头添加到WSDL文件中,但不知道如何做。wsimport.exe将soap操作放在“内容类型”http头中,服务表示soap消息中缺少该操作头。WSDL将动作指定为节内元素的属性。如果我可以在header部分将操作指定为“header”元素,那么wsimport.exe可能会生成工作代码。
Service1 service1 = new Service1();
        IService1 iService1 = service1.getBasicHttpBindingIService1();

        BindingProvider bindingProvider = (BindingProvider) iService1;
        final Binding binding = bindingProvider.getBinding();
        List<Handler> handlerList = binding.getHandlerChain();

        if (handlerList == null) {
            handlerList = new ArrayList<Handler>();
        }

        handlerList.add(new HeaderHandler());
        binding.setHandlerChain(handlerList);
        ServiceResponse serviceResponse = iService1.callServiceMethod1(serviceRequest);