如何将wsdl中定义的Soap Header添加到CXF中的Web服务客户端?

我有一个wsdl定义了一个在调用Web服务时需要传递的soap头。

示例SOAP Header是:

  User    

CXF的wsdl2java生成了一个“AuthenticationInfo”java类,我可以创建并填充用户名和密码,但我不知道在调用Web服务时将其传递给CXF Client的正确方法。

嗯,最简单的方法是创建一个Header对象的ArrayList并添加所有参数或Map并将所有头文件添加为map.put("param1",param1).

最后获取您的请求上下文并将此地图的arraylist添加为

 requestContext.put(MessageContext.HTTP_REQUEST_HEADERS, soapHeaders); 

如果您尝试传递自定义soap标头,请参阅此链接 。

本次讨论中提到了一般性缺陷。 它可能对你有所帮助。

如果在WSDL中定义了SOAP标头,则可以将其指定为隐式或显式 。

CXF提供了wsdl2java工具,用于从WSDL生成Java服务接口。 在显式标头的情况下,SOAP标头会自动检测并作为生成的服务接口的一部分提供。

如果已隐式定义SOAP标头,则需要启用-exsh选项,该选项触发隐式SOAP标头的处理。 SOAP标头将再次作为生成的服务Java接口的一部分提供。 如果你想要一个具体的例子,你可以查看我发表的关于如何添加cxf soap标头的博客文章。

请注意,CXF还支持其他添加SOAP标头的方法 。