java - 与 Axis 和 OSGi 的奇怪交互

标签 java web-services osgi axis

场景如下:

我有 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

我仔细研究了 axis 代码,看起来它实际上在做一些与 OSGi(Class.forName 类型的东西)不一致的类加载,但是因为 axis 嵌入在两个包中(和每个包有自己的类加载器)我不明白为什么它们会成为问题。

这里是更多的异常(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

我在谷歌上搜索了很多,但似乎找不到任何东西 - 我几乎希望在这里得到另一个风滚草徽章,但话又说回来,也许有人知道这里发生了什么?

提前致谢。

最佳答案

从评论来看,将 jar 嵌入包中似乎行不通。通过这篇文章更改一些 Axis 1.4 源代码,我们能够让 Axis 1.4 作为一个包工作:http://issues.ops4j.org/browse/PAXLOGGING-58

我们还从 springsource 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 容器。

关于java - 与 Axis 和 OSGi 的奇怪交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4566580/

相关文章:

java - java bean 中的线程

java - Java中的深拷贝数组

javascript - 使用 PHP 获取 Web 服务数据

java - Android 正确使用 boolean 值

java - 如何在 REST 应用程序上使用 SOAP Web 服务

java - 使用 Java 客户端使用 wcf 服务

eclipse - "Export-Package: ."是什么意思?

jakarta-ee - Java EE 应用服务器上的 OSGi 支持

osgi - 将 OpenNTF-Domino-API-2.0.0 安装到 Designer Client

java - 为什么 Fortify SCA 针对我的项目中不再存在的文件报告问题?