2011-06-08 131 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