Пакет OSGi в качестве внешнего клиента веб-сервиса

Мне нужно вызвать внешний веб-сервис из моего пакета, который развернут в контейнере apache felix (я не могу использовать ServiceMix, fuse...). Я добавил пакет cxf-dosgi (которую можно загрузить с сайта здесь) и поместите следующие строки в мой pom.xml:

                    <Require-Bundle>cxf-dosgi-ri-singlebundle-distribution</Require-Bundle>
                     <Import-Package>
                        javax.jws,
                        javax.xml.bind,
                        javax.xml.bind.annotation,
                        javax.xml.namespace,
                        javax.xml.ws,
                        META-INF.cxf,
                        org.apache.cxf,
                        org.apache.cxf.binding,
                        org.apache.cxf.binding.soap,
                        org.apache.cxf.binding.soap.spring,
                        org.apache.cxf.bus,
                        org.apache.cxf.bus.resource,
                        org.apache.cxf.bus.spring,
                        org.apache.cxf.buslifecycle,
                        org.apache.cxf.catalog,
                        org.apache.cxf.configuration,
                        org.apache.cxf.configuration.spring,
                        org.apache.cxf.endpoint,
                        org.apache.cxf.headers,
                        org.apache.cxf.management,
                        org.apache.cxf.phase,
                        org.apache.cxf.resource,
                        org.apache.cxf.transport,
                        org.apache.cxf.transport.http,
                        org.apache.cxf.transport.http.policy,
                        org.apache.cxf.transport.http_jetty,
                        org.apache.cxf.transports.http,
                        org.apache.cxf.workqueue,
                        org.apache.cxf.ws.policy.builder.jaxb,
                        org.apache.cxf.wsdl,
                        org.apache.cxf.wsdl11,
                        org.apache.cxf.jaxws.*,
                        *
                    </Import-Package>

Я использую способ jaxws для установления связи:

QName SERVICE_NAME = new QName("http://test.com/", "MockImplService");
Service service = Service.create(new URL(endpointAddress + "?wsdl"), SERVICE_NAME);         
mockService= service.getPort(IMock.class);                                                

Когда я запускаю пример, у меня есть следующее исключение:

 Caused by: javax.xml.ws.spi.FactoryFinder$ConfigurationError: Provider org.apache.axis2.jaxws.spi.Provider not found
        at javax.xml.ws.spi.FactoryFinder$2.run(FactoryFinder.java:138)
        at javax.xml.ws.spi.FactoryFinder.doPrivileged(FactoryFinder.java:282)
        at javax.xml.ws.spi.FactoryFinder.newInstance(FactoryFinder.java:125)
        at javax.xml.ws.spi.FactoryFinder.access$200(FactoryFinder.java:42)
        at javax.xml.ws.spi.FactoryFinder$3.run(FactoryFinder.java:273)
        at javax.xml.ws.spi.FactoryFinder.doPrivileged(FactoryFinder.java:282)
        at javax.xml.ws.spi.FactoryFinder.find(FactoryFinder.java:168)
        at javax.xml.ws.spi.Provider.provider(Provider.java:39)
        at javax.xml.ws.Service.<init>(Service.java:36)
        at javax.xml.ws.Service.create(Service.java:116)

Любая идея, пожалуйста?


person BraveHeart    schedule 20.02.2013    source источник


Ответы (2)


Apache DOSGi предназначен для представления служб как веб-служб, а не для вызова других веб-служб. Хотя, вероятно, он содержит некоторый API для вызова других веб-сервисов.

person Maksim Sorokin    schedule 20.02.2013
comment
Спасибо за ответ. В этом случае, что мне делать? Есть ли решение для вызова внешнего веб-сервиса? - person BraveHeart; 20.02.2013
comment
Альтернативы точно есть. Как вы можете видеть из моих исправлений ответа, dosgi может содержать некоторый код, который можно использовать для вызова других веб-сервисов. - person Maksim Sorokin; 20.02.2013

Как-то используется реализация оси jaxws. У вас, вероятно, есть axis2-jaxws-xxx.jar в вашем пути к классам. Попробуйте удалить его. Вместо этого будет использоваться JRA jaxws (что должно подойти для оси и лучше для cxf).

person cornr    schedule 16.02.2016