Получить список объектов из службы Restfull (внутри клиентского приложения) - PullRequest
2 голосов
/ 08 января 2012

Я новичок в веб-службах Rest и скажу, что я создал этот веб-сервис с использованием Netbeans

@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 я знаю, что эти объекты генерируются автоматически, но не в 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();
  }

}

Какой самый лучший и простой способ решить эту проблему?

Любая помощь приветствуется и спасибо заранее

1 Ответ

0 голосов
/ 19 января 2012

Пожалуйста, попробуйте меньше генерации кода и больше понимаете, что вы на самом деле делаете.На сервере вы генерируете сообщение XML с помощью JAXB.На стороне клиента вы можете использовать этот XML с языком программирования и библиотекой, которые вам нравятся.Просто используйте инструменты, такие как curl , чтобы увидеть, что происходит на самом деле по «проводу».Ваш сгенерированный клиентский сайт выглядит вполне разумно.Вам просто нужен ваш класс Article со стороны сервера на стороне клиента.Сгенерированный код использует Джерси , который может читать XML-сообщения по JAXB по умолчанию.Поэтому просто поместите ваш класс Article на стороне клиента в ваш classpath на стороне клиента и используйте его.Но, пожалуйста, ознакомьтесь с протоколом проводного уровня, чтобы понять переносимость вашего REST API.

...