【发布时间】:2010-12-30 21:57:00
【问题描述】:
这是场景:
我有 2 个轴 1.4 的捆绑包,其中嵌入了传递依赖项(它们各自调用不同的 Web 服务来完成它们的工作)。
似乎当一个包先于另一个加载时,另一个包“丢失”,但有以下例外:
java.lang.RuntimeException: java.lang.ClassCastException: org.apache.axis.transport.http.HTTPSender cannot be cast to org.apache.axis.Handler
我已经深入研究了轴代码,看起来它实际上正在执行一些与 OSGi 不兼容的类加载(Class.forName 类型的东西),但是因为轴嵌入在两个包中(以及每个包有它自己的类加载器)我不明白为什么它们会成为问题。
这里有更多的例外:
Caused by: java.lang.ClassCastException: org.apache.axis.transport.http.HTTPSender cannot be cast to org.apache.axis.Handler
at org.apache.axis.AxisFault.makeFault(AxisFault.java:101)
at org.apache.axis.client.AxisClient.invoke(AxisClient.java:216)
at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
at org.apache.axis.client.Call.invoke(Call.java:2767)
at org.apache.axis.client.Call.invoke(Call.java:2443)
at org.apache.axis.client.Call.invoke(Call.java:2366)
at org.apache.axis.client.Call.invoke(Call.java:1812)
at com.mycompany.myappname.webserviceclient.MyAppNameWebservicePortBindingStub.getAllSiteInformations(MyAppNameWebservicePortBindingStub.java:1603)
at com.mycompany.myappname.webserviceclient.MyAppNameWebserviceProxy.getAllSiteInformations(MyAppNameWebserviceProxy.java:164)
at com.mycompany.application.myappnamedisplay.view.MetadataTreeCompositeHolder.buildMetadataTree(MetadataTreeCompositeHolder.java:102)
... 51 more
Caused by: java.lang.ClassCastException: org.apache.axis.transport.http.HTTPSender cannot be cast to org.apache.axis.Handler
at org.apache.axis.deployment.wsdd.WSDDTargetedChain.makeNewInstance(WSDDTargetedChain.java:157)
at org.apache.axis.deployment.wsdd.WSDDDeployableItem.getNewInstance(WSDDDeployableItem.java:274)
at org.apache.axis.deployment.wsdd.WSDDDeployableItem.getInstance(WSDDDeployableItem.java:260)
at org.apache.axis.deployment.wsdd.WSDDDeployment.getTransport(WSDDDeployment.java:410)
at org.apache.axis.configuration.FileProvider.getTransport(FileProvider.java:257)
at org.apache.axis.AxisEngine.getTransport(AxisEngine.java:332)
at org.apache.axis.client.AxisClient.invoke(AxisClient.java:163)
... 59 more
我已经用谷歌搜索了很多,但似乎找不到任何东西 - 我几乎希望在这里获得另一个风滚草徽章,但也许有人知道这里发生了什么?
提前致谢。
【问题讨论】:
-
Axis 1 和 OSGi... 现在天作之合。为什么不使用本世纪编写的 Web 服务堆栈?
-
我完全同意——我真的很鄙视 Axis,但是...我尝试使用其他 Web 服务客户端,但没有成功。我有一个悬而未决的问题here,如果你能帮助我减轻被称为轴的痛苦。
-
或者如果您愿意,我很乐意提出一个关于如何生成 java Web 服务客户端 WITHOUT 轴的新问题。
-
所以只需使用 CXF(或 Java6 JAX-WS),不要使用所有 Eclipse 垃圾。手动配置很简单。
-
在两个包中嵌入 Axis 可能是问题的根源。看起来
org.apache.axis.Handler类正在由两个包的类加载器加载,但您正在它们之间传递子类实例。如果由不同的类加载器加载,类是不相等的(即使它们是“相同的”类)。抱歉,这不是一个明确而明确的答案(因此仅作为评论发布)。但它可能会帮助你开始寻找答案。
标签: java web-services osgi axis