注意:我是EclipseLink JAXB (MOXy)鉛和中的一員專家組。
有你的使用情況,一對夫婦有趣的方面:
- 的ArrayList作爲根對象
- 雙向關係
ObjReal
ObjStruc
之間
1 ArrayList的AS根對象
JAXB實現(MOXY,地鐵,JA xMe等)不提供將Collection
類型作爲根對象的直接支持。要處理這種用例,您只需創建一個包含所需的Collection
作爲字段/屬性的包裝類。
@XmlRootElement(name="root-element-name")
@XmlAccessorType(XmlAccessType.FIELD)
public class ListWrapper {
private ArrayList<ObjReal> objReals;
}
2.雙向RELATIOSNHIP
可以使用@XmlInverseReference
擴展在執行的EclipseLink JAXB的處理模型中的雙向關係。下面我列出了一個完整的例子。我省略了大多數訪問器方法來節省空間。
ObjReal
import java.util.ArrayList;
import javax.xml.bind.annotation.*;
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
class ObjReal {
private String id;
private String data;
ArrayList<ObjStruc> objStrucs=new ArrayList<ObjStruc>();
public ArrayList<ObjStruc> getObjStrucs() {
return objStrucs;
}
}
ObjStruc
的@XmlInverseReference
註釋用於在這個類。在這個註解你的關係的另一個方向指定田間/屬性名稱:
import javax.xml.bind.annotation.*;
import org.eclipse.persistence.oxm.annotations.XmlInverseReference;
@XmlAccessorType(XmlAccessType.FIELD)
class ObjStruc {
@XmlInverseReference(mappedBy="objStrucs")
private ObjReal objReal;
public ObjReal getObjReal() {
return objReal;
}
}
jaxb.properties
要指定莫西爲您的JAXB提供你需要包括一個名爲JAXB的.properties在同一個包的以下內容作爲你的域類:
javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory
演示
可以運行下面的代碼來驗證映射:
import java.io.File;
import javax.xml.bind.*;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(ObjReal.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
File xml = new File("src/forum8868303/input.xml");
ObjReal objReal = (ObjReal) unmarshaller.unmarshal(xml);
for(ObjStruc objStruc : objReal.getObjStrucs()) {
System.out.println(objStruc.getObjReal());
}
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(objReal, System.out);
}
}
輸入(input.xml中)
<?xml version="1.0" encoding="UTF-8"?>
<objReal>
<id>123</id>
<data>some data</data>
<objStrucs/>
<objStrucs/>
</objReal>
輸出
下面是從輸出運行演示代碼。正如你可以看到每個ObjStruc
對象的objReal
財產解組期間填充:
[email protected]
[email protected]
<?xml version="1.0" encoding="UTF-8"?>
<objReal>
<id>123</id>
<data>some data</data>
<objStrucs/>
<objStrucs/>
</objReal>
更多信息
下載的EclipseLink
您可以在下載的EclipseLink:
非常有趣......我會把它投票! – aviad 2012-01-15 08:10:30