Я вижу странное поведение при преобразовании XML в объект JAVA с использованием JAXB с приведенным ниже фрагментом (приложение, составленное из фрагмента, развернуто в IBM WAS 8.0.0.6). Этот код работает в течение примерно 20 дней, а затем завершается с ошибкой, указанной ниже. Но если я перезапущу JVM, то эта ошибка не будет видна еще через 20 дней. Я подозревал утечку памяти и использовал профилировщик, но не нашел ничего тревожного. Этот фрагмент имеет какие-либо проблемы?
Ценю вашу помощь !!
Фрагмент кода:
HttpGet httpGet = new HttpGet(URL);
HttpResponse response =
HttpClientWrapper.getInstance().execute(httpGet);
String httpGetResponse = EntityUtils.toString(response.getEntity(), "UTF-8");
EntityUtils.consume(response.getEntity());
StringReader stringReader = new StringReader(httpGetResponse);
JAXBContext jaxbContext = JAXBContext.newInstance(
POJO.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
POJO pojo = (
POJO) jaxbUnmarshaller.unmarshal(stringReader); // <- Error is thrown at this line
Пример XML:
<?xml version="1.0" encoding="UTF-8"?>
<usercontext>
<userdetails>
<name>TEST CUSTOMER</name>
<zipCode>48032</zipCode>
<phone>2343253434</phone>
</userdetails>
</usercontext>
трассировка стека
javax.xml.bind.UnmarshalException: White space is required between "SYSTEM" and the system identifier.
at com.ibm.xml.xlxp2.jaxb.msg.JAXBMessageProvider.throwUnmarshalExceptionWrapper(JAXBMessageProvider.java:93) at
com.ibm.xml.xlxp2.jaxb.unmarshal.impl.JAXBDocumentScanner.produceFatalErrorEvent(JAXBDocumentScanner.java:297) at
com.ibm.xml.xlxp2.scan.DocumentScanner.reportFatalError(DocumentScanner.java:4886) at
com.ibm.xml.xlxp2.scan.DTDScanner.reportFatalError(DTDScanner.java:444) at
com.ibm.xml.xlxp2.scan.DTDScanner.scanDoctypeDeclCommon(DTDScanner.java:534)
at com.ibm.xml.xlxp2.scan.DTDScanner.scanDoctypeDecl(DTDScanner.java:481)
at com.ibm.xml.xlxp2.jaxb.unmarshal.impl.JAXBDocumentScanner$JAXBDTDSupport.scanDoctypeDecl(JAXBDocumentScanner.java:58) at
com.ibm.xml.xlxp2.scan.DocumentScanner.scanProlog(DocumentScanner.java:1757) at
com.ibm.xml.xlxp2.scan.DocumentScanner.nextEvent(DocumentScanner.java:1324) at
com.ibm.xml.xlxp2.scan.DocumentScanner.parseDocumentEntity(DocumentScanner.java:1176) at
com.ibm.xml.xlxp2.jaxb.unmarshal.impl.JAXBDocumentScanner.unmarshal(JAXBDocumentScanner.java:147) at
com.ibm.xml.xlxp2.jaxb.unmarshal.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:158) at
com.ibm.xml.xlxp2.jaxb.unmarshal.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:139) at