2014-11-26 2 views
0

Я использую классы CXF JAXB, сгенерированные в приложении GWT. Я хотел бы, чтобы equals() и hashCode() добавлялись к сгенерированным классам. Я успешно использовал JAXB2 Basics Plugins (http://confluence.highsource.org/display/J2B/JAXB2+Basics+Plugins) и JAXB2 Basics Runtime с CXF в maven POM, чтобы сгенерировать их. Однако сгенерированные классы теперь несовместимы с GWT. Классы имеют зависимости, которые не эмулируются GWT, например, java.util.ResourceBundle, java.net.URL.Основы GWT и JAXB Время выполнения

Я рассматриваю использование CustomEqualsStrategy, но это все равно оставит класс org.jvnet.jaxb2_commons.locator.ObjectLocator. Кто-нибудь получил это, чтобы работать?

+0

Несомненно. Я автор. Не могли бы вы указать, какая именно проблема с GWT была? – lexicore

+0

Все классы jaxb2_common перечислены следующим образом: (я не могу их распечатать) '[ERROR] Строка xxx: Нет исходного кода для типа org.jvnet.jaxb2_commons.locator.ObjectLocator; вы забыли наследовать необходимый модуль? ' ' [ERROR] Строка xxx: Нет исходного кода для типа org.jvnet.jaxb2_commons.lang.JAXBEqualsStrategy; вы забыли наследовать необходимый модуль? ' ' [ERROR] Строка xxx: для типа org.jvnet.jaxb2_commons.locator.util.LaxatorUtils не существует исходного кода; вы забыли наследовать необходимый модуль? ' – ja6a

+0

Сообщение« вы забыли наследовать необходимый модуль? »означает, что GWT не может найти исходный код. Мы можем включить источник для ObjectLocator, но это никогда не будет работать, потому что ObjectLocator зависит от частей Java, которые GWT не эмулирует.Одним из решений может быть разработка версии ObjectLocator, которая ограничивает себя эмулированными классами GWT. Например, GWT имеет однопоточную резьбу, что может помочь упростить ситуацию. – ja6a

ответ

0

У этого вопроса есть вопрос сейчас.

Я сотрудничал с Джеймсом (ОП, @ ja6a) и вместе мы разработали JAXB2 SimpleEquals Plugin и JAXB2 SimpleHashCode Plugin, которые генерируют во время выполнения свободногобезотражательногоequals(...) и hashCode() методы. Поскольку дополнительных зависимостей во время выполнения нет, это совместимо с GWT.

Примеры сгенерированного кода:

Использование:

Ниже приведен фрагмент из примера pom.xml:

 <plugin> 
      <groupId>org.jvnet.jaxb2.maven2</groupId> 
      <artifactId>maven-jaxb2-plugin</artifactId> 
      <configuration> 
       <extension>true</extension> 
       <args> 
        <arg>-XsimpleEquals</arg> 
        <arg>-XsimpleHashCode</arg> 
       </args> 
       <plugins> 
        <plugin> 
         <groupId>org.jvnet.jaxb2_commons</groupId> 
         <artifactId>jaxb2-basics</artifactId> 
        </plugin> 
       </plugins> 
      </configuration> 
     </plugin> 

Как уже упоминалось выше, нет необходимости во время выполнения.

Эти плагины обрабатывают огромное количество корпусов и угловых шкафов и углов углов. Например, нам пришлось реализовать специальную обработку для таких вещей, как JAXBElement и массивы, поскольку они не реализуют методы hashCode() и equals(...). Плагины также обрабатывают примитивные типы.

Большое спасибо за James Annesley за помощь.

Смежные вопросы