У меня есть свой ресурс и типичный переопределенный метод для обработки запросов POST.
public void acceptRepresentation(Representation rep) {
if (MediaType.APPLICATION_XML.equals(rep.getMediaType())) {
//Do stuff here
}
else {
//complain!
}
}
Я хочу знать, как лучше всего обрабатывать мой пакет XML. Я вижу много примеров использования формы - но, конечно, есть способ работать с самим объектом представления или преобразовать его в какой-нибудь полезный объект XML ???
Любая помощь в том, как вы должны анализировать входящий XML в вашем ресурсе, приветствуется.




С помощью метода representation.getText() вы можете получить строку, которую можно передать в синтаксический анализатор SAX или читатель dom.
В настоящее время мы делаем это с помощью RESTeasy, альтернативной реализации JAX-RS. Мы используем привязки (аннотации) JAXB для сопоставления между XML и POJO нашей модели и указываем Поставщик JAXB для JAX-RS, чтобы он знал, как это сделать. Это описано в нашем Статья о веб-сервисах RESTful в Java EE с RESTEasy (JAX-RS), что может помочь.
Обновление: для Restlet Расширение JAXB может быть тем, что вам нужно.
Да, потому что Restlet также является реализацией JAX-RS. Извините, я не понял.
Это скорее тот ответ, который я ожидал. Спасибо Тьерри Буало за ответ:
You can use two kinds of "XML representations": DomRepresentation and SaxRepresentation. You can instantiate both of them with the posted representation. E.g.: DomRepresentation xmlRep = new DomRepresentation(rep);
The DomRepresentation gives you access to the Dom document. The SaxRepresentation allows you to parse the XML doc with your own contentHandler. See the javadocs here 1 and here 2.
@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.представительство. *
В любом случае, я бы посоветовал вам использовать JAX-RS, а не альтернативные реализации, потому что JAX-RS будет частью предстоящий Java EE 6
Это такая же процедура даже в рестлете 2.0 ??
Я использую restlet 2.0m6, и вот фрагмент кода, который я использую -
@Почта
процесс публичного представительства (представительство)
{
пытаться
{
DomRepresentation dom = новый DomRepresentation (объект);
Документ d = dom.getDocument ();
.
.
} catch (исключение e)
{e.printStackTrace (); }
и генерирует исключение нулевого указателя в строке dom.getDocument (). Это означает, что данные фактически не поступили
А мой гибкий бит выглядит так - var service: HTTPService = new HTTPService (); service.method = "POST"; service.contentType = "приложение / xml" service.url = url; токен var: AsyncToken = service.send (params);
где params - объект XML.
Не могли бы вы привести пример того, как вы вызываете остальную веб-службу с сообщением и параметрами. спасибо, Рой