当前使用Java的内置XML DOM库进行创建/解析。很难看,即使有很多帮助类和方法,性能和内存使用也很糟糕。
在生产和使用REST服务方面,处理XML的最佳Java工具或框架是什么?
我使用的一个服务使用JAXB。我能够使用他们的类,因此可以方便、轻松地使用他们的服务。它很漂亮,但在大多数情况下JAXB仍然是一个相当痛苦的问题。所以我研究了StAX和VTD-XML。StAX大约有4年没有更新了。VTD-XML是Java中处理XML的最新技术吗?
发布于 2010-10-12 03:20:05
我可以推荐Spring MVC 3+。对REST服务有开箱即用的支持。如果你了解Spring,创建REST服务需要几分钟的时间……
http://blog.springsource.com/2009/03/08/rest-in-spring-3-mvc/
发布于 2010-10-11 20:04:11
您应该能够编写带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;
}像这样的..and客户端;
Client client = Client.create();
WebResource resource = client.resource("myHost/getCustomer");
Customer fred = resource.get(Customer.class):它非常简单。
发布于 2010-10-11 21:10:53
StAX已经很长时间没有更新了,因为它不需要更新。XML格式没有改变,StAX是这种格式到应用编程接口的一个相当简单的映射。就低级XML而言,它非常容易使用,而且我相信它相当高效;然而,它在很大程度上是一个低级API。它(非常粗略地)是用于编写二进制数据的DataInputStream和DataOutputSteam的等价物;使用它编写的代码必须在元素、属性等概念级别编写。我没有使用过VTD-XML,但它看起来差不多。
如果你想使用更高层次的东西,那么看看一些XML序列化工具,比如XStream --你能不能写一些类,通过适当的转换定制--可以从你输入的数据中读取?然后,您是否可以对细微不同的输入使用相同的类,而忽略缺少的字段?实际上,您可以在JAXB中使用“忽略缺少的XML元素”的方法吗?我不知道它对模式有多严格,也不知道是否可以这样处理您的输入。我在这里简直就是在摸黑打猎。
https://stackoverflow.com/questions/3905912
复制相似问题