我正在尝试从基于axis2的Web服务中使用Opentext Content Web Services(CWS)。
这是一段为 CWS 创建代理客户端并在标头中传递身份验证令牌的代码。
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 一起传递(与 setOutBoundHeaders 方法相同)或者我可以以某种方式将 JAXWSProxyHandler 对象转换为 SEIStub 对象吗?