次のXML/JSON ドキュメントを同等のJAXB/Moxy 注釈付きクラスに正しくマップする方法を見つけようとしています。私の例では人を説明するドキュメントのモデル要素はフリーフォームで
あることに注意してください。つまり、静的に認識されていない任意の種類の XML 要素/JSON オブジェクトである可能性があります。
XML ドキュメント:
<form>
<title>Person Form</title>
<model>
<person>
<name>John</name>
<surname>Smith</surname>
<address>
<street>Main St.</street>
<city>NY</city>
<country>USA</country>
</address>
<person>
</model>
</form>
同等の JSON ドキュメント:
{
"title":"Form Title",
"model":{
"person":{
"name":"John",
"surname":"Smith",
"address":{
"street":"Main St.",
"city":"NY",
"country":"USA"
}
}
}
}
モデルフィールドをMapとしてマップすると考えました。値はプリミティブ型またはMap 自体である可能性があります。このマッピングは、私のニーズに対して十分に表現力があります。
@XmlReadTransformer、@XmlWriteTransformer MOXY アノテーションを試してみましたが、成功しませんでした (buildAttributeValue で取得したレコード パラメーターは常に null です)。
@XmlRootElement @XmlAccessorType(XmlAccessType.FIELD)
public class Form {
private String title;
private Model model;
....getters and setters....
}
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Model {
@XmlElement
@XmlReadTransformer(transformerClass = Transformer.class)
@XmlWriteTransformers({ @XmlWriteTransformer(xmlPath = "./*", transformerClass = Transformer.class) })
private Map<String, Object> data;
public Map<String, Object> getData() {
return data;
}
public void setData(Map<String, Object> data) {
this.data = data;
}
public static class Transformer implements AttributeTransformer, FieldTransformer {
private AbstractTransformationMapping tm;
public Transformer() {
}
@Override
public void initialize(AbstractTransformationMapping tm) {
this.tm = tm;
}
@Override
public Map<String, Object> buildAttributeValue(Record r, Object o,
Session s) {
Map<String, Object> data = new HashMap<String, Object>();
// TODO: ????
return data;
}
@Override
public Object buildFieldValue(Object arg0, String arg1, Session arg2) {
// TODO
return null;
}
}
}
この問題を解決する適切な方法、または「モデル」フィールドをモデル化する別の方法を提案できますか?