2015-01-23 4 views
0

Im работает с JBoss 8.1 на Windows 7 и пытается отправить запрос, чтобы получить ответ xml и отобразить его в мои POJO. Я сделал это с 1 URL как этотКак избежать проверки dtd при чтении ответа от сообщения в Java/Jboss

WebTarget webTarget = ClientBuilder.newClient().target(queryString); 
Bean bean=webTarget.request(MediaType.APPLICATION_XML).get(Bean.class); 

, и это дало мне excactly то, что я хотел - куча классов, соответствующих структуре XML.

Теперь я хотел бы сделать то же самое с почтой и другой URL, но им заканчивающихся с FileNotFoundException и ссылку на DTD файл в XML:

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE oxip SYSTEM "combinations.dtd"> 

Я не хочу, чтобы сделать проверки так я сделал следующее:

javax.ws.rs.core.Response vResponse; 
WebTarget target=ClientBuilder.newClient().target(queryString); 
response = target.request(MediaType.TEXT_XML).post(Entity.text(apiRequest)); 
String string = vResponse.readEntity(String.class); 


JAXBContext jaxbContext = JAXBContext.newInstance(Bean.class); 
SAXParserFactory saxParserFactory = SAXParserFactory.newInstance(); 
saxParserFactory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false); 
XMLReader xmlReader = saxParserFactory.newSAXParser().getXMLReader(); 
InputSource inputSource = new InputSource(new StringReader(string)); 
SAXSource source = new SAXSource(xmlReader, inputSource); 
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); 
Bean bean = (Bean) unmarshaller.unmarshal(vSource); 

Isnt есть способ Aviod это явное использование SAXParser и JAXBContext как настройка JBoss JAXB не использовать проверку ??

+0

Я действительно надеюсь, что кто-то может помочь на этом ?? –

ответ

0

Вставив следующий код проблема была решена:

XMLReader vXmlReader = vSAXParserFactory.newSAXParser().getXMLReader(); 

//To avoid validating against external dtd which does not exist 
EntityResolver entityResolver = new EntityResolver() { 
@Override 
public InputSource resolveEntity(String publicId, String systemId) throws SAXException, IOException { 
    return new InputSource(new StringReader("")); 
    } 
}; 

vXmlReader.setEntityResolver(entityResolver); 

InputSource vInputSource = new InputSource(new StringReader(vMostPlayedResponse)); 

 Смежные вопросы

  • Нет связанных вопросов^_^