用于生成/使用REST服务的最佳Java XML解析器

时间:2010-10-11 11:53:17

标签: java xml xml-parsing vtd-xml

目前使用Java的内置XML DOM库进行创建/解析。丑陋,即使有很多辅助类和方法,性能和内存使用也很糟糕。

在生成和使用REST服务方面,处理XML的最佳Java工具或框架是什么?

我使用的服务使用JAXB。我能够使用他们的课程,方便,轻松地使用他们的服务。它很漂亮,但在大多数情况下JAXB仍然很痛苦。所以我查看了StAX和VTD-XML。 StAX在大约4年内没有更新。 VTD-XML是Java中XML处理的最先进技术吗?

3 个答案:

答案 0 :(得分:6)

你应该能够编写JAXB注释类,Jersey支持这些开箱即用并自动为你解析它们。它可能不是最高性能的解决方案,但它是一个非常好的干净应用程序。

除非你能证明你有性能问题(并且可以追溯到JAXB),否则我不会担心编组/解组开销。

编辑:
JAXB带注释的类可以非常简单。像XML一样建模XML;

<customer>
  <name>Fred</name>
  <email>fred@email.com</email>
  <id>12345</id>
</customer>

就像这样容易;

@XmlRootElement
public class Customer
{
  private String name;
  private String email;
  private long id;

  public Customer()
  {
  }

  //getters and setters
}

然后你可以写这样的服务;

@GET
@Produces(MediaType.APPLICATION_XML)
@Path("/getCustomer")
public Customer getCustomer()
{
  Customer c = new Customer();
  c.setName("Fred");
  c.setEmail("fred@email.com");
  c.setId(12345);
  return c;
}

..和这样的客户;

Client client = Client.create();
WebResource resource = client.resource("myHost/getCustomer");
Customer fred = resource.get(Customer.class):

精美简单。

答案 1 :(得分:1)

StAX在很长一段时间内没有更新,因为它不需要。 XML格式没有改变,StAX是一种相当简单的格式到API的映射。随着低级XML API的出现,它非常易于使用,我相信它非常有效;但是,它是一个非常低级的API。它(非常粗略地)用于编写二进制数据的DataInputStream和DataOutputSteam的XML等价物;使用它编写的代码必须在元素,属性等的概念级别编写。我没有使用过VTD-XML,但看起来大致相同。

如果你想使用更高级别的东西,那么看看一些XML序列化工具,比如XStream - 你能编写一些类,通过适当的转换定制 - 可以读取来自您的传入数据?那么你可以使用相同的类来进行微妙的不同输入,丢失的字段只是被忽略了吗?实际上,您是否可以使用JAXB中“缺少XML元素被忽略”的方法?我不知道它对模式有多严格,或者是否可以通过这种方式接近你的输入。我在这里黑暗中拍摄。

答案 2 :(得分:0)

我可以推荐Spring MVC 3+。 REST服务有开箱即用的支持。创建REST服务需要几分钟时间如果您了解Spring ...

http://blog.springsource.com/2009/03/08/rest-in-spring-3-mvc/