春のjaxb2marshallerを使用してマーシャリングとアンマーシャリングを行っています。xsd スキーマの 2 つの異なるバージョン (バージョン 01 と 10 など) をサポートする必要があることを除いて、バージョン 10 で機能しています。xsd バージョンに基づいてパッケージをスキャンするように jaxb2marshaller を設定する方法。私の解析コードは
public void parseSampleFile(String fileLocation) throws FileNotFoundException, XMLStreamException {
InputStream inputStream = getFilePathInputStream(fileLocation);
XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance();
XMLStreamReader xsr = xmlInputFactory.createXMLStreamReader(inputStream);
XMLReaderWithoutNamespace xmlStreamReader = new XMLReaderWithoutNamespace(xsr);
StAXSource stAXSource = new StAXSource(xmlStreamReader);
// skip to the first element to reach Document
while (xmlStreamReader.hasNext() && !xmlStreamReader.isStartElement()) {
xmlStreamReader.next();
}
while (xmlStreamReader.getEventType() == XMLStreamConstants.START_ELEMENT) {
switch (xmlStreamReader.getLocalName()) {
case "Hdr":
header = (Header) jaxb2Marshaller.unmarshal(stAXSource);
xmlStreamReader.nextTag();
break;
case "SomeInf":
instruction = (Instruction) jaxb2Marshaller.unmarshal(stAXSource);
xmlStreamReader.nextTag();
break;
default:
xmlStreamReader.nextTag();
}
}
}
そして、設定ファイルでjaxb2marshlerを次のように設定しています
@Bean
Jaxb2Marshaller jaxb2Marshaller() {
Jaxb2Marshaller jaxb2Marshaller = new Jaxb2Marshaller();
jaxb2Marshaller.setPackagesToScan("com.sample.version10.model");
return jaxb2Marshaller;
}