用于创建REST服务客户端存根的Java工具

5
假设我已经获得了一个REST webservice的WADL,并且已经能够在SoapUI中组合出一堆请求(我对REST或SOAP并不陌生),并且我已经成功地让wadl2java工具自动生成和编译了来自我的WADL的类。是否有任何教程演示如何使用这些类来访问我的REST webservice?我希望尽量避免使用大型框架(Spring可能很好,但我想暂时保持我的依赖最小化)。这个网址提供了一个提示,可以使用wadl2java,但是再次强调,没有人提供任何实际使用工作产品的可行教程示例?create client side java classes from a RESTful service in CXF 编辑:我正在使用wadl2java的maven插件,它非常棒。除了我发现的一个错误之外,它完美地生成(和编译)存根代码。我将查看下面提供的一些答案并添加我的反馈。

编辑于3月13日:
Maven的cxf-wadl2java插件创建了文件: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”作为元素进行编排,因为它缺少@XmlRootElement注释]

最终使用的代码:

    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。
3个回答

6

使用您的代码示例让我更接近了一步。现在我得到了以下信息:无法将类型“ModelCriteria”作为元素进行编组,因为它缺少@XmlRootElement注释。除了将此注释添加到我所有的类型之外,我已经看到了一些关于在JAXBElement<>中包装我的元素的指导。我想这对我的存根来说是可以接受的。 - Chris K
根元素可以在package-info文件中定义。https://dev59.com/9mQn5IYBdhLWcg3wxZcn - anttix

4

如果您熟悉maven,您可以使用wadl2java maven插件,以下是示例用法。

<plugin>
                        <groupId>org.apache.cxf</groupId>
                        <artifactId>cxf-wadl2java-plugin</artifactId>
                        <version>2.7.6</version>
                        <executions>
                            <execution>
                                <id>generate-sources</id>
                                <phase>generate-sources</phase>
                                <configuration>
                                    <sourceRoot>${basedir}/target/generated/src/main/java</sourceRoot>
                                    <wadlOptions>
                                        <wadlOption>
                                            <wadl>${basedir}/src/main/resources/wadl/kp.wadl</wadl>
                                            <impl>true</impl>
                                            <packagename>com.kp.webservices.service</packagename>
                                            <extraargs>
                                                <extraarg>-supportMultipleXmlReps</extraarg>
                                            </extraargs>
                                        </wadlOption>
                                    </wadlOptions>
                                </configuration>
                                <goals>
                                    <goal>wadl2java</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接