JAXB アノテーションを持ついくつかのクラスがあり、いくつかのインスタンスを作成しましたが、それらを XSD ファイルに対して検証する必要があります。オブジェクトが無効な場合に何が問題なのかの詳細を取得できるはずです。
このクラス ValidationEventHandler については知っていますが、明らかに Unmarshaller クラスで使用できます。問題は、生の XML ではなくオブジェクトを検証する必要があることです。
私はこのコードを持っています:
MyClass myObject = new MyClass();
JAXBContext jaxbContext = JAXBContext.newInstance("x.y.z");
JAXBSource jaxbSource = new JAXBSource(jaxbContext, myObject);
SchemaFactory factory = SchemaFactory
.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Source schemaFile = new StreamSource(getClass().getClassLoader()
.getResourceAsStream("mySchema.xsd"));
Schema schema = factory.newSchema(schemaFile);
Validator validator = schema.newValidator();
validator.validate(jaxbSource);
このコードは機能し、オブジェクトを検証して、次のようなメッセージで例外をスローします。
cvc-pattern-valid: 値 '12345678901' は、タイプ 'id' のパターン '\d{10}' に関してファセット有効ではありません。]
問題は、すべてのメッセージを解析する必要があるような文字列を使用して、特定の詳細が必要なことです。