1

最大 300kb の長さの文字列を返すことができる RESTful Web サービスからの応答を取得しています。

JaxB2 を使用して iy を非整列化しようとすると、最大 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 秒になりました。

4

2 に答える 2

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);
    }

}
于 2013-06-25T13:30:22.617 に答える