2011-06-08 94 views
2

我用一个XMLAdapter解组一个非常大的XML文件,使用JAXB解组一个特定的“问题”类。 XMLAdapter非常简单,但它被多次调用 - 我们预计对于单个XML文件高达200万次。我们的测试文件较小 - 适配器被称为200,000次 - 但我们注意到性能受到影响。适配器是相当标准的:使用jaxb XMLAdapter会影响性能吗?

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内部的代码是否会减慢速度?在我的情况下,代码是相当简单的,所以它似乎有些相似解组代码将采取即使我没有使用适配器的地方..

+0

指定绑定文件中类似适配器的类是更好的解决方案还是与指定XMLAdapter基本相同? – BradEggers 2011-06-08 19:21:53

回答

1

注:我是EclipseLink JAXB (MOXy)引线和JAXB 2成员(JSR-222)专家组成员。

使用XmlAdapter将JAXB实现(地铁,MOXY,阿帕奇JaxMe等)之间变化的影响,但是将主要由以下部分组成:

  • 你已经在提供的代码的效率XmlAdapter
  • 检查初始化的XmlAdapter是否已传递到MarshallerUnmarshaller
+0

非常感谢您的回答!它带来了几个新的问题。看看上面的代码,你看到任何低效率?关于第二项,我怎样才能减少用于检查的时间?我应该使用setAdapter吗?如果不使用它,检查花费的时间会更长吗?再次感谢! – BradEggers 2011-06-10 13:59:42

+0

也想知道是否有任何性能之间的差异,把包的水平上的annotaition与进一步下降.. – BradEggers 2011-06-10 14:59:12

+0

@BradEggers - 在您的文章'AdaptedClass'是你的真正的领域类,并且你正在使用'对象'的XML表示。通常JAXB会将'Object'视为DOM类型。理想情况下,您可以创建一个JAXB可以编组为XML的POJO。有关示例,请参阅:http://bdoughan.blogspot.com/2010/12/jaxb-and-immutable-objects.html – 2011-06-14 17:13:40

相关问题