java + serializacja + walidacja

0

Pisze w javie program który dokonuje serializacji za pomocą http://simple.sourceforge.net/home.php
jak można sprawdzić czy plik(xml) który odczytuje lub później zapisze będzie zgodny z plikiem xml schema?

Mam plik xml z którego dokonuje mapowania na klasy, to się udaje.
Jednak zanim chciałbym to zrobić chciałbym sprawdzić czy ten plik jest zgodny z plikiem xsd.

Wiem że są inne biblioteki które to umożliwiają jednak zależy mi żeby tego dokonać za pomocą biblioteki simple, ponieważ cały projekt mam napisany przy pomocy tej biblioteki.. jedyne czego mi brakuje to sprawdzenie poprawności pliku przed odczytem i zapisem.

proszę o jakieś porady..

0

Jest sobie takie cudo jak javax.xml.validation http://download.oracle.com/javase/1.5.0/docs/api/javax/xml/validation/package-summary.html wystarczy podpiąć jakąś implementację. Rzuc tez okiem na zależności tej biblioteki. Pewno coś się znajdzie.

0

udało mi się znaleźć łatwy sposób na sprawdzanie pliku xml tylko teraz nie wiem jak uwzględnić polskie znaki bo
kiedy przekształca string do postaci bitów nie chce mi zamienić polskich znaków,
wyskakuje błąd:
Exception in thread "main" java.lang.Exception: com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Invalid byte 1 of 1-byte UTF-8 sequence.
at Serializacja.SchemaValidator.validate(Serializacja.java:47)
at Serializacja.Serializacja.main(Serializacja.java:58)
Caused by: com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Invalid byte 1 of 1-byte UTF-8 sequence.
at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.invalidByte(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.read(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.load(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.arrangeCapacity(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.skipString(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.jaxp.validation.StreamValidatorHelper.validate(Unknown Source)
at com.sun.org.apache.xerces.internal.jaxp.validation.ValidatorImpl.validate(Unknown Source)
at javax.xml.validation.Validator.validate(Unknown Source)
at Serializacja.SchemaValidator.validate(Serializacja.java:41)
... 1 more

 
class SchemaValidator{
	private static final String XSD_FILE = "./plikxsd2.xsd";
	public static boolean validate(String xml) throws Exception{
		SchemaFactory factory =
		SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
		//URL resource = this.getClass().getClassLoader().getResource(XSD_FILE);
		Schema schema;
		try {
		schema = factory.newSchema(new File(XSD_FILE));;
		} catch (Exception e) {
		throw new Exception(e);
		}
		Validator validator = schema.newValidator();
		//jak tu wczytać polskie znaki?
		Source source = new StreamSource(new ByteArrayInputStream(xml.getBytes()));

		try {
		validator.validate(source);
		System.out.println("XML Validation: OK");
		} catch (SAXException ex) {
		System.out.println("XML is not valid "+ex.getMessage());
		return false;
		} catch (IOException e) {
		throw new Exception(e);
		}
		return true;
	}
	}

public class Serializacja{

	public static void main(String[] args) throws Exception{

                 //tutaj nie chce mi wczytać polskich znaków
		SchemaValidator.validate("<płyty></płyty>");
				
	}

}

plikxsd2.xsd:

 
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
	<xs:element name="płyty" type="xs:string"/>
</xs:schema>

ktoś może mi pomoże jak mam to zrobic?

1 użytkowników online, w tym zalogowanych: 0, gości: 1