这是场景:
我有 2 个带有 axis 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
我在谷歌上搜索了很多,但似乎找不到任何东西——我几乎希望在这里得到另一个风滚草徽章,但话又说回来,也许有人知道这里发生了什么?
提前致谢。
从评论看来,将 jar 嵌入到包中是行不通的。通过这篇文章更改一些 Axis 1.4 源代码,我们能够让 Axis 1.4 作为捆绑包工作:http://issues.ops4j.org/browse/PAXLOGGING-58 http://issues.ops4j.org/browse/PAXLOGGING-58
我们还从 springsource Axis 中获取了 MANIFEST.MF,并将其放入新编译的 Axis JAR 中。我们这样做,而不是通过 BND 运行它并尝试配置所有可选的依赖项。
(注意:我们不使用 Pax Logging,而是使用 Sling 记录器,上面的更改对我们来说效果很好。它们修复了 Axis 从 commons-logging 兼容框架获取 Logger 的方式,这似乎是破坏 OSGi 中 Axis 1.4 的原因.)
我们使用的环境:Day CQ 5.3.0,Felix OSGi 容器。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)