我有一个遗留的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)方法?
答案 0 :(得分:0)
首先,我尝试在应用程序上下文文件中声明JAXBContext实例,但最后我改变了一个XML模式的命名空间。现在我正在使用Spring OXM来编组/解组我的两个XML模式而没有任何问题。