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 Web サービス内で実行されると、docManClient はJAXWSProxyHandlerオブジェクトであり、WSBindingProvider にキャストすることも、setOutboundHeaders メソッドを実行することもできません。
だから私の質問は - JAXWSProxyHandler を使用してAuthElementでヘッダーを渡すにはどうすればよいですか(setOutBoundHeaders メソッドと同じことを行います)、または何らかの方法で JAXWSProxyHandler オブジェクトを SEIStub オブジェクトに変換できますか?