我有我的资源和他们典型的重写方法来处理 POST 请求。

public void acceptRepresentation(Representation rep) {

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

我想知道的是处理 XML 数据包的最佳实践。我看到很多使用 Form 的示例 - 但肯定有一种方法可以使用 Representation 对象本身或将其转换为一些有用的 XML 对象???

非常感谢您对如何解析资源中传入的 XML 的任何帮助。

有帮助吗?

解决方案

这更像是我一直在寻找的回应。谢谢 蒂埃里·布瓦洛 对于答案:

您可以使用两种“ XML表示”:多么代表和萨克斯代表。您可以通过已发布的表示形式实例化两者。例如。:dompresentation xmlRep =新的dommercentation(rep);

Dompresentation可让您访问DOM文档。SaxTrementation允许您使用自己的ContentHandler解析XML文档。请参阅此处的Javadocs 1和2。

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

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

其他提示

我们目前做到这一点使用RestEasy的,这是一种替代JAX-RS实现。我们使用JAXB绑定(注释)的XML和我们的模型的POJO之间进行映射,因此它知道如何指定的 JAXB提供商的到JAX-RS。这是在我们的的RESTful在Java EE的网络服务与的RESTEasy(JAX-RS)文章,这可能会有帮助。

更新:为的Restlet,所述 JAXB扩展可能是你所需要的。

通过representation.getText()方法

,则可以得到可以被送入一个SAX解析器或DOM读取器的字符串。

@Simonë

我不明白:这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和这里的是,我使用的代码片段 -

@Post

公共表示处理(表示实体)

{

{

DomRepresentation DOM =新DomRepresentation(实体);

文献d = dom.getDocument();

}赶上(例外五)

{e.printStackTrace(); }

和它抛出在dom.getDocument()行一个空指针异常。这意味着没有数据实际到达。

和我的Flex位看起来像这样 - VAR服务:的HTTPService =新的HTTPService(); service.method = “POST”; service.contentType = “应用/ xml” 的service.url = URL; VAR令牌:的AsyncToken = service.send(PARAMS);

其中params为一个XML对象。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top