5

<xi:include>タグが含まれている xml ドキュメントを非整列化しようとしています。しかし、SAXParserFactory に許可するよう具体的に指示したにもかかわらず、SAXParser はこれを許可しません。

Java コード:

SAXParserFactory spf = SAXParserFactory.newInstance();
spf.setXIncludeaware(true);
spf.setNamespaceAwere(true);

spf.setFeature("http://apache.org/xml/features/xinclude", true);
spf.setFeature("http://apache.org/xml/features/xinclude/fixup-base-uris", true);

XMLReader xr = spf.newSAXParser().getXMLReader();
SAXSource source = new SAXSource(xr, new InputSource(inputStream));
JAXBElement<MyClass> el = unmarshaller.unmarshal(source, MyClass.class);

読み取る XML ドキュメント

<?xml version="1.0" encoding="UTF-8"?>
<extension xmlns="http://www.example.com/test" xmlns:ext="http://www.example.com/test" xmlns:xi="http://www.w3.org/2003/XInclude">
    <visibility>
        <resourceConstraints>
            <resourceConstraint ext:resourceId="resourceOne">
                <role ext:show="true">AdminUsers</role>
            </resourceConstraint>
            <resourceConstraint ext:resourceId="resourceTwo">
                <role ext:show="true">AdminUsers</role>
            </resourceConstraint>
        </resourceConstraints>
        <xi:include href="extraContent.xml" />
    </visibility>
</extension>

実行すると、次の例外が発生します。

org.xml.sax.SAXParseException; lineNumber: 12; columnNumber: 50; cvc-complex-type.2.4.a: Invalid content was found starting with element 'xi:include'. One of '{"http://www.example.com/test":resourceConstraints}' is expected.

XML ドキュメントからタグを削除する<xi:include>と、ファイルは問題なくアンマーシャリングされます。アンマーシャラーにはスキーマが関連付けられています。スキーマでは、<xi:include>.

4

1 に答える 1

1

使うxmlns:xi="http://www.w3.org/2003/XInclude"べきなのに使ったxmlns:xi="http://www.w3.org/2001/XInclude"

問題は修正されました。

于 2014-11-10T15:26:15.650 に答える