[OK]を、私はこのようなソリューションで終わる:
RuntimeAnnotationReaderのカスタムのimplを使用して、私は2つの連想リストするadaterの種類や現在の要素を埋め込みます。
ABeanWrapperは、2つのフィールドが含まれ
public class ABeanAdapterList extends XmlAdapter<ABeanWrapper, Abean> {
public int i = 0;
private Map<Abean, String> unmarshall = new HashMap<Abean, String>();
private Map<String, Abean> marshall = new HashMap<String, Abean>();
@Override
public Abean unmarshal(ABeanWrapper v) throws Exception {
marshall.put(v.id, v.abean);
return v.abean;
}
@Override
public ABeanWrapper marshal(Abean v) throws Exception {
ABeanWrapper beanWrapper = new ABeanWrapper();
beanWrapper.abean = v;
beanWrapper.id = String.valueOf(i++);
unmarshall.put(beanWrapper.abean , beanWrapper.id);
return beanWrapper;
}
public String getId(Abean abean) {
return unmarshall.get(abean);
}
public Abean getAbean(String id) {
return marshall.get(id);
}
}
:連想リストのために、現在のidとABean :
public class ABeanAdapterImpl extends XmlAdapter<ABeanRef, Abean> {
private ABeanAdapterList listAdapter;
public ABeanAdapterImpl(ABeanAdapterList list) {
listAdapter = list;
}
@Override
public Abean unmarshal(ABeanRef wrapper) throws Exception {
return listAdapter.getAbean(wrapper.refId);
}
@Override
public ABeanRef marshal(Abean abean) throws Exception {
ABeanRef ref = new ABeanRef();
ref.refId = listAdapter.getId(abean);
return ref;
}
}
をそしてABeanRefが一つだけのREFフィールドが含まれています。 はそのような方法起動しますが、より良い方法があるが、このアプローチが機能することにより、
Marshaller marshaller = context.createMarshaller();
ABeanAdapterList adapterList = new ABeanAdapterList();
marshaller.setAdapter(adapterList);
ABeanAdapterImpl beanAdapter = new ABeanAdapterImpl(adapterList);
marshaller.setAdapter(beanAdapter);
marshaller.marshal(sBean, new File("testSBean.xml"));
月...
一意の識別子「A」クラスの「」プロパティですか? –
いいえ、それは一意ではありません。なんらかの種類のxpathポインタを持つことは素晴らしいことです。 2番目の要素をalistから取り出して現在に適用する – Egor
Cはルートオブジェクトですか? –