Объекты JAXB - хэш-код и равно - PullRequest
12 голосов
/ 14 октября 2011

У нас есть огромное Java-приложение, которое полностью работает на основе сериализации JAXB. Сервер промежуточного программного обеспечения осуществляет весь доступ к БД, отправляет все объекты данных в объектах JAXB, сериализует в XML и отправляет данные в пользовательский интерфейс (C # .Net).

В большинстве случаев после того, как данные заполняются из db-доступа в java-объекты JAXB, мне придется выполнить некоторую обработку, например, «отсортировать коллекцию объектов на основе атрибута», найти avg, выполнить некоторые вычисления длясписок объектов в коллекции и т. д.

Моя главная проблема заключается в том, что у объектов JAXB нет равных и хэш-кода.Поэтому я перемещаю все данные в некоторые определенные пользователем объекты Data, где у меня есть хеш-код, equals, compareTo, чтобы я мог выполнять все операции в коллекциях и затем копировать их в объекты JAXB.Я думаю, что это дополнительные издержки.

Вопросы:

1) поддерживает ли объект jaxb равно / hashcode / compareTo - можно ли указать их в схеме?

2) Любойдругие лучшие альтернативы?

Спасибо.

Ответы [ 4 ]

10 голосов
/ 14 октября 2011

к сожалению, jaxb не предоставляет этого из коробки. Вы можете использовать этот плагин или написать свой собственный для более настраиваемого поведения.

3 голосов
/ 14 октября 2011

Похоже, вам нужно использовать Collections.sort (list, Comparable) для выполнения необходимой сортировки.Равные и хеш-код не помогут ни в одном из упомянутых вами случаев, так как ваши случаи основаны на сравнении определенных атрибутов, а не объекта в целом.

Другие случаи поиска средних значений и выполнения вычислений также не имеют никакого отношенияс равно / хэш-код, который я вижу.Эти операции просто потребуют анализа списков и выполнения вашего соответствующего алгоритма.

2 голосов
/ 23 октября 2011

FWIW, хотя сгенерированные JAXB Java-классы не будут иметь равные и хэш-коды, вы можете добавить эти переопределения в классы, которые вы пишете с аннотациями JAXB - JAXB будет игнорировать методы.

0 голосов
/ 22 июня 2016

maven-jaxb2-plugin может генерировать хэш-код и метод equals, используя собственный плагин: org.jvnet.jaxb2_commons .Более подробную информацию о конфигурации можно найти здесь .

Соответствующие части файла pom.xml:

<project
  <!-- other configuration -->
  <dependencies>
    <!-- other dependencies -->
    <dependency>
      <groupId>org.jvnet.jaxb2_commons</groupId>
      <artifactId>jaxb2-basics</artifactId>
      <version>0.11.0</version>
    </dependency>
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <groupId>org.jvnet.jaxb2.maven2</groupId>
        <artifactId>maven-jaxb2-plugin</artifactId>
        <version>0.13.1</version>
        <executions>
          <execution>
            <id>generate</id>
            <goals>
              <goal>generate</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <args>
            <arg>-XtoString</arg>
            <arg>-Xequals</arg>
            <arg>-XhashCode</arg>
          </args>
          <plugins>
            <plugin>
              <groupId>org.jvnet.jaxb2_commons</groupId>
              <artifactId>jaxb2-basics</artifactId>
              <version>0.11.0</version>
            </plugin>
          </plugins>
          <schemaDirectory>${project.basedir}/src/main/resources</schemaDirectory>
          <cleanPackageDirectories>true</cleanPackageDirectories>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...