【发布时间】:2014-03-11 19:59:17
【问题描述】:
假设我获得了一个用于 REST Web 服务的 WADL,并且我已经能够在 SoapUI 中组合一堆请求(我对 REST 或 SOAP 并不陌生) - 我已经设法获得wadl2java 工具从我的 WADL 中自动生成和编译类。
是否有任何教程演示如何使用这些类来访问我的 REST Web 服务?理想情况下,我希望避免使用大型框架(Spring 可能很好,但目前我希望将依赖项保持在最低限度)。
这个 url 提供了使用 wadl2java 的提示,但同样,似乎没有人在可行的教程中提供任何实际使用工作产品的示例? create client side java classes from a RESTful service in CXF
编辑:我正在使用 wadl2java maven 插件,非常棒。除了我发现的一个错误之外,它可以完美地生成(和编译)存根代码。我将查看下面提供的一些答案并添加我的反馈。
编辑 3 月 13 日:
Maven cxf-wadl2java-plugin 创建文件:target\generated-sources\cxf\com\example\services\v2\package-info.java:
@javax.xml.bind.annotation.XmlSchema(namespace = "http://www.example.com/services/v2",
elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
package com.example.services.v2;
看起来这不是我希望的简单解决方案。
作为参考,我得到的错误是:
[com.sun.istack.SAXException2:无法将类型“com.example.services.v2.ModelCriteria”编组为元素,因为它缺少 @XmlRootE
元素注释]
我最终使用的代码:
JAXRSClientFactoryBean bean = new JAXRSClientFactoryBean();
bean.setAddress("https://example.com/services/v2/rest");
bean.setUsername(...);
bean.setPassword(...);
bean.setResourceClass(ModelRestService.class);
bean.getOutInterceptors().add( new org.apache.cxf.interceptor.LoggingOutInterceptor() );
ModelRestService model = bean.create(ModelRestService.class);
ModelCriteria mc = oFact.createModelCriteria();
mc.setModelNumber("Test");
FindModelResult fmResult = model.findByCriteria(mc);
剩下的 @XmlRootElement 错误是因为我没有完全限定 REST 端点 /services/v2/rest。
【问题讨论】: