내가 방법을 찾을려고하는 JSON 동등한 JAXB/목시 주석 클래스 올바르게 지도 다음 XML/JSON 문서합니다. 내 예에있는 사람을 설명하는 문서의 모델 요소가 자유 것을
주 즉 정적으로 알려져 있지 XML 요소의 모든 종류의/JSON 객체, 수 있습니다.매핑 각종 형태의 XML/목시/JAXB 주석 클래스
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"
}
}
}
}
가 나는 지도의 값로 모델 필드를 매핑하는 생각 아마도 기본 타입 또는 지도 자체는입니다. 이 매핑은 내 요구에 충분히 표현할 수 있습니다.
은 내가 @XmlReadTransformer, @XmlWriteTransformer MOXY 주석과 재생 시도했지만 성공하지@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;
}
}
}
당신이 나에게의 적절한 방법을 제안 할 수 있습니다 (레코드 매개 변수는 나는 buildAttributeValue 항상 널 얻을) 이 문제 또는 "모델"필드를 모델링하는 다른 방법을 해결 하시겠습니까?
나는 당신의 제안을 이해하지만 그것이 내 요구에 부합하지 않는다. '모델'입력란은 완전히 동적입니다. 즉, 알 수없는 임의의 XML/JSON입니다 (해당 Java 클래스 없음). 따라서 일반적인 XML/JSON을 객체 지향적 인 방법으로 매핑하는 방법이 필요합니다. 예를 들어 org.w3c.dom.Element (XML) 또는 org.json.JSONObject (JSON)과 같은 것입니다. 그러나 나는 그것을 할 수있는 방법을 찾을 수 없습니다. –