Как я могу избавиться от атрибута класса и выполнить свое собственное преобразование, используя XStream? - PullRequest
1 голос
/ 30 июля 2010

Прежде всего я прочитал текст ссылки , и это не решает мою проблему.

Я использую XStream с псевдонимами.

Условие - это интерфейс сразные реализации.Я хочу удалить атрибут класса.Я знаю, что XStream использует атрибут класса, когда реализующий класс неоднозначен, и я могу установить псевдоним максимум для одного из реализующих классов.Я хочу удалить атрибут класса все вместе и использовать атрибут типа плюс присутствие других дочерних элементов, чтобы определить реализующий класс.Возможно ли это?

Вот 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 ]

1 голос
/ 04 августа 2010

Мне удалось решить проблему атрибутов класса, наложив псевдоним на тип интерфейса [xstream.aliasType (...)], однако затем он сделал невозможным десериализацию, поскольку он, очевидно, не может создать экземпляр интерфейса и иметь класс по умолчанию не подходит.

Окончательным решением было создание пользовательских конвертеров, что было удивительно легко.

0 голосов
/ 03 августа 2010

В зависимости от того, насколько вы привязаны к XStream, следующий подход с использованием MOXy JAXB был бы полезен людям:

...