簡體   English   中英

用於為REST服務創建客戶端存根的java工具

[英]java tool to create client-side stubs for REST service

假設我有一個REST Web服務的WADL,我已經能夠在SoapUI中組合一堆請求(我對REST或SOAP並不陌生) - 而且我已經設法獲得了wadl2java工具從我的WADL自動生成並編譯類。

是否有任何教程演示如何使用這些類來訪問我的REST Web服務? 理想情況下,我希望避免使用大型框架(Spring可能很好,但我現在希望將依賴項保持在最低限度)。

這個網址提供了使用wadl2java的提示,但是,似乎沒有人提供在可行教程中實際使用工作產品的任何示例? 從CXF中的RESTful服務創建客戶端Java類

編輯:我正在使用wadl2java maven插件,這很棒。 除了我發現的一個錯誤之外,它可以完美地生成(並編譯)存根代碼。 我將查看下面提供的一些答案並添加我的反饋。

編輯13 / Mar:
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 lement注釋]

我最終使用的代碼:

    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。

假設您使用CXF並且您具有服務端點BookStore的生成類

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

有關詳細信息,請參閱以下鏈接

如果您確實知道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>

Apache CXF可以做到這一點。

在這里,您可以找到如何從wadl生成工件以及如何將它們用作客戶端。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM