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

ScA*_*er2 2 java soap cxf

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

示例 SOAP 标头是:

<soapenv:Header>
   <AuthenticationInfo>
      <userName>User</userName>
      <password/>
   </AuthenticationInfo>
</soapenv:Header>
Run Code Online (Sandbox Code Playgroud)

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

sou*_*jee 8

在使用 Apache CXF 生成代理类时,使用添加扩展的SoapHeaders 将生成带有请求和标题参数的 PortType 类。

<wsdlOption>              
<wsdl>${project.basedir}/src/main/resources/wsdl/sample.wsdl</wsdl>
 <!-- enables processing of implicit SOAP headers, default is false -->
<extendedSoapHeaders>true</extendedSoapHeaders>
</wsdlOption>
Run Code Online (Sandbox Code Playgroud)


afr*_*216 5

好吧,最简单的方法是创建一个ArrayListofHeader对象并添加所有参数或 aMap<String,Object>并将所有标题添加为map.put("param1",param1).

最后获取您的请求上下文并将此地图数组列表添加为

requestContext.put(MessageContext.HTTP_REQUEST_HEADERS,
soapHeaders); 
Run Code Online (Sandbox Code Playgroud)

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

本次讨论中已经提到了一般的陷阱。它可能对你有帮助。