使用Spring OXM的多个marshallers / unmarshallers

时间:2012-12-06 15:24:16

标签: java spring jaxb marshalling spring-oxm

我有一个遗留的Web服务项目,它接收两个不同的XML模式,但具有相同的属性名称(包括根元素)。我正在使用Spring,OXM和JAXB2进行编组/解组。

我用another question解决了以前的问题,所以我使用SAX解析器来确定要使用哪个unmarshaller。解析XML时,我检查一个值然后我可以使用unmarshaller或其他unmarshaller。

当我尝试用Spring OXM定义marshallers / unmarhsallers时,我的问题出现了。如果我使用两个包设置类路径,则失败,因为unmarshaller找到两个具有相同XMLRootElement的类。如果我设置了一个要绑定的类的列表,它也会失败,因为unmarshaller总是解组到类列表中的最后一项(相同的XMLRootElement,unmarshaller不知道要解组的类)。

但是它正常工作如果我使用JaxbContext:

JAXBContext jc = JAXBContext.newInstance(MyClass1.class);
myClass1Object = (MyClass1) jc.createUnmarshaller().unmarshal(new StreamSource(new StringReader(xml)));

JAXBContext jc = JAXBContext.newInstance(MyClass2.class);
myClass2Object = (MyClass2) jc.createUnmarshaller().unmarshal(new StreamSource(new StringReader(xml)));

如何将其转换为更多Spring(OXM)方法?

1 个答案:

答案 0 :(得分:0)

首先,我尝试在应用程序上下文文件中声明JAXBContext实例,但最后我改变了一个XML模式的命名空间。现在我正在使用Spring OXM来编组/解组我的两个XML模式而没有任何问题。