Веб-служба REST, принимающая СООБЩЕНИЕ с помощью Restlet - Лучшая практика

StackOverflow https://stackoverflow.com/questions/440989

Вопрос

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

public void acceptRepresentation(Representation rep) {

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

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

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

Это было полезно?

Решение

Это скорее ответ, который я искал. Благодаря Тьерри Буало за ответ:

  

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

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

     <Ол>   
  • http://www.restlet.org/documentation/1.1/api/org/restlet/res ource / DomRepresentat ion.html

  •   
  • http: //www.restlet.o rg / documents / 1.1 / api / org / restlet / res ource / SaxRepresentat ion.html

  •   

    Другие советы

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

    Обновление: для Restlet, JAXB расширение может быть то, что вам нужно.

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

    @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

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

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

    @Сообщение

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

    {

    попробуй

    {

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

    Document d = dom.getDocument();

    .

    .

    } перехват (Исключение e)

    { e.printStackTrace();}

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

    И мой бит flex выглядит примерно так - var service :HTTPService = новый HTTPService();service.method="ОПУБЛИКОВАТЬ";service.ContentType="приложение/xml" service.url=url-адрес;токен var :AsyncToken = service.send(параметры);

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

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top