2016-07-25 3 views
2

アアルト使用して非同期に複数のXML文書の解析に失敗しました:は、これは私が解析しようとしているxmlです<strong>アアルト-XML</strong></p> <p><a href="https://github.com/FasterXML/aalto-xml" rel="nofollow">https://github.com/FasterXML/aalto-xml</a></p> <p>を使用してTCPソケットを出てくる、私はXMLメッセージを解析しようとしている

<?xml version=\"1.0\" encoding=\"UTF-8\"?> 
<employee> 
    <id>1</id> 
    <name>Alba</name> 
    <salary>100</salary> 
</employee> 

最初のxmlメッセージは正常に解析されますが、2番目のxmlメッセージは例外がスローされます。ここ は、私はクラスのメンバを定義する私のクラスで私の解析方法

です:

private AsyncXMLStreamReader<AsyncByteArrayFeeder> parser = new InputFactoryImpl().createAsyncForByteArray(); 

解析方法:

try { 
     parser.getInputFeeder().feedInput(buffer, 0, buffer.length); 

     int type = 0; 

     //keep looping till event is complete 
     while(!parser.getInputFeeder().needMoreInput()) { 
       type = parser.next(); 
      //handle parser event and extract parsed data 
      switch (type) { 
       case XMLEvent.START_DOCUMENT: 
        System.out.println("start document"); 
        break; 

       case XMLEvent.START_ELEMENT: { 
        System.out.println("start element: " + parser.getName()); 
       } break; 

       case XMLEvent.END_ELEMENT: { 
        System.out.println("end element: " + parser.getName()); 
        } break; 

       case XMLEvent.END_DOCUMENT: { 
        System.out.println("end document"); 
       }break; 

       default: 
        break; 
      } 
     } 

     if(type == AsyncXMLStreamReader.EVENT_INCOMPLETE) { 
       System.out.println(results); 
     } 

    } catch (XMLStreamException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

例外:

com.fasterxml.aalto.WFCException: Illegal processing instruction target: 'xml' (case insensitive) is reserved by the xml specification 
at [row,col {unknown-source}]: [1,112] 

任意の助けをいただければ幸いです!

答えて

0

XML宣言が複数回渡されるように、同じコンテンツが複数回フィードされているように見えます。これは、例外(カラム122)に記載されているオフセットのためです。

+0

そうかもしれません。 – Shvalb

+0

質問:すべてのxmlについて - 再初期化する必要はありますか?xmlInputFactory.createAsyncForByteArray()?? – Shvalb

+0

ソケットから直接XMLをストリーミングする場合、新しいメッセージごとに新しいAsync ByteArrayを作成する必要があります。そうでなければ、バッファがクリーニングされないように例外がスローされ、次のXML要素タイプを解析しようとすると失敗します。 – Shvalb

関連する問題