首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于生产/消费REST服务的最佳Java XML解析器

用于生产/消费REST服务的最佳Java XML解析器
EN

Stack Overflow用户
提问于 2010-10-11 19:53:17
回答 3查看 6.2K关注 0票数 2

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

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

我使用的一个服务使用JAXB。我能够使用他们的类,因此可以方便、轻松地使用他们的服务。它很漂亮,但在大多数情况下JAXB仍然是一个相当痛苦的问题。所以我研究了StAX和VTD-XML。StAX大约有4年没有更新了。VTD-XML是Java中处理XML的最新技术吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-10-12 03:20:05

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

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

票数 0
EN

Stack Overflow用户

发布于 2010-10-11 20:04:11

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

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

编辑:

带JAXB注释的类可以非常简单。类XML建模;

代码语言:javascript
复制
<customer>
  <name>Fred</name>
  <email>fred@email.com</email>
  <id>12345</id>
</customer>

就像这样简单;

代码语言:javascript
复制
@XmlRootElement
public class Customer
{
  private String name;
  private String email;
  private long id;

  public Customer()
  {
  }

  //getters and setters
}

然后,您可以像这样编写服务;

代码语言:javascript
复制
@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客户端;

代码语言:javascript
复制
Client client = Client.create();
WebResource resource = client.resource("myHost/getCustomer");
Customer fred = resource.get(Customer.class):

它非常简单。

票数 6
EN

Stack Overflow用户

发布于 2010-10-11 21:10:53

StAX已经很长时间没有更新了,因为它不需要更新。XML格式没有改变,StAX是这种格式到应用编程接口的一个相当简单的映射。就低级XML而言,它非常容易使用,而且我相信它相当高效;然而,它在很大程度上是一个低级API。它(非常粗略地)是用于编写二进制数据的DataInputStream和DataOutputSteam的等价物;使用它编写的代码必须在元素、属性等概念级别编写。我没有使用过VTD-XML,但它看起来差不多。

如果你想使用更高层次的东西,那么看看一些XML序列化工具,比如XStream --你能不能写一些类,通过适当的转换定制--可以从你输入的数据中读取?然后,您是否可以对细微不同的输入使用相同的类,而忽略缺少的字段?实际上,您可以在JAXB中使用“忽略缺少的XML元素”的方法吗?我不知道它对模式有多严格,也不知道是否可以这样处理您的输入。我在这里简直就是在摸黑打猎。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3905912

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档