我们正在使用Spring进行项目,我需要编组和解组对象列表 从XML到XML。 由于各种原因,业务对象本身没有@XmlRootElement注释,这些注释无法更改。
我可以使用包装类通过javax.xml轻松完成此操作。我使用了一个带有数字ID和描述字段的简单testObject:
/**
* testObject for xml convert
*
*/
package xmlconvert;
import java.io.File;
import java.io.IOException;
import java.util.List;
//import javax.xml.bind.JAXBContext;
//import javax.xml.bind.JAXBException;
//import javax.xml.bind.Marshaller;
//import javax.xml.bind.Unmarshaller;
//import javax.xml.bind.annotation.XmlRootElement;
//import javax.xml.bind.annotation.XmlType;
public class testObject
{
private static final long serialVersionUID = 1L;
public testObject()
{
setObjectid( 0L );
setDescription( " " );
}
public testObject( Long oid, String desc )
{
setObjectid( oid );
setDescription( desc );
}
private Long objectid;
public Long getObjectid()
{
return this.objectid;
}
public void setObjectid( Long oid )
{
this.objectid = oid;
}
private String description;
public String getDescription()
{
return this.description;
}
public void setDescription( String d )
{
this.description = d;
}
}
我的包装类看起来像这样:
/**
* JAXBToList
*
* An object that holds the list of objects to convert.
*
*/
package xmlconvert;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElements;
import javax.xml.bind.annotation.XmlRootElement;
import xmlconvert.testObject;
@XmlRootElement(name="testObjects")
public class JAXBToList
{
protected List<testObject> list;
public JAXBToList()
{
list = new ArrayList<testObject>();
}
public JAXBToList( List<testObject> list )
{
this.list = list;
}
@XmlElement(name="testObject")
public List<testObject> getList()
{
return (List<testObject>) this.list;
}
}
当我将这些对象的ArrayList转换为XML时,代码如下所示:
@XmlElements({
@XmlElement(name="testObject",
type=testObject.class)
})
public static void convertListToXML( JAXBToList objectList,
String xmlFilePath )
throws IOException, JAXBException {
JAXBContext jc = JAXBContext.newInstance( JAXBToList.class );
marshaller = jc.createMarshaller();
marshaller.setProperty( Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE );
marshaller.marshal( objectList,
new StreamResult( new FileOutputStream(xmlFilePath) ) );
}
我想使用Spring marshaller和unmarshaller来做到这一点,但是似乎没有办法设置上下文来使用oxm类Jaxb2Marshaller
中的JAXBToList类,或者其他类型的marshallers。 / p>
我知道有一个集合Jaxb Context Properties方法,但是没有关于我需要设置的指令,或者如果使用它会像设置jaxb Context那样做,如上所示。
有没有人有链接说明oxm如何用于对象列表?谷歌搜索没有太多。