ERLEDIGT
NEIN
NEIN
ANTWORTEN
5
5
ZUGRIFFE
4013
4013
EMPFEHLEN
-
Hallo zusammen,
ich habe ein Problem mit der Validierung meiner eingelesenen XML Dokumente.
Meinen XML Dokument setzt sich aus 3 Dokumenten zusammen. 2 werden per <xi:include> eingebunden.
Die includes machten am Anfang Probleme, habe das aber dann auf diesem Weg gelöst:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
JAXBContext jc = JAXBContext.newInstance(Catalog.class.getPackage().getName()); UnmarshallerHandler unmarshallerHandler = jc.createUnmarshaller().getUnmarshallerHandler(); // create a sax parser SAXParserFactory spf = SAXParserFactory.newInstance(); spf.setNamespaceAware(true); XMLReader xmlReader = spf.newSAXParser().getXMLReader(); // resolves the included xml-files XIncludeFilter includer = new XIncludeFilter(); includer.setParent(xmlReader); // write the resolved document to the UnmarshallerHandler if the 'parse()' method is called includer.setContentHandler(unmarshallerHandler); includer.parse(xmlFile); Data data = (Data) unmarshallerHandler.getResult();
Wie kann ich nun mein XML-Dokument ( hier: xmlFile ) gegen mein xsd bzw. die generierten Klassen validieren?
Ich möchte einfach ausschließen dass irgendwelche anderen XML Files eingelesen werden und dann irgendwelche Exceptions fliegen.
Komm grade nicht dahinter...
Gruß
Niko
-
Ok, habe es jetzt so gelöst:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
// Generate the JAXB Context and the unmarshaller JAXBContext jc = JAXBContext.newInstance(Catalog.class.getPackage().getName()); Unmarshaller unmarshaller = jc.createUnmarshaller(); // The unmarshallerHandler holds the content of the xml document incl. the included documents UnmarshallerHandler unmarshallerHandler = unmarshaller.getUnmarshallerHandler(); // Validation of the xml documents SchemaFactory sf = SchemaFactory.newInstance(javax.xml.XMLConstants.W3C_XML_SCHEMA_NS_URI); [COLOR="SeaGreen"] // TODO: Schemaauswahl auch in GUI packen? Jedesmal auswählen?[/COLOR] [COLOR="Red"]Schema schema = sf.newSchema(new File("src/catalog/catalog.xsd")); unmarshaller.setSchema(schema); [/COLOR] // create a sax parser SAXParserFactory spf = SAXParserFactory.newInstance(); spf.setNamespaceAware(true); XMLReader xmlReader = spf.newSAXParser().getXMLReader(); // resolves the included xml-files XIncludeFilter includer = new XIncludeFilter(); includer.setParent(xmlReader); // write the resolved document to the UnmarshallerHandler if the 'parse()' method is called includer.setContentHandler(unmarshallerHandler); includer.parse(xmlFile); Data data = (Data) unmarshaller.unmarshal(new JAXBSource(jc, unmarshallerHandler.getResult()));
Was mich daran ziemlich stört ist dass ich das *.xsd Schema angeben muss.
Wie kann ich denn an das drankommen.
Da ich ja sowieso nen SAXParser drüber laufen lasse, sollte ich doch irgendwie an das "*.xsd" drankommen, oder?
Gruß
Niko
-
JAXB generiert die Klassen und fügt die Validierung über Annotations hinzu.
Ansonsten, guck dir die Beispiele von Sun: http://java.sun.com/webservices/docs...3.html#wp89378PHP-Code:JAXBContext jc = JAXBContext.newInstance( "primer.po" );
# An Unmarshaller instance is created.
Unmarshaller u = jc.createUnmarshaller();
# The default JAXB Unmarshaller ValidationEventHandler is enabled to send to validation warnings and errors to system.out. The default configuration causes the unmarshal operation to fail upon encountering the first validation error.
u.setValidating( true );
-
Ich habe das Problem, dass die Methode
Zitat von http://java.sun.com/developer/EJTechTips/2006/tt0128.html
deprecated ist.Code :1
setValidating(boolean)
-
Ja, das stimmt.
wenn du JAXB 2.0-Validierung nutzt, muss auch Das Schema angegeben werden.
hier findest ein gutes Artikel dazu:
http://www.java-tips.org/java-ee-tip...-jaxb-2.0.html
-
Hi,
aus dem Artikel kann ich leider auch nichts passendes herausziehen.
Auch hier wird immer ein Schema in Form vonangegeben.Code :1
Schema schema = sf.newSchema(new File("po.xsd"));
Warum überhaupt muss ich das Schema hier angeben, wenn ich mir doch bereits die Klassen aus einem XSD generiert habe?
Ist mir irgendwie nicht ganz klar. Ich sollte doch dann eigentlich alle Informationen in meinen JAVA Klassen haben, oder nicht?
Aber nochmal zum Thema:
Es kann doch nicht so schwer sein das Attribut xsi:noNamespaceSchemaLocation meinem XML Dokument zu entlocken, oder? Steh auf dem Schaluch.
Ähnliche Themen
-
XML Validierung ?
Von HuberDe im Forum JavaAntworten: 8Letzter Beitrag: 09.04.08, 14:48 -
Validierung
Von brainsucker im Forum HTML & XHTMLAntworten: 1Letzter Beitrag: 07.02.08, 13:39 -
Jaxb
Von nowacz im Forum JavaAntworten: 1Letzter Beitrag: 02.08.07, 12:31 -
W3C Validierung
Von Tonda im Forum HTML & XHTMLAntworten: 3Letzter Beitrag: 01.05.05, 14:16 -
CSS Validierung?
Von Admi im Forum CSSAntworten: 6Letzter Beitrag: 09.02.05, 17:34





Zitieren
Login





