java如何将wsdl中定义的Soap头添加到CXF中的web服务客户端?
我有一个wsdl,它定义了调用web服务时需要传递的soap头
示例SOAP头是:
<soapenv:Header>
<AuthenticationInfo>
<userName>User</userName>
<password/>
</AuthenticationInfo>
</soapenv:Header>
CXF的wsdl2java生成了一个“AuthenticationInfo”java类,我可以创建该类并使用用户名和密码填充该类,但我不知道在调用web服务时如何将其传递给CXF客户端
# 1 楼答案
在使用Apache CXF生成代理类时,使用true添加extendedSoapHeaders将生成带有Request和Header参数的PortType类
# 2 楼答案
如果SOAP头是在WSDL中定义的,那么它可以被指定为implicit or explicit
CXF提供了用于从WSDL生成Java服务接口的wsdl2java tool。对于显式标头,SOAP标头将自动检测并作为生成的服务接口的一部分提供
如果SOAP头是隐式定义的,那么需要启用
-exsh
选项,该选项触发隐式SOAP头的处理。同样,SOAP头将作为生成的服务Java接口的一部分提供。如果你想要一个具体的例子,你可以查看我在how to add a cxf soap header上发表的一篇博文请注意,CXF还支持other ways of adding SOAP headers
# 3 楼答案
最简单的方法是创建
ArrayList
个Header
对象,添加所有参数或Map<String,Object>
并将所有标题添加为map.put("param1",param1).
最后,获取您的请求上下文,并将此地图的arraylist添加为
如果您试图传递自定义soap头,请参考THIS LINK
在THIS DISCUSSION中提到了一般的陷阱。这可能对你有帮助
# 4 楼答案
发现自己处于同样的情况:
wsdl2java
生成了header类,我需要将其作为SOAP头添加到传出的SOAP请求中我的代码解决方案如下(重用原始问题的
AuthenticationInfo
作为标题类名):# 5 楼答案
使用CXF 3.4.4
您可以像这样添加一个头来配置安全性
使用拦截器,如下所述: http://cxf.apache.org/docs/ws-security.html
其中“operation name”是要调用的WebService操作的名称
WSPasswordCallback是: