【问题标题】:Does using a jaxb XMLAdapter affect performance?使用 jaxb XMLAdapter 会影响性能吗?
【发布时间】:2011-06-08 16:54:43
【问题描述】:

我正在使用 JAXB 解组一个非常大的 XML 文件,其中 XMLAdapter 用于解组一个特定的“问题”类。 XMLAdapter 相当简单,但它被调用了很多次——我们预计单个 xml 文件会调用多达 200 万次。我们的测试文件更小——适配器被调用了 200,000 次——但我们注意到性能受到了影响。适配器相当标准:

public class MyAdapter extends XmlAdapter<Object, AdaptedClass> {

  public static final String ATTRIBUTE_HREF = "href";

  public AdaptedClass unmarshal(Object obj) throws Exception {

  Element element = null;

  if (obj instanceof Element) {

      element = (Element)obj;
      String id = element.getAttribute(ATTRIBUTE_HREF);
      AdaptedClass pr = new AdaptedClass();
      pr.setHref(id);                           
      return pr;
  } 
 }

我的问题:使用适配器有开销吗?例如,是否必须从表中查找适配器本身? adatper 中的代码会减慢速度吗?就我而言,代码相当简单,因此即使我没有使用适配器,似乎也会发生一些类似的解组代码。..

【问题讨论】:

  • 在绑定文件中指定一个类似适配器的类会是一个更好的解决方案,还是这与指定一个 XMLAdapter 本质上是一样的?

标签: performance jaxb adapter


【解决方案1】:

注意:我是 EclipseLink JAXB (MOXy) 负责人,也是 JAXB 2 (JSR-222) 专家组的成员。

使用 XmlAdapter 的影响因 JAXB 实现(Metro、MOXy、Apache JaxMe 等)而异,但主要包括以下内容:

  • 您在XmlAdapter 中提供的代码的效率
  • 检查是否已将初始化的XmlAdapter 传递给MarshallerUnmarshaller

【讨论】:

  • 非常感谢您的回答!它带来了几个新问题。看看上面的代码,你有没有发现效率低下的地方?关于第二项,我怎样才能最大限度地减少进行这项检查的时间?我应该使用 setAdapter 吗?如果不使用,检查需要更长的时间吗?再次感谢!
  • 还想知道将注释放在包级别与进一步降低之间是否存在任何性能差异..
  • @BradEggers - 在您的帖子中,AdaptedClass 是您真正的域类,您使用Object 表示 XML。通常 JAXB 会将Object 视为 DOM 类型。理想情况下,您将创建一个 JAXB 可以编组为 XML 的 POJO。示例见:bdoughan.blogspot.com/2010/12/jaxb-and-immutable-objects.html
猜你喜欢
  • 2011-10-14
  • 2010-09-26
  • 1970-01-01
  • 2021-04-29
  • 2012-02-04
  • 2011-01-28
  • 1970-01-01
  • 1970-01-01
  • 2010-09-09
相关资源
最近更新 更多