2016-06-16 7 views
0

Ich versuche, einen Textdateiinhalt in eine XML-Datei aufzunehmen. Ich benutze die folgenden Dateien. Ich bekomme UnmarshalException auf der Bar-Eigenschaft. Bitte um Rat. Danke vielmals.Wie Unmarshal Entity Include-Dateiverweis in JAXB?

thankyou.properties Datei

Thank you 

XML-Datei

<?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> 

Meine 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 Modell

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

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

} 

Die Ausnahme, die ich bekommen ist

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

Hallo, können Sie Ihre vollständige Ausnahme und den Code zur Verfügung stellen, wenn Sie Ihre Datei unmarshall? –

+0

In der Tat, wenn ich mit einem Beispiel XML-Dateien wie versuchen: ]> & b; Es zeigt keinen Test, wenn ich die XML-Datei aus dem Browser ausführen. – TKM

+0

Ich denke, ich habe meine Antwort, wie dieser Link sagt: http://StackOverflow.com/Questions/15650009/ExternalSystem-entities-are-not-working-for-me-in--chrome-ie-o-netscape -was – TKM

Antwort

0

Die Ausnahme auftreten, weil Ihr JAXB Mapping falsch ist.

Versuchen Sie folgendes:

@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; 

} 

Dann unmarshall durch die Doc Klasse Ihren JAXBContext Bindung:

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

Auch ich nicht sicher, dass Sie in der Lage, die Dateien so, wie Sie einschließen möchten TU es.

Eine Problemumgehung wäre die Verwendung von XmlAdapter und @XmlJavaTypeAdapter: Geben Sie filePath zu Ihrem bar-Element, und verwenden Sie dann den Adapter, um den Dateiinhalt zu laden.

+0

Danke Dimpre. Lassen Sie mich an dieser XmlAdapter-Eigenschaft arbeiten und Sie wissen lassen. – TKM