2013-02-20 52 views
0

我需要从我的包被部署在阿帕奇菲利克斯容器调用外部Web服务(我不能使用的ServiceMix,保险丝...) 我加管束cxf- dosgi(可从here下载),并把下面的线在我的pom.xml:OSGi包作为外部Web服务客户端

    <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) 

任何想法吗?

回答

0

Apache DOSGi旨在将服务作为web服务公开,而不是调用其他web服务。虽然,它可能包含一些API来调用其他Web服务。

+0

感谢您的回答。在这种情况下,我应该怎么做?有没有解决方案来调用外部webService? – BraveHeart 2013-02-20 18:48:16

+0

肯定有替代品。正如你从我的回答“纠正”中看到的,dosgi可能包含一些可用于调用其他web服务的代码。 – 2013-02-20 18:52:42

0

以某种方式使用轴jaxws实现。你的类路径中可能有一个axis2-jaxws-xxx.jar。尝试删除它。 JRA jaxws将被用来代替(这对轴应该是好的,对于cxf应该更好)。