cxf with axis,class cast exception。我可以声明自己的类加载器以避免

时间:2015-04-28 17:09:23

标签: java soap cxf classloader axis

让我的例外开始:

org.apache.axis2.jaxws.client.proxy.JAXWSProxyHandler cannot be cast to org.apache.cxf.frontend.ClientProxy

我认为这个问题是由于tomcat类路径上的库的顺序。我无法改变订单。

我从谷歌找到的推荐解决方案是使用:

JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();

而不是

new CxfStubClass(getClass().getClassLoader().getResource("wsdl/badVendor.wsdl"),  SERVICE_NAME);

我遇到的第一个问题是来自供应商的wsdl没有用cxf解析所以我已经下载了wsdl并修复了它。使用上面的存根类,我可以通过类路径上的文件使用wsdl文件。我无法找到使用该方法的方法 JaxWSProxyFactory和类路径上的wsdl文件 - 这可能吗?

我可以托管文件,然后通过网址引用它,但这并不理想。能够主要方法测试soap代码而不需要托管wsdl的服务器是很好的。

我们假设我托管了wsdl。现在这可能有用,但我需要处理的肥皂是使用肥皂标头,唯一的方法 - 我能找到 - 使用cxf来处理标头是通过一个拦截器。

Client cxfClient = ClientProxy.getClient(port);
cxfClient.getInInterceptors().add(myInterceptor);

如果我使用JaxWSProxyFactory,那么我返回的客户端没有相同的拦截器框架。

我不习惯使用肥皂来防止过时的产品,所以虽然我喜欢避免肥皂的所有悲伤,但我也不能这样做。

所以有人以为我可以声明我自己的类加载器并强制它给我正确的类而不是JAXWSProxyHandler?

我的另一个选择是扔掉所有东西,而只是使用轴。

感谢您的任何想法!

1 个答案:

答案 0 :(得分:0)

我扔掉了所有东西,然后和Axis一起去了。 Axis也非常糟糕,我不得不重新编写它生成的存根,这样我才能真正得到正确的标题。