XML для объекта Java 3 - PullRequest
       4

XML для объекта Java 3

0 голосов
/ 10 октября 2011

У меня есть XML и XSD-файл ему соответствует.Я только начал изучать Spring Framework и использую Spring 3. Я должен написать код, который берет этот XML-файл и присваивает его объекту на Java.Я искал об этом, но как я могу сделать это с помощью Spring (может быть, некоторые полезные приемы или что-нибудь еще?)

Ответы [ 3 ]

3 голосов
/ 10 октября 2011

Я недавно использовал 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();
0 голосов
/ 10 октября 2011

Какой именно вариант использования? Имхо лучший способ - это то, что предлагает Roadrunner. Но если вы используете его в каком-то контексте, например, REST-запрос и привязка xml-ответа, выше есть отличные абстракции, например RestTemplate , где вам практически не приходится иметь дело с маршалингом, кроме создания бина объект

restTemplate.getForObject("http://example.com/hotels/{hotel}/bookings/{booking}", Bean.class);

Но, как я уже сказал, если вы просто работаете с XML-файлами напрямую, Jaxb2Marshaller - путь.

0 голосов
/ 10 октября 2011

Весна не имеет к этому никакого отношения.Вам нужны некоторые инструменты привязки данных XML.Их много на рынке, и мой личный фаворит - XStream (http://x -stream.github.io / ) с бэкэндом XPP.В зависимости от ваших объектов и структуры xml другие инструменты могут быть более подходящими

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...