2014-11-04 3 views
3

Я пытаюсь развернуть XML-документ, в котором есть тег <xi:include>. Но SAXParser не позволяет этого, даже если я конкретно говорю SAXParserFactory, чтобы разрешить это.SAXParser не разрешает Xinclude

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. 

Когда я удалить <xi:include> тег из XML-документ, файл немаркирован просто отлично. У немаршаллера есть схема, прикрепленная к нему. Схема не позволяет использовать <xi:include>.

ответ

0

Я использовал xmlns:xi="http://www.w3.org/2003/XInclude" в то время как я должен был использовать xmlns:xi="http://www.w3.org/2001/XInclude"

Проблема уже решена!

Смежные вопросы