Веб-сервис REST, принимающий POST с использованием Restlet - Best Practice - PullRequest
2 голосов
/ 14 января 2009

У меня есть свой ресурс, и он типичный переопределенный метод для обработки запросов POST.

public void acceptRepresentation(Representation rep) {

  if (MediaType.APPLICATION_XML.equals(rep.getMediaType())) {
      //Do stuff here
  }
  else {
      //complain!
  }
}

То, что я хочу знать, - это лучшая практика для обработки моего пакета XML. Я вижу много примеров использования формы - но, несомненно, есть способ работать с самим объектом представления или приводить его к какому-нибудь полезному объекту XML ???

Любая помощь в том, как вы должны анализировать входящий XML в вашем ресурсе, очень ценится.

Ответы [ 5 ]

3 голосов
/ 14 января 2009

Это больше ответ, который я искал. Спасибо Тьерри Буало за ответ:

Вы можете использовать два вида XML представления ": ДомРепрезентация и SaxRepresentation. Вы можете инстанцировать их обоих с размещенное представление. Например.: DomRepresentation xmlRep = new DomRepresentation (Rep);

DomRepresentation дает вам доступ к документу Dom. SaxRepresentation позволяет разбирать XML документ с вашим собственным ContentHandler. Смотрите Javadocs здесь 1 и здесь 2.

  1. http://www.restlet.org/documentation/1.1/api/org/restlet/res​ource/DomRepresentat​ion.html

  2. http://www.restlet.o​rg/documentation/1.1​/api/org/restlet/res​ource/SaxRepresentat​ion.html

1 голос
/ 14 января 2009

В настоящее время мы делаем это с помощью RESTeasy, альтернативной реализации JAX-RS. Мы используем привязки JAXB (аннотации) для сопоставления между XML и нашими моделями POJO и указываем JAXB-провайдера для JAX-RS, чтобы он знал, как. Это описано в нашей статье *1003*, которая может помочь в наших *1003* веб-службах RESTful в Java EE с RESTEasy (JAX-RS).

Обновление: для рестлета расширение

JAXB может быть тем, что вам нужно.

0 голосов
/ 07 января 2010

Это та же самая процедура даже в рестлете 2.0 ??

Я использую рестлет 2.0m6, и вот фрагмент кода, который я использую -

@ Сообщение

процесс публичного Представления (Представительство)

{

1011 * попробовать *

{

DomRepresentation dom = новая DomRepresentation (сущность);

Документ d = dom.getDocument ();

.

.

} поймать (исключение е)

{e.printStackTrace (); }

и он выдает исключение Null Pointer в строке dom.getDocument (). Это означает, что данные на самом деле не поступили.

И мой бит flex выглядит следующим образом: var service: HTTPService = new HTTPService (); service.method = "POST"; service.contentType = "application / xml" service.url = url; var token: AsyncToken = service.send (params);

где params - это объект XML.

0 голосов
/ 09 апреля 2009

@ Simon E

Я не понимаю: какую реализацию REST для Java вы используете?

Итак, я просто приведу пример использования JAX-RS (реализация на Джерси)

Серверная часть (метод некоторого класса REST):

@POST
@Path("/upload")
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Produces(MediaType.TEXT_PLAIN)
public static Response upload(
        @FormParam("name") String name,
        @FormParam("content") String content)
        throws Exception {

    // NOTE: you get your content as String
    // (do something here)

    return Response.ok().build();
}

Клиентская часть (метод некоторого теста JUnit):

@Test
public void uploadFile()
        throws Exception {

    String address = "http://0.0.0.0:8000/r/upload";

    WebResource r = Client.create().resource(address);
    Form form = new Form();
    form.add("name", "test");
    form.add("content", "SOME CONTENT GOES HERE");
    String s = r.post(String.class, form);

    System.out.println(s);
}

Вот и все !!!

В случае проблем с импортом:
Серверу нужны javax.ws.rs. * И javax.ws.rs.core. *
Клиенту нужен com.sun.jersey.api.client. * И com.sun.jersey.api.representation. *

В любом случае, я бы посоветовал вам использовать JAX-RS, а не альтернативные реализации, потому что JAX-RS будет частью Предстоящие Java EE 6

0 голосов
/ 14 января 2009

С помощью метода representation.getText() вы можете получить строку, которая может быть передана в SAX-парсер или читатель dom.

...