【问题标题】:java tool to create client-side stubs for REST service用于为 REST 服务创建客户端存根的 java 工具
【发布时间】: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。

【问题讨论】:

    标签: java rest cxf wadl


    【解决方案1】:

    假设您使用 CXF 并且为服务端点 BookStore 生成了一个类

    BookStore store = JAXRSClientFactory.create("http://bookstore.com",
                                                BookStore.class);
    Books books = store.getAllBooks();
    

    查看以下链接了解详情:

    【讨论】:

    • 使用您的代码示例让我更近了一步。我现在得到:无法将类型“ModelCriteria”编组为元素,因为它缺少@XmlRootElement 注释。除了向我的所有类型添加此注释外,我还看到了一些关于将我的元素包装在 JAXBElement 中的指导。我想我的存根可以接受吗?
    • 根元素可以定义在package-info文件stackoverflow.com/questions/16584555/…
    【解决方案2】:

    如果你知道 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>
    

    【讨论】:

      【解决方案3】:

      Apache CXF可以做到。

      您可以在此处了解如何从 wadl 生成工件以及如何将它们用作客户端。

      http://cxf.apache.org/docs/jaxrs-services-description.html

      【讨论】:

        猜你喜欢
        • 2013-10-07
        • 1970-01-01
        • 2018-01-18
        • 1970-01-01
        • 2014-03-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多