Java Can';将ServiceClient转换为WSBindingProvider
所以我有了这个web服务(基于axis2),它应该充当其他web服务的客户机。但当尝试将我的servicePort(docManClient)强制转换为WSBindingProvider时,我得到ClassCastException错误: 无法将$Proxy283强制转换为com.sun.xml.internal.ws.developer.WSBindingProvider 让我困惑的是,当从简单java应用程序执行时,该代码可以正常工作,但当从web服务执行时,它失败了。我还注意到,当从简单java应用程序执行时,docManClient是一个SEIStub对象,但当在axis2 Web服务中执行此代码时,docManClient是JAXWSProxyHandler。我不知道这是否有帮助,或者我该怎么办 我如何修复或深入分析这个classcast异常?有没有办法避免将其强制转换为WSBindingProvider并使用JAXWSProxyHandler设置头 提前谢谢Java Can';将ServiceClient转换为WSBindingProvider,java,Java,所以我有了这个web服务(基于axis2),它应该充当其他web服务的客户机。但当尝试将我的servicePort(docManClient)强制转换为WSBindingProvider时,我得到ClassCastException错误: 无法将$Proxy283强制转换为com.sun.xml.internal.ws.developer.WSBindingProvider 让我困惑的是,当从简单java应用程序执行时,该代码可以正常工作,但当从web服务执行时,它失败了。我还注意到,当从简单j
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;
}
我尝试将WSBindingProvider更改为BindingProvider,但始终失败,错误:“用户名/密码无效”,在从.wsdl文件生成类之后,您应该获得扩展了
javax.xml.ws.service
的服务类,并且接口…PortType
在您的内部具有与wsdl操作对应的方法。您可以将此接口转换为javax.xml.ws.BindingProvider
抱歉,我不理解您的意思,我尝试使用它:Map headers=new HashMap();headers.put(“BindingProvider.PASSWORD_属性”,Collections.singletonList(“pass”);headers.put(“BindingProvider.USERNAME_属性”,Collections.singletonList(“用户”);bindingProvider.getRequestContext().put(MessageContext.HTTP_请求_头,头)代码>显示类的外观文档管理\u服务
和文档管理
现在@Victor1125