gpt4 book ai didi

java - 如何使用 JAXWSProxyHandler 传递 SOAP header

转载 作者:行者123 更新时间:2023-12-02 03:38:42 26 4
gpt4 key购买 nike

我正在尝试从基于 axis2 的 Web 服务使用 Opentext Content Web Services(CWS)。

这是一段代码,用于创建 CWS 的代理客户端并在 header 中传递身份验证 token 。

DocumentManagement_Service docManService = new DocumentManagement_Service();
DocumentManagement docManClient = docManService.getBasicHttpBindingDocumentManagement();

try
{
// The namespace of the OTAuthentication object
final String ECM_API_NAMESPACE = "urn:api.ecm.opentext.com";

// Create a SOAP header
SOAPHeader header = MessageFactory.newInstance().createMessage().getSOAPPart().getEnvelope().getHeader();

// Add the OTAuthentication SOAP header element
SOAPHeaderElement otAuthElement = header.addHeaderElement(new QName(ECM_API_NAMESPACE, "OTAuthentication"));

// Add the AuthenticationToken SOAP element
SOAPElement authTokenElement = otAuthElement.addChildElement(new QName(ECM_API_NAMESPACE, "AuthenticationToken"));
authTokenElement.addTextNode(authToken);

// Set the SOAP header on the docManClient
String ENDPOINT_ADDRESS_PROPERTY = WSBindingProvider.ENDPOINT_ADDRESS_PROPERTY;

((WSBindingProvider) docManClient).setOutboundHeaders(Headers.create(otAuthElement));
}
catch (SOAPException e)
{
System.out.println("Failed to set authentication SOAP header!\n");
System.out.println(e.getMessage());
System.out.println(e.getStackTrace());
return;
}

当从简单的 java 应用程序执行时,此代码工作正常。在这种情况下,docManClient 是一个 SEIStub 对象,并且 setOutboundHeaders 方法在转换为 WSBindingProvider 后起作用。

但是当这段代码在我的 axis2 webservice 中执行时,docManClient 是 JAXWSProxyHandler 对象,它不能转换为 WSBindingProvider 也不能执行 setOutboundHeaders 方法。

所以我的问题是 - 如何使用 JAXWSProxyHandler 通过 AuthElement 传递我的 header (与 setOutBoundHeaders 方法相同)或者我可以以某种方式将 JAXWSProxyHandler 对象转换为 SEIStub 对象吗?

最佳答案

出现此问题的原因是您使用的是 JRE 中特定于 JAX-WS 实现的 API。但是,当在 Axis2 上运行时,将改用 Axis2 提供的 JAX-WS 实现。该实现支持一组不同的 API 扩展。

这意味着您的代码不可跨不同的 JAX-WS 实现移植。您有两个选择:

  • 仅使用标准 API 使其可移植。在您的情况下,这需要实现一个添加 header 的 JAX-WS 处理程序。要将 authToken 传递给处理程序,您需要将客户端强制转换为 BindingProvider 并将数据添加到请求上下文。

  • 从 Axis2 部署中删除 axis2-jaxws JAR,以便您的代码将使用 JRE 中的 JAX-WS 实现。当然,如果服务本身部署为 JAX-WS 服务,则这将不起作用。不幸的是,代码片段没有显示是否是这种情况。

关于java - 如何使用 JAXWSProxyHandler 传递 SOAP header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37134352/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com