我尝试通过CXF构建REST客户端。以下代码适用于junit环境。
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",
更新-1-缺少相关性
这些是我从eclipse验证中得到的缺失依赖项。
此致
答案 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