首页 > 解决方案 > 无法将 ServiceClient 转换为 WSBindingProvider

问题描述

所以我有这个网络服务(基于axis2),它应该作为其他网络服务的客户端。但是当尝试将我的 servicePort (docManClient) 转换为 WSBindingProvider 时,我收到 ClassCastException 错误:

com.sun.proxy.$Proxy283 无法转换为 com.sun.xml.internal.ws.developer.WSBindingProvider

让我感到困惑的是,当从简单的 Java 应用程序执行时,这段代码可以正常工作,但是当从 Web 服务执行时它会失败。我还注意到,当从简单的 java 应用程序执行时,docManClient 是一个 SEIStub 对象,但是当此代码在我的axis2 webservice 中执行时,docManClient 是 JAXWSProxyHandler。我不知道这是否有帮助或我应该怎么做。

如何修复或深入分析此 classcast 异常?有没有办法避免将其转换为 WSBindingProvider 并使用 JAXWSProxyHandler 设置标头?

提前致谢。

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

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

//Object pt = docManService.getPort(do);

//ServiceClient sc = docManService.getServiceClient(docManService.getServiceName())

//BindingProvider bp =  ((BindingProvider) docManClient);

((WSBindingProvider) docManClient).setOutboundHeaders(Headers.create(otAuthElement));

...

文档管理:

       /**


* This class was generated by the JAX-WS RI.


* JAX-WS RI 2.2.9-b130926.1035


* Generated source version: 2.2


* 


*/
"urn:xxxx")
@XmlSeeAlso({
com.opentext.ecm.api.ObjectFactory.class,
com.opentext.livelink.service.core.ObjectFactory.class,
com.opentext.livelink.service.docman.ObjectFactory.class
})
public interface DocumentManagement {


/**
 * 
 * @param nodeID
 */
@WebMethod(operationName = "RemoveFavorite", action = "urn:xxxx/RemoveFavorite")
@RequestWrapper(localName = "RemoveFavorite", targetNamespace = "urn:xxx", className = "xxxx.RemoveFavorite")
@ResponseWrapper(localName = "RemoveFavoriteResponse", targetNamespace = "urn:xxxx", className = "xxxx.RemoveFavoriteResponse")
public void removeFavorite(
    @WebParam(name = "nodeID", targetNamespace = "urn:xxxx")
    long nodeID);

文档管理_服务:

    /**
 * This class was generated by the JAX-WS RI.
* JAX-WS RI 2.2.9-b130926.1035
 * Generated source version: 2.2
 * 
*/
@WebServiceClient(name = "DocumentManagement", targetNamespace = "urn:xxx", wsdlLocation = "xxxx")
public class DocumentManagement_Service
extends Service



{

static {
    URL url = null;
    WebServiceException e = null;
    try {
        url = new URL("xxxx");
    } catch (MalformedURLException ex) {
        e = new WebServiceException(ex);
    }
    DOCUMENTMANAGEMENT_WSDL_LOCATION = url;
    DOCUMENTMANAGEMENT_EXCEPTION = e;
}

标签: java

解决方案


推荐阅读