2
我在玩JAXB,所以我問的很多問題都只是爲了看看有什麼可能。XmlAdapter沒有調用List來映射
我有下面的XML:
<bundleMappings>
<mapping>
<parameter attr = "value">asdas</parameter>
<parameter attr = "value2">d123asdsad</parameter>
<parameter attr = "value3">0</parameter>
</mapping>
<mapping>
<parameter attr = "value">23123s</parameter>
<parameter attr = "value2">qwerty</parameter>
<!-- more parameter elements -->
</mapping>
<!-- more mapping elements -->
</bundleMappings>
在這我想parameter
元素是在一個Map<String, Parameter>
,而不是一個列表,其中的關鍵是attr
值和值的內容元素。我已經關注了一些博客帖子並提出了這個問題。
@XmlRootElement(name = "bundleMmappings")
public class BundleMappings {
@XmlElement(name = "mapping")
private List<Mapping> mMappings;
//getters setters
}
@XmlAccessorType(XmlAccessType.FIELD)
public class Mapping {
@XmlElement
@XmlJavaTypeAdapter(ParameterAdapter.class)
private HashMap<String, Parameter> mParameterMap;
//getters setters
}
@XmlAccessorType(XmlAccessType.FIELD)
public class Parameter {
@XmlAttribute(name = "attr")
private String mName;
@XmlValue
private String mValue;
//getters setters
}
@XmlAccessorType(XmlAccessType.FIELD)
public class Parameters {
@XmlElement(name = "parameters")
private List<Parameter> parameters = new LinkedList<>();
//getters setters
}
和適配器:
public class ParameterAdapter extends XmlAdapter<Parameters, Map<String, Parameter>> {
@Override
public Parameters marshal(Map<String, Parameter> map) throws Exception {
Parameters params = new Parameters();
params.setParameters(new ArrayList<Parameter>());
for (String name : map.keySet()) {
Parameter p = new Parameter();
p.setName(name);
p.setValue(map.get(name).getValue());
params.getParameters().add(p);
}
return params;
}
@Override
public Map<String, Parameter> unmarshal(Parameters value) throws Exception {
Map<String, Parameter> map = new HashMap<>();
for (Parameter parameter : value.getParameters()) {
map.put(parameter.getName(), parameter);
}
return map;
}
}
我做了斷點小的解組測試在適配器unmarshal
,它不叫的。爲什麼不?
我也試過註釋Mapping
類List
與@XmlElement(name = "parameter")
。在這種情況下,unmarshall
被調用,但傳遞給它的Parameters
參數有一個空列表。
編輯
如果我嘗試元帥:
<bundleMappings>
<mapping>
<mParameterMap>
<parameter name="HOME_NETWORK_ID">12345</parameter>
</mParameterMap>
</mapping>
</bundleMappings>
@SotiriosDelimanolis - 是的,你在你的問題有名單所以我剛纔複製下來給我的答案。 –
@SotiriosDelimanolis - XML表示將與您所期望的不同。我的建議是創建對象的實例並將其編組爲XML,您將看到預期的輸入。 –
@SotiriosDelimanolis - 由於您在註釋字段,請確保您在所有類中指定了「@XmlAccessorType(XmlAccessType)」:http://blog.bdoughan.com/2011/06/using-jaxbs-xmlaccessortype-to.html –