目前使用 Java 的内置 XML DOM 库进行创建/解析。丑陋,即使有很多辅助类和方法,性能和内存使用也很糟糕。
在生产和使用 REST 服务方面,处理 XML 的最佳 Java 工具或框架是什么?
我使用的服务使用 JAXB。我能够使用他们的课程,从而方便、轻松地使用他们的服务。它很漂亮,但在大多数情况下,JAXB 仍然很痛苦。所以我研究了StAX 和VTD-XML。StAX 大约有 4 年没有更新了。VTD-XML 是 Java 中 XML 处理的最先进技术吗?
目前使用 Java 的内置 XML DOM 库进行创建/解析。丑陋,即使有很多辅助类和方法,性能和内存使用也很糟糕。
在生产和使用 REST 服务方面,处理 XML 的最佳 Java 工具或框架是什么?
我使用的服务使用 JAXB。我能够使用他们的课程,从而方便、轻松地使用他们的服务。它很漂亮,但在大多数情况下,JAXB 仍然很痛苦。所以我研究了StAX 和VTD-XML。StAX 大约有 4 年没有更新了。VTD-XML 是 Java 中 XML 处理的最先进技术吗?
您应该能够编写带有 JAXB 注释的类,Jersey 开箱即用地支持这些并自动为您解析它们。它可能不是最高效的解决方案,但却是一个非常干净的应用程序。
除非您可以证明您有性能问题(并且可以将其追溯到 JAXB),否则我不会担心编组/解组开销。
编辑:
JAXB 注释类可以非常简单。像 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):
它非常简单。
StAX 很久没有更新了,因为它不需要更新。XML 格式没有改变,StAX 是将该格式相当简单的映射到 API。随着低级 XML API 的发展,它非常易于使用,而且我相信非常高效;然而,它是一个非常低级的 API。它(非常粗略地)相当于用于写入二进制数据的 DataInputStream 和 DataOutputSteam 的 XML;使用它编写的代码必须在元素、属性等的概念级别上编写。我没有使用过VTD-XML,但看起来差不多。
如果你想使用更高级别的东西,那么看看一些 XML 序列化工具,比如XStream——你能写一些类,通过适当的转换定制——可以从你的传入数据中读取吗?然后,您能否将相同的类用于细微的不同输入,而忽略缺失的字段?实际上,您可以对 JAXB 使用“忽略缺失的 XML 元素”方法吗?我不知道模式有多严格,也不知道您的输入是否可以以这种方式处理。我非常喜欢在黑暗中拍摄。
我可以推荐 Spring MVC 3+。对 REST 服务有开箱即用的支持。创建 REST 服务需要几分钟 如果您了解 Spring...
http://blog.springsource.com/2009/03/08/rest-in-spring-3-mvc/