JaxB在大文档上的表现

时间:2013-06-25 11:23:27

标签: java xml java-ee jaxb xml-serialization

我从RESTful Web服务获得响应,该服务可以返回长达300kb的String。

当我尝试使用JaxB2解组时,最多需要12秒

我能做些什么吗?

public class Convertor{

   JAXBContext responseJaxbContext;

   public Convertor(){
      requestJaxbContext = JAXBContext.newInstance(MyClassResponse.class);   
   }


    public MyClassResponse convertXml(String str) {
         MyClassResponse response = null;   
        try {
             Unmarshaller jaxbUnMarshaller = bookingResponseJaxbContext.createUnmarshaller();
             StringReader reader = new StringReader(str);
             response = (MyClassResponse) jaxbUnMarshaller.unmarshal(reader);

        } catch (JAXBException e) {
            e.printStackTrace();
        }
        return response;
    }
}

更新:我使用

禁用了架构验证

jaxbUnMarshaller.setSchema(null);

现在我的解编时间是5-7秒。

2 个答案:

答案 0 :(得分:0)

确保只将JAXBContext / Convertor类实例化一次。

在我的经验中,创建一个JAXBContext非常昂贵。

编辑: 但这不是对12s的解释,我猜......

答案 1 :(得分:0)

为了进行比较,尝试使用SAX解析器解析XML文档,以确定我们花费多少时间来解析XML文档。

import java.io.StringReader;
import javax.xml.parsers.*;
import org.xml.sax.*;
import org.xml.sax.helpers.DefaultHandler;

public class Demo {

    public static void main(String[] args) throws Exception {
        String xml; // Your XML

        SAXParserFactory spf = SAXParserFactory.newInstance();
        spf.setNamespaceAware(true);
        SAXParser sp = spf.newSAXParser();
        XMLReader xmlReader = sp.getXMLReader();

        xmlReader.setContentHandler(new DefaultHandler());

        StringReader reader = new StringReader(xml);
        InputSource inputSource = new InputSource(reader);

        // Profile This
        xmlReader.parse(inputSource);
    }

}