sTAX XMLEventReaderAPI と組み合わせて JAXB を使用して、REST 呼び出しを行うことによって取得されたデータ xml を解析および抽出しています。
InputStream responseStream = response.getEntityInputStream();
if (responseStream != null)
{
XMLInputFactory xmlif = XMLInputFactory.newInstance();
// stax API
XMLEventReader xmler = xmlif.createXMLEventReader(new InputStreamReader(responseStream));
EventFilter filter = new EventFilter() {
public boolean accept(XMLEvent event) {
return event.isStartElement();
}
};
XMLEventReader xmlfer = xmlif.createFilteredReader(xmler, filter);
xmlfer.nextEvent();
// use jaxb
JAXBContext ctx = JAXBContext.newInstance(Summary.class);
Unmarshaller um = ctx.createUnmarshaller();
while (xmlfer.peek() != null) {
JAXBElement<CustomObject> se = um.unmarshal(xmler,
CustomObject.class);
CustomObject = se.getValue();
}
responseStream.close();
} else {
logger.error("InputStream response from API is null. No data to process");
}
response.close();
}
したがって、基本的には、最初に sTAX を使用して解析し、次に JAXB を使用してコンテンツを展開し、CustomObjectタイプに展開します。後で、このCustomObject型に他の処理を行います。
ただし、このコードのチャンクは JBoss AS 6.1.0.Final で実行されるため、問題が発生しました。
という例外が発生します"The declaration for the entity "HTML.version" must end with '>'"
sTAX または JAXB のいずれかが DTD/XSD に対して検証しているようです。XSD は、REST 呼び出しが行われるのと同じサーバーで定義されます。
SUN sTAX を使用しているため、woodstox には固有の DTD/XSD 検証がありません。検証がなく、sTAX 呼び出しからエラーが発生することはありません
あれは正しいですか ?
問題が sTAX での検証の失敗でない場合は、JAXB である必要があります。
ただし、次のことはできません。
um.setValidating(false);
setValidating は非推奨のメソッドであるためです。
これについてのアイデア/提案はありますか? 私たちの仮説は正しいですか?これは既知の JBoss の問題でしょうか?