Я пытаюсь использовать веб-службы Opentext Content Web Services (CWS) из моего веб-сервиса на основе axis2.
Это фрагмент кода, который создает прокси-клиент для 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, docManClient является объектом JAXWSProxyHandler, и его нельзя привести в WSBindingProvider или выполнить метод setOutboundHeaders.
Итак, мой вопрос: как мне передать свой заголовок с AuthElement, используя JAXWSProxyHandler (сделайте то же самое, что и метод setOutBoundHeaders) ИЛИ Могу ли я каким-то образом преобразовать объект JAXWSProxyHandler в объект SEIStub?