与Axis& amp; OSGi的

时间:2010-12-30 21:57:00

标签: java web-services osgi axis

以下是该方案:

我有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类型的东西)混合的类加载但是因为轴嵌入了两个bundle(和每个bundle)有它自己的类加载器)我不明白为什么它们会成为一个问题。

以下是更多例外情况:

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

我用谷歌搜索了一下,我似乎无法找到任何东西 - 我几乎希望在这里获得另一个风滚草徽章,但是再一次也许有人知道这里发生了什么?

提前致谢。

1 个答案:

答案 0 :(得分:4)

从评论看起来,在jar中嵌入jar是行不通的。通过以下帖子更改了一些Axis 1.4源代码,我们能够将Axis 1.4作为一个捆绑包工作:http://issues.ops4j.org/browse/PAXLOGGING-58

我们还从springource Axis获取了MANIFEST.MF,然后将其放入新编译的Axis JAR中。我们这样做而不是通过BND运行它并尝试配置所有可选的依赖项。 http://nl.interface21.com/repository/app/bundle/version/detail?name=com.springsource.org.apache.axis&version=1.4.0

(注意:我们不使用Pax Logging,而是使用Sling记录器,上面的更改对我们来说很好。它们修复了Axis如何从commons-logging兼容框架获取Logger,这似乎打破了Axis在OSGi中1.4。

我们正在使用的环境:Day CQ 5.3.0,Felix OSGi容器。