2010-07-30 41 views
1

首先我讀了link text,它並沒有解決我的問題。如何擺脫class屬性並使用XStream執行我自己的轉換?

我使用帶混疊的XStream。

條件是一個接口與幾個不同的實現。我想刪除類屬性。我知道當實現類不明確時,XStream使用類屬性,並且我可以爲最多實現類之一設置別名。我想一起刪除class屬性,並使用type屬性加上其他子元素的存在來確定實現類。這可能嗎?

這裏是XML我目前:

<NextDestinations> 
    <Connector> 
    <DestinationId>2</DestinationId> 
    </Connector> 
    <Connector> 
    <DestinationId>3</DestinationId> 
    <condition class="com.orchestral.rhapsody.configuration.filter.condition.JavaScriptCondition" type="JAVASCRIPT"> 
     ... 
    </condition> 
    </Connector> 
    <Connector> 
    <DestinationId>4</DestinationId> 
    <condition class="com.orchestral.rhapsody.configuration.filter.condition.MessageTypeCondition"> 
     <type>CONDITIONAL</type> 
     ... 
    </condition> 
    </Connector> 
    <Connector> 
    <DestinationId>5</DestinationId> 
    <condition class="com.orchestral.rhapsody.configuration.filter.condition.MessageTypeCondition"> 
     <type>CONDITIONAL</type> 
     ... 
    </condition> 
    </Connector> 
    <Connector> 
    <DestinationId>6</DestinationId> 
    <condition class="com.orchestral.rhapsody.configuration.filter.condition.PropertyCondition"> 
     <type>CONDITIONAL</type> 
     ... 
    </condition> 
    </Connector> 
    <Connector> 
    <DestinationId>7</DestinationId> 
    <condition class="com.orchestral.rhapsody.configuration.filter.condition.FieldCondition"> 
     <type>CONDITIONAL</type> 
     ... 
    </condition> 
    </Connector> 
    <noMatchDestination>8</noMatchDestination> 
    <errorDestination>9</errorDestination> 
</NextDestinations> 

這裏是我想要的XML:

<NextDestinations> 
    <Connector> 
    <DestinationId>1</DestinationId> 
    </Connector> 
    <Connector> 
    <DestinationId>2</DestinationId> 
    <condition type="JAVASCRIPT"> 
     ... 
    </condition> 
    </Connector> 
    <Connector> 
    <DestinationId>3</DestinationId> 
    <condition type="CONDITIONAL"> 
     ... 
    </condition> 
    </Connector> 
    <Connector> 
    <DestinationId>4</DestinationId> 
    <condition type="CONDITIONAL" 
     ... 
    </condition> 
    </Connector> 
    <Connector> 
    <DestinationId>5</DestinationId> 
    <condition type="CONDITIONAL"> 
     ... 
    </condition> 
    </Connector> 
    <Connector> 
    <DestinationId>6</DestinationId> 
    <condition type="CONDITIONAL"> 
     ... 
    </condition> 
    </Connector> 
    <Connector> 
    <DestinationId>7</DestinationId> 
    <condition type="CONDITIONAL" 
     ... 
    </condition> 
    </Connector> 
    <noMatchDestination>8</noMatchDestination> 
    <errorDestination>9</errorDestination> 
</NextDestinations> 

回答

1

我設法通過別名界面的類型[xstream.aliasType(...)]解決類屬性問題,但是它使得它不可能反序列化,因爲它顯然不能創建接口的實例,有一個默認類是不合適的。

最終的解決方案是創建自定義轉換器,這非常簡單。