java - 无法将 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;
}
解决方案
推荐阅读
- neo4j - 对所有标签进行采样并返回代表 x% 节点的图形的密码查询(或 APOC 过程)
- javascript - Webpack:TypeError 默认不是函数
- amazon-cloudformation - 部署 MoonMail 资源 AwsMarketplaceNotificationsQueuePolicy
- javascript - 在javascript中强制通过引用传递
- javascript - 如何保存 Tensorflow.js 模型?
- excel - 根据颜色将整行从当前工作表复制到另一张工作表
- ios - 如何访问大子元素?
- c# - 使用十进制值时 ASP.NET 模型绑定中断
- asp.net-core - ASP.Net Core:从一个标签助手输出 2 个标签
- python - Python:使列表唯一并替换重复项