2

私はSAXを使用して、大きく、多くの繰り返しノードを持つ大きなxmlファイルを解析します。また、JAXBを使用して、解析および反復されたdomノードを永続性のためにjavabeansにマップします。

これが私のコードフラグメントです。JAXBのpartial unmarshallingサンプルコードを使用します。ノードの解析が開始されるたびにUnmarshallerオブジェクトが作成されます。1つのxml解析全体に再利用したり、複数のxml解析にキャッシュしたりできますか?

public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException {
    ...

    if (namespaceURI.equals("") && localName.equals( “product” )) {
        Unmarshaller unmarshaller = null;
        try {
            //I want to reuse it, not create it in each startElement method
            unmarshaller = jaxbContext.createUnmarshaller();
        } catch (JAXBException e) {
            throw new SAXException(e);
        }
    ...
4

1 に答える 1

6

JAXBContext が変更されない限り、アンマーシャラーを再利用できます。

JAXBContextの Javadoc も参照してください。複数の XML ファイルに対して同じアンマーシャラーを再利用する例が含まれていますが、コンテキスト (のパッケージがBazObjectコンテキスト パスにない) が変更された場合にのみ、別のコンテキストから新しいアンマーシャラーを作成する必要があります。

于 2013-03-21T08:49:26.863 に答える