- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试从基于 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/
我正在尝试从基于 axis2 的 Web 服务使用 Opentext Content Web Services(CWS)。 这是一段代码,用于创建 CWS 的代理客户端并在 header 中传递身份验
我有一个在 Webphere 6 和 JDK 1.6 中运行的应用程序。现在我正在尝试将其迁移到 Whephere Application Server 8.5。我遇到与用于使用 SOAP 服务的库相
我是一名优秀的程序员,十分优秀!