странное взаимодействие с Axis & OSGi - PullRequest
4 голосов
/ 31 декабря 2010

Вот сценарий:

У меня есть 2 пакета с осью 1.4, и в них встроены транзитивные зависимости (каждый из них вызывает свою веб-службу для выполнения своей работы).

Похоже, что когда один загружается раньше другого, другой пакет "проигрывает" с этим исключением:

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

Я немного погуглил и, похоже, ничего не могу найти - я почти ожидаю получить здесь еще один значок из камыша, но опять же, может, у кого-то есть идея, что здесь происходит?

Заранее спасибо.

1 Ответ

4 голосов
/ 20 января 2011

Из комментариев видно, что встраивание баночки в связки не сработает.Мы смогли заставить Axis 1.4 работать как связку, изменив часть исходного кода Axis 1.4 через этот пост: http://issues.ops4j.org/browse/PAXLOGGING-58

Мы также взяли файл MANIFEST.MF из источника springsource и просто поместили его внедавно скомпилированный Ось JAR.Мы сделали это вместо того, чтобы запустить его через BND и попытаться настроить все необязательные зависимости.http://nl.interface21.com/repository/app/bundle/version/detail?name=com.springsource.org.apache.axis&version=1.4.0

(Примечание: мы не используем Pax Logging, но вместо этого используем Sling Logger, и вышеописанные изменения отлично работают для нас. Они исправляют то, как Axis получает Logger из совместимой с Commons-Logging Framework, котораяэто то, что нарушает Axis 1.4 в OSGi.)

Среда, которую мы используем: Day CQ 5.3.0, контейнер Felix OSGi.

...