Jaxb 2.0-Schema-Validierungs-problem
Arbeite ich mit Jaxb 2.x war und versuchen, zu validieren, XML-Dokument mit der angegebenen XSD mit den folgenden tutorial
hers ist der code, den ich geschrieben habe
unmarshaller.setSchema(schema);
SAXSource source = new SAXSource(new InputSource(xmlFileLocation));
Validator validator = schema.newValidator();
validator.setErrorHandler(new XMLErrorHandler<Object>());
try {
validator.validate(source);
} catch (SAXException e) {
und meine XMLErrorHanlder Klasse haben folgende Signatur
public class XMLErrorHandler<T> implements ErrorHandler {
public void error(SAXParseException exception) throws SAXException {
xmlUnmarshaller.setValidationFlag(true);
log.error(
"Line:Col[" + exception.getLineNumber()
+ ":" + exception.getColumnNumber()
+ "]:" + exception.getMessage());
exception.printStackTrace();
}
}
}
code für Warnung und fatal wurde entfernt
jetzt Ihre der Validierung der XML mit XSD-aber es zeigt nur die erste aufgetretene Fehler während möchte ich, um Druck auf colsole alle Fehler und Warnungen auf der Konsole
ich bin mir nicht sicher, wo ich falsch mache jede Hilfe in dieser wird hilfreich sein,
Edit1
hier ist der Teil der XSD-Datei
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="destination" type="Destination"/>
<xs:complexType name="Destination">
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="destinationID" type="xs:string" minOccurs="0"/>
<xs:element name="shortDescription" type="xs:string" minOccurs="0"/>
<xs:element name="longDescription" type="xs:string" minOccurs="0"/>
<xs:element name="stateID" type="xs:string"/>
<xs:element name="typeCode" type="xs:int"/>
<xs:element name="countryCode" type="xs:string"/>
<xs:element name="categories" type="xs:string"/>
<xs:element name="transport" type="Transport" minOccurs="0" maxOccurs="1"/>
<xs:element name="cultures" type="Cultures" minOccurs="0"/>
<xs:element name="events" type="Events" minOccurs="0" maxOccurs="1"/>
<xs:element name="placesToVisit" type="PlacesToVisit" minOccurs="0" maxOccurs="1"/>
<xs:element name="contacts" type="Contact" minOccurs="0" maxOccurs="1"/>
<xs:element name="addresses" type="address" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
sowie die XML-Datei ist
<destination xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="destination.xsd">
<name>Palampur</name>
<destinationID>PLP</destinationID>
<shortDescription>shortDescription</shortDescription>
<longDescription>longDescription</longDescription>
<typeCode>0</typeCode>
<categories>categories</categories>
was meine Vermutung nach einigen R&D ist, dass es einige Problem mit XSD-Struktur des generierten XML-aber ich bin nicht sicher, dass abt es
InformationsquelleAutor Umesh Awasthi | 2011-02-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich gehe davon aus, dass es vielleicht ein
fatalError
berichtet. Sie hat nicht solche Informationen zur Verfügung, die in Ihrer Frage. Ist dies der Fall, Lesen Sie die Erklärung Ihres Problems in die javadoc vonErrorHandler
:Ich hoffe, dass dies vielleicht erklären Sie Ihre Probleme.
Edit 1:, Nachdem Sie veröffentlicht Ihr schema ich glaube, ich weiß, Sie stört. Der validator meldet einen Fehler pro falsch element. In Ihrem Fall ist dies:
Der Fehler wird so etwas wie (zeigt fehlende stateID):
Es nicht Bericht mehrere Fehler, da es nur einen Fehler-Bericht pro complex type. Wenn Sie Ihre komplexen Typ wie dieser:
Erhalten Sie möglicherweise eine andere Fehlermeldung, sondern wieder zu einer einzigen:
Wenn Sie ändern Ihr schema zu akzeptieren mehrere
destination
Elemente, die Sie bekommen 1 Fehlermeldung pro element dann.Prost!
Dann solltest du besser posten Sie den Inhalt der XML-Datei (befindet sich auf xmlFileLocation). Wenn die xsd ist nicht das gleiche wie in der tutorial-post-it zu. Das tutorial funktioniert wie erwartet :/
Und was ist das? 🙂 -> xmlUnmarshaller.setValidationFlag(true); sollten Sie es nicht brauchen.
meine aktuelle post für XML-und eine XSD-Datei
awasthi: siehe meine entsprechende update für das update 🙂
InformationsquelleAutor Lachezar Balev