ОШИБКА: java.lang.ClassCastException: класс org.apache.cxf.bus.spring.SpringBusFactory - PullRequest
1 голос
/ 01 сентября 2011

Helo!

Я пытаюсь создать клиент Web-сервиса, используя CXF.Мое приложение находится в OSGi.И я использую Felix Framework.

Но возникает следующая ошибка:

</p> <pre><code>[main] ERROR org.apache.cxf.BusFactory - Failed to determine BusFactory implementation class name. java.lang.ClassCastException: class org.apache.cxf.bus.spring.SpringBusFactory at java.lang.Class.asSubclass(Unknown Source) at org.apache.cxf.BusFactory.getBusFactoryClass(BusFactory.java:280) at org.apache.cxf.BusFactory.newInstance(BusFactory.java:207) at org.apache.cxf.BusFactory.newInstance(BusFactory.java:194) at org.apache.cxf.BusFactory.getDefaultBus(BusFactory.java:90) at org.apache.cxf.BusFactory.getThreadDefaultBus(BusFactory.java:137) at org.apache.cxf.BusFactory.getThreadDefaultBus(BusFactory.java:122) at org.apache.cxf.jaxws.spi.ProviderImpl.createServiceDelegate(ProviderImpl.java:89) at javax.xml.ws.Service.<init>(Service.java:36) at myorg.engine.test.mocks.soapservice.client.CHMService.<init>(CHMService.java:42) at myorg.engine.service.OSGiServiceTest.testSoapServiceMock(OSGiServiceTest.java:133) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.ops4j.pax.exam.raw.extender.intern.ProbeInvokerImpl.injectContextAndInvoke(ProbeInvokerImpl.java:112) at org.ops4j.pax.exam.raw.extender.intern.ProbeInvokerImpl.findAndInvoke(ProbeInvokerImpl.java:71) at org.ops4j.pax.exam.raw.extender.intern.ProbeInvokerImpl.call(ProbeInvokerImpl.java:58) at org.ops4j.pax.exam.nat.internal.NativeTestContainer.call(NativeTestContainer.java:83) at org.ops4j.pax.exam.spi.reactors.EagerSingleStagedReactor.invoke(EagerSingleStagedReactor.java:85) at org.ops4j.pax.exam.junit.JUnit4TestRunner$2.evaluate(JUnit4TestRunner.java:259) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184) at org.junit.runners.ParentRunner.run(ParentRunner.java:236) at org.ops4j.pax.exam.junit.JUnit4TestRunner.run(JUnit4TestRunner.java:86) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) [main] ERROR org.apache.cxf.BusFactory - Failed to instantiate bus factory. java.lang.ClassCastException: class org.apache.cxf.bus.spring.SpringBusFactory at java.lang.Class.asSubclass(Unknown Source) at org.apache.cxf.BusFactory.newInstance(BusFactory.java:218) at org.apache.cxf.BusFactory.newInstance(BusFactory.java:194) at org.apache.cxf.BusFactory.getDefaultBus(BusFactory.java:90) at org.apache.cxf.BusFactory.getThreadDefaultBus(BusFactory.java:137) at org.apache.cxf.BusFactory.getThreadDefaultBus(BusFactory.java:122) at org.apache.cxf.jaxws.spi.ProviderImpl.createServiceDelegate(ProviderImpl.java:89) at javax.xml.ws.Service.<init>(Service.java:36) at myorg.engine.test.mocks.soapservice.client.CHMService.<init>(CHMService.java:42) at myorg.engine.service.OSGiServiceTest.testSoapServiceMock(OSGiServiceTest.java:133) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.ops4j.pax.exam.raw.extender.intern.ProbeInvokerImpl.injectContextAndInvoke(ProbeInvokerImpl.java:112) at org.ops4j.pax.exam.raw.extender.intern.ProbeInvokerImpl.findAndInvoke(ProbeInvokerImpl.java:71) at org.ops4j.pax.exam.raw.extender.intern.ProbeInvokerImpl.call(ProbeInvokerImpl.java:58) at org.ops4j.pax.exam.nat.internal.NativeTestContainer.call(NativeTestContainer.java:83) at org.ops4j.pax.exam.spi.reactors.EagerSingleStagedReactor.invoke(EagerSingleStagedReactor.java:85) at org.ops4j.pax.exam.junit.JUnit4TestRunner$2.evaluate(JUnit4TestRunner.java:259) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184) at org.junit.runners.ParentRunner.run(ParentRunner.java:236) at org.ops4j.pax.exam.junit.JUnit4TestRunner.run(JUnit4TestRunner.java:86) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) [org.ops4j.pax.exam.junit.JUnit4TestRunner] : Exception org.ops4j.pax.exam.TestContainerException: java.lang.reflect.InvocationTargetException at org.ops4j.pax.exam.raw.extender.intern.ProbeInvokerImpl.injectContextAndInvoke(ProbeInvokerImpl.java:118) at org.ops4j.pax.exam.raw.extender.intern.ProbeInvokerImpl.findAndInvoke(ProbeInvokerImpl.java:71) at org.ops4j.pax.exam.raw.extender.intern.ProbeInvokerImpl.call(ProbeInvokerImpl.java:58) at org.ops4j.pax.exam.nat.internal.NativeTestContainer.call(NativeTestContainer.java:83) at org.ops4j.pax.exam.spi.reactors.EagerSingleStagedReactor.invoke(EagerSingleStagedReactor.java:85) at org.ops4j.pax.exam.junit.JUnit4TestRunner$2.evaluate(JUnit4TestRunner.java:259) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184) at org.junit.runners.ParentRunner.run(ParentRunner.java:236) at org.ops4j.pax.exam.junit.JUnit4TestRunner.run(JUnit4TestRunner.java:86) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) Caused by: java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.ops4j.pax.exam.raw.extender.intern.ProbeInvokerImpl.injectContextAndInvoke(ProbeInvokerImpl.java:112) ... 20 more Caused by: java.lang.RuntimeException: java.lang.ClassCastException: class org.apache.cxf.bus.spring.SpringBusFactory at org.apache.cxf.BusFactory.newInstance(BusFactory.java:224) at org.apache.cxf.BusFactory.newInstance(BusFactory.java:194) at org.apache.cxf.BusFactory.getDefaultBus(BusFactory.java:90) at org.apache.cxf.BusFactory.getThreadDefaultBus(BusFactory.java:137) at org.apache.cxf.BusFactory.getThreadDefaultBus(BusFactory.java:122) at org.apache.cxf.jaxws.spi.ProviderImpl.createServiceDelegate(ProviderImpl.java:89) at javax.xml.ws.Service.<init>(Service.java:36) at myorg.engine.test.mocks.soapservice.client.CHMService.<init>(CHMService.java:42) at myorg.engine.service.OSGiServiceTest.testSoapServiceMock(OSGiServiceTest.java:133) ... 25 more Caused by: java.lang.ClassCastException: class org.apache.cxf.bus.spring.SpringBusFactory at java.lang.Class.asSubclass(Unknown Source) at org.apache.cxf.BusFactory.newInstance(BusFactory.java:218) ... 33 more

Я сказал, что это может быть из-задругой ClassLoader.Возможно ли это?

Есть идеи, как решить проблему?

Спасибо!

Ответы [ 3 ]

0 голосов
/ 02 сентября 2011

Я думаю, что "два определения класса BusFactory" - это красная сельдь.

Не уверен, какую версию CXF вы используете (предположим, что 2.4.2), но этот код пытается выполнять такие вещи, как ServiceLoader, используя загрузчик классов контекста потока при поиске реализаций подкласса.

Мое лучшее предположение - какая-то «магия» Spring, на которую опирается CXF, и вы упускаете комплект, который ее предоставляет. Рассматривая функцию CXF для Karaf, она имеет множество зависимостей, проверьте это и убедитесь, что вы их все получили - на данный момент может быть проще попробовать это с помощью karaf с установленной функцией CXF.

Если вы используете maven, к файлу функций можно получить доступ с помощью:

    <dependency>
        <groupId>org.apache.cxf.karaf</groupId>
        <artifactId>apache-cxf</artifactId>
        <version>2.4.2</version>
        <type>xml</type>
        <classifier>features</classifier>
    </dependency>

Некоторая документация по конфигурации шины здесь

0 голосов
/ 12 сентября 2011

В прошлом я видел странные ошибки, подобные этой с экзаменом pax. Это работает вне pax-экзамена в «нормальной» среде OSGi? В Talend Service Factory (http://talend.com/products/tsf) есть несколько примеров (в отдельном пакете загрузки примеров) клиентов и служб CXF, работающих в OSGi, и все они работают.

0 голосов
/ 01 сентября 2011

Да, похоже, у вас есть два определения класса BusFactory.SpringBusFactory реализует один из них, а вызов asSubclass () выполняется для другого.Поскольку один BusFactory не совпадает с другим классом, вы получите CCE.Найдите два разных пакета, содержащих класс BusFactory.Один из них будет импортирован пакетом, который определяет SpringBusFactory.

...