从Restful服务(在客户端应用程序内)中检索实体列表

时间:2012-01-08 00:00:36

标签: java web-services rest client entities

我是Rest Web服务的新手,并说我已经使用Netbeans

创建了这个Web服务
@Path("browse")
@Stateless
public class ArticleBrowseResource {

   @EJB
   private ArticleSearcherLocal ejbRef;

   @GET
   @Produces(MediaType.APPLICATION_XML)
   public List<Article> browse(@DefaultValue("") @QueryParam("username") String username,@QueryParam("sd") String sd) {

      // convert sd string to date
      List<Article> articles = ejbRef.search(username, date);
      return articles;
   }
}

其中Article是使用@XmlRootElement

进行分配的实体

现在我如何在我的客户端中查看这篇文章列表,为简单起见,我们只是说它是一个java标准应用程序?在SOAP Web服务中,我知道这些对象是自动生成的,但不是在Rest中。

这是Netbeans为此服务生成的客户端类

public class ArticleBrowseClient {
  private WebResource webResource;
  private Client client;
  private static final String BASE_URI = "http://localhost:8080/cityblog/rest";

  public ArticleBrowseClient() {
    com.sun.jersey.api.client.config.ClientConfig config = new com.sun.jersey.api.client.config.DefaultClientConfig();
    client = Client.create(config);
    webResource = client.resource(BASE_URI).path("browse");
  }

  public <T> T browse(Class<T> responseType, String username, String sd) throws UniformInterfaceException {
    WebResource resource = webResource;
    if (username != null) {
        resource = resource.queryParam("username", username);
    }
    if (sd != null) {
        resource = resource.queryParam("sd", sd);
    }
    return resource.accept(javax.ws.rs.core.MediaType.APPLICATION_XML).get(responseType);
  }

  public void close() {
    client.destroy();
  }

}

解决此问题的最佳和最简单的方法是什么?

感谢任何帮助 thx提前

1 个答案:

答案 0 :(得分:0)

请尝试减少代码生成并更好地了解您实际在做什么。在服务器上,您可以在JAXB的帮助下生成XML消息。在客户端,您可以使用您喜欢的编程语言和库来使用此XML。只需使用像curl这样的工具来查看实际上“电线”的内容。您生成的客户端站点看起来完全合理您只需要从客户端的服务器端获取Article类。生成的代码使用Jersey,默认情况下,每个JAXB可以读取XML消息。因此,只需将服务器端的Article类放在客户端类路径中并使用它。但是,请查看有线级协议以了解REST API的可移植性。