XMLStreamExceptionでJDKの制限エラーが発生する件について

alkoshikawa 1,443views 更新:2013年11月26日

最近のJDKで

Caused by: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,1]
Message: JAXP00010001: The parser has encountered more than "64000" entity expansions in this document; this is the limit imposed by the JDK.
        at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.setInputSource(XMLStreamReaderImpl.java:219)
        at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.<init>(XMLStreamReaderImpl.java:189)
        at com.sun.xml.internal.stream.XMLInputFactoryImpl.getXMLStreamReaderImpl(XMLInputFactoryImpl.java:277)
        at com.sun.xml.internal.stream.XMLInputFactoryImpl.createXMLStreamReader(XMLInputFactoryImpl.java:129)
        at com.sun.xml.internal.stream.XMLInputFactoryImpl.createXMLEventReader(XMLInputFactoryImpl.java:78)

というエラーが発生するようになりました。

対象バージョンは1.7.0_45などの新しいJDKのようですが、AmazonEC2の

java-1.6.0-openjdk-1.6.0.0-65.1.11.14.57.amzn1.x86_64

でも発生します。これを回避するには

XMLInputFactory factory = XMLInputFactory.newInstance();

「factory」を使いまわさないようにすることですが、aws-java-sdkなどでこれをstaticで使用しているところもあったりするので oracleの jdk 1.6.0_45などに変更してしまうと良いと思います。

検証コードはこちら

https://forums.oracle.com/thread/2594170

 

 

 

 

 

ログイン / 新規登録してコメントする

このソースコードをストックして後で利用したり、作業に利用したソースコードをまとめることができます。

こちらもお役に立つかもしれません