2016-06-16 1 views
0

Я пытаюсь включить содержимое текстового файла в XML-файл. Я использую следующие файлы. Я получаю UnmarshalException в свойстве bar. Пожалуйста посоветуй. Большое спасибо. файлКак размонтировать Entity включить ссылку на файл в JAXB?

thankyou.properties

Thank you 

XML файл

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<!DOCTYPE doc [ 
<!ELEMENT bar (#PCDATA)> 
<!ENTITY otherFile SYSTEM "thankyou.properties"> 
]> 

<doc> 
    <foo> 
    <bar>&otherFile;</bar> 
    </foo> 
</doc> 

Мой XSD

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="doc"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="foo"> 
      <xs:complexType> 
      <xs:sequence> 
       <xs:element type="xs:string" name="bar"/> 
      </xs:sequence> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

Java модель

@XmlRootElement(name = "doc") 
@XmlAccessorType(XmlAccessType.FIELD) 
public class Foo { 

    @XmlElement(name = "bar") 
    private String bar; 

} 

Исключения я получаю

Caused by: javax.xml.bind.UnmarshalException: unexpected element (uri:"", local:"bar"). Expected elements are <{ 
+0

Привет, Можете ли вы предоставить свое полное исключение и код, когда вы удалите файл? –

+0

На самом деле, когда я пытаюсь использовать пример XML-файлов, например: ]> & b; он не показывает никакого теста, когда я запускаю XML-файл из браузера. – TKM

+0

Я думаю, что у меня есть мой ответ, поскольку эта ссылка говорит: http://stackoverflow.com/questions/15650009/external-system-entities-are-not-working-for-me-in-chrome-ie-or-netscape -what – TKM

ответ

0

Исключения вы столкнулись, потому что ваше отображение JAXB неверно.

Попробуйте это:

@XmlAccessorType(XmlAccessType.FIELD) 
public class Foo { 

    @XmlElement(name = "bar") 
    private String bar; 

} 

@XmlRootElement(name = "doc") 
@XmlAccessorType(XmlAccessType.FIELD) 
public class Doc { 

    @XmlElement(name = "foo") 
    private Foo foo; 

} 

Тогда маршализацию путем связывания класса Doc вашему JAXBContext:

Unmarshaller um = JAXBContext.newInstance(Doc.class).createUnmarshaller(); 
Doc doc = um.unmarshall(yourFile); 

Кроме того, я не уверен, что вы будете в состоянии включить ваш файл, как вы хотите к сделай это.

Обходным решением было бы использовать XmlAdapter и @XmlJavaTypeAdapter: дать файловой панели вашему элементу панели, а затем использовать адаптер для загрузки содержимого файла.

+0

Спасибо Dimpre. Позвольте мне работать над этим свойством XmlAdapter и сообщим вам об этом. – TKM

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

  • Нет связанных вопросов^_^