1

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 の問題でしょうか?

4

0 に答える 0