1

Java SAX 処理では、 org.xml.sax.ext.EntityResolver2resolveEntity メソッドからエンティティ参照名を取得できません。name 引数はnull、ドキュメントに'name' is never null when invoked by a SAX2 parser.

何か案が ?

この問題を実証するために、Jython 2.5 スクリプトを作成しました。それは(私の箱に)印刷されます:

Entity Resolver 2 enabled: True
Entity name: None

Jython 2.5 スクリプト:

# Jython
from org.python.core.util import StringUtil
from jarray import array

# Java Standard Edition
from org.xml.sax import *
from org.xml.sax.ext import *
from org.xml.sax.helpers import *
from java.io import ByteArrayInputStream

xml = """\
<!DOCTYPE doc
[<!ENTITY entity SYSTEM "entity-file">
]>
<doc>&entity;</doc>
"""

def empty_source():
    _source = InputSource()
    byte_stream = ByteArrayInputStream(array([], "b"))
    _source.setByteStream(byte_stream)
    return _source

class Handler(EntityResolver2):
    def getExternalSubset(self, name, baseURI):
        return None
    def resolveEntity(self, name, publicId, baseURI, systemId):
        print "Entity name:", name 
        return empty_source()

reader = XMLReaderFactory.createXMLReader()
enabled = reader.getFeature("http://xml.org/sax/features/use-entity-resolver2")
print "Entity Resolver 2 enabled:", enabled 

handler = Handler()
reader.setEntityResolver(handler) 
bytes = StringUtil.toBytes(xml)
byte_stream = ByteArrayInputStream(bytes)
source = InputSource(byte_stream)
reader.parse(source)
4

1 に答える 1

0

Java にバンドルされている「古い」バージョンではなく、より新しいバージョンの Xerces (たとえば 2.9.1) を使用します。

于 2008-12-25T19:40:03.853 に答える