代码之家  ›  专栏  ›  技术社区  ›  steinybot

如何摆脱class属性并使用xstream执行自己的转换?

  •  1
  • steinybot  · 技术社区  · 15 年前

    首先,我读过 link text 它不能解决我的问题。

    我正在使用带有别名的XStream。

    条件是一个具有多个不同实现的接口。我想删除class属性。我知道xstream在实现类不明确时使用class属性,并且我最多可以为其中一个实现类设置别名。我想一起删除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>
    
    2 回复  |  直到 15 年前
        1
  •  1
  •   steinybot    15 年前

    我设法通过给接口的类型赋予别名[xstream.aliastype(…)]来解决类属性问题,但是它使反序列化变得不可能,因为它显然无法创建接口的实例,并且具有默认类是不合适的。

    最后的解决方案是创建自定义转换器,这非常容易。

        2
  •  0
  •   Community CDub    8 年前

    根据您与XStream的关联程度,以下方法使用 MOXy JAXB 对人们有用: