2016-11-24 106 views
2

有我想要轉換爲Java bean的XML文檔。我想將我的bean中缺少的字段標記爲hashMap,因爲這些字段名稱不斷變化。有沒有辦法做到這一點?如何在解析XML時使XStream將未映射的標記映射到HashMap?

例如,我的XML看起來像

<employee> 
    <firstname>stack</firstname> 
    <lastname>alpha</lastname> 
    <phone1>999-999-9999</phone1> 
</employee> 

我的Java bean的樣子

@XstreamAlias("employee") 
public class Employee { 
     private String firstname; 
     private String lastname; 
     private map<String, String> unknownfields; 
} 

當我加載XML到我的java bean,它應該看起來像

firstname="stack", lastname="alpha", unknownfields=[{"phone1","999-999-9999"}] 

知道這是一個糟糕的設計,但想檢查是否可以使用xstream實現。

回答

0

實現您自己的Converter。請參閱JavaBeanConverter以獲取參考實現,因爲您希望儘可能接近該實現。

你需要以不同的方式處理事情的唯一的地方是這樣的(內解組法)

if (propertyExistsInClass) { 
    Class<?> type = determineType(reader, result, propertyName); 
    Object value = context.convertAnother(result, type); 
    beanProvider.writeProperty(result, propertyName, value); 
    seenProperties.add(new FastField(resultType, propertyName)); 
} else { 
    throw new MissingFieldException(resultType.getName(), propertyName); 
} 

其中,從其他塊時,它拋出MissingFieldException,你應該填充您的Map。 XML元素名稱很容易在這裏獲得,但您需要調整該值。拿到價值的線索是在如果塊略高於:

Object value = context.convertAnother(result, type); 

唯一的問題是你沒有一個Java類型值轉換爲。字符串也許?

我會繼承JavaBeanConverter,只是覆蓋unmarshal方法,但適合您的需求。

+0

謝謝Soumik。理解你的提示。會試試看。 – Pals