我从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秒。
答案 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);
}
}