Я недавно использовал Spring OXM & JAXB для этого. Класс org.springframework.oxm.jaxb.Jaxb2Marshaller
. Конечно, вы можете использовать любую другую реализацию org.springframework.oxm.Unmarshaller
.
Но сначала Вам нужно будет сгенерировать объекты на основе вашего XSD. Для этого я использовал maven-jaxb2-plugin
.
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<executions>
<execution>
<id>generate-oxm</id>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<schemaDirectory>src/main/resources/META-INF/xsd</schemaDirectory>
<generatePackage>com.stackoverflow.xjc</generatePackage>
</configuration>
</execution>
</executions>
</plugin>
А затем настройте маршаллер:
@Configuration
public class ApplicationConfiguration {
@Autowired
private ResourcePatternResolver resourceResolver;
@Bean
public Jaxb2Marshaller oxmMarshaller() throws IOException {
Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
marshaller.setContextPath("com.stackoverflow.xjc");
marshaller.setSchemas(resourceResolver.getResources("classpath:/META-INF/xsd/*.xsd"));
return marshaller;
}
}
Чем просто:
File xmlFile = new File("my.xml");
Source source = new StreamSource(new FileInputStream(xmlFile));
JAXBElement<MyXmlRootElemClass> result = oxmMarshaller.unmarshal(source);
MyXmlRootElemClass theObject = result.getValue();