strange interaction with Axis & OSGi

怎甘沉沦 提交于 2019-12-23 13:17:06

问题


Here is the scenario:

I have 2 bundles with axis 1.4 and it's transitive dependencies embedded in them (they each call a different web service to do their work).

It seems that when one loads before the other, the other bundle "loses" with this exception:

java.lang.RuntimeException: java.lang.ClassCastException: org.apache.axis.transport.http.HTTPSender cannot be cast to org.apache.axis.Handler

I've dug through the axis code a bit and it looks like it is in fact doing some classloading that doesn't jive with OSGi (Class.forName type stuff) but since axis is embedded in both bundles (and each bundle has it's own classloader) I don't see why their would be a problem.

Here is more of the exception:

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

I've googled this quite a bit and I can't seem to find anything - I almost expect to get another tumbleweed badge here, but then again maybe someone has an idea what's going on here?

Thanks in advance.


回答1:


It looks like from the comments that embedding the jar in the bundles isn't going to work. We were able to get Axis 1.4 to work as a bundle by changing some of the Axis 1.4 source code via this post: http://issues.ops4j.org/browse/PAXLOGGING-58

We also took the MANIFEST.MF from the springsource Axis and just drop it into the newly compiled Axis JAR. We did this instead of running it through BND and trying to configure all the optional dependencies. http://nl.interface21.com/repository/app/bundle/version/detail?name=com.springsource.org.apache.axis&version=1.4.0

(Note: We don't use Pax Logging but instead use the Sling logger and the changes above work fine for us. They fix how Axis gets the Logger from the commons-logging compatible framework, which is what seems to break Axis 1.4 in OSGi.)

Environment we're using: Day CQ 5.3.0, Felix OSGi container.



来源:https://stackoverflow.com/questions/4566580/strange-interaction-with-axis-osgi

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!