2014-04-02 104 views
0

我試圖通過CXF構建一個REST客戶端。以下代碼在junit環境中工作。cxf客戶端依賴關係

JAXRSClientFactoryBean bean2 = new JAXRSClientFactoryBean(); 
bean2.setAddress("http://localhost:8181/cxf/treenodeService/"); 
bean2.setResourceClass(ITreeNodeService.class); 
bean2.setProviders(Arrays.asList(new TreeNodeBeanProvider())); 
ITreeNodeService treeService = bean2.create(ITreeNodeService.class); 

List<TreeNodeBean> treeNodeBeans = treeService.getNodes(); 
assertEquals("We expected only one node, the global", 1, treeNodeBeans.size()); 

但是,如果我在osgi環境中嘗試此代碼,它會失敗,因爲缺少依賴關係。那麼這段代碼在equinox/osgi環境中運行所需的最小依賴關係是什麼?

目前我已經加入

javax.ws.rs.javax.ws.rs-api;bundle-version="2.0.0", 
org.apache.cxf.cxf-rt-frontend-jaxrs;bundle-version="2.7.10", 
org.apache.cxf.cxf-api;bundle-version="2.7.10", 
org.apache.cxf.cxf-rt-core;bundle-version="2.7.10", 
org.apache.cxf.cxf-rt-bindings-xml;bundle-version="2.7.10", 
org.apache.cxf.cxf-rt-transports-http;bundle-version="2.7.10", 
org.apache.cxf.cxf-rt-transports-http-jetty;bundle-version="2.7.10", 
javax.wsdl;bundle-version="1.6.2", 

UPDATE -1-缺少依賴

這些缺少的依賴我從日食驗證得到。

  • com.wordnik.swagger.jaxrs.config
  • com.wordnik.swagger.jaxrs.listing
  • org.apache.ws.commons.schema
  • org.apache.ws.commons。 schema.constants
  • org.apache.ws.commons.schema.extensions
  • org.apache.ws.commons.schema.resolver
  • org.apache.ws.commons.schema.utils

真誠

+0

你能解釋一下爲什麼反對投票?比我可以解決這個問題。 –

+0

你可以添加一個堆棧跟蹤,哪些類丟失? –

回答

0

好的我沒有得到它並運行。所以我切換到CXF - DOSGI,使用上面列出的依賴關係。 (但不同的版本) 然後,我不得不解決另一個問題,由於缺少http傳輸。最後,通過OSGI REST客戶端訪問REST服務的代碼看起來像。

JAXRSClientFactoryBean sf = new JAXRSClientFactoryBean(); 
sf.setResourceClass(serviceClass); 
sf.setAddress("http://" + getServerUrl() + "/cxf/" + serviceName); 
sf.setProviders(providers); 

ConduitInitiatorManager cim = sf.getBus().getExtension(ConduitInitiatorManager.class); 
    cim.registerConduitInitiator("http://cxf.apache.org/transports/http", 
    new HTTPTransportFactory(sf.getBus())); 

service = sf.create(serviceClass); 

進一步閱讀link