gpt4 book ai didi

java - 与 Axis 和 OSGi 的奇怪交互

转载 作者:搜寻专家 更新时间:2023-11-01 02:54:24 25 4
gpt4 key购买 nike

场景如下:

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com