2013-07-26 2 views
1

Я пытаюсь сгенерировать класс Java, содержащий методы toString, equals и hashCode из файла XSD. Я получил toString работать, но я не могу понять, как получить плагин CXF для создания equals и методов hashCode.Как создать equals и hashCode с CXF xjcplugin

Это мой XSD-файл:

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.com/messagedefinitions" 
      xmlns="http://www.example.com/messagedefinitions"> 


    <xs:element name="Message"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="status" type="Status"/> 
       <xs:element name="id" type="Identifier"/> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 

    <xs:simpleType name="Status"> 
     <xs:restriction base="xs:string"> 
      <xs:maxLength value="4"/> 
     </xs:restriction> 
    </xs:simpleType> 

    <xs:simpleType name="Identifier"> 
     <xs:restriction base="xs:int"/> 
    </xs:simpleType> 

</xs:schema> 

Мой рабочий POM (что не работает закомментирована):

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>com.example</groupId> 
    <artifactId>xsd-demo</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <packaging>jar</packaging> 

    <name>xsd-demo</name> 
    <url>http://maven.apache.org</url> 

    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <cxf.version>2.6.1</cxf.version> 
     <cxf.xjc.plugin.version>2.6.1</cxf.xjc.plugin.version> 
    </properties> 

    <dependencies> 
     <dependency> 
      <groupId>org.apache.cxf</groupId> 
      <artifactId>cxf-tools-common</artifactId> 
      <version>${cxf.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.cxf.xjc-utils</groupId> 
      <artifactId>xjc-utils</artifactId> 
      <type>pom</type> 
      <version>${cxf.xjc.plugin.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.cxf.xjc-utils</groupId> 
      <artifactId>cxf-xjc-runtime</artifactId> 
      <version>${cxf.xjc.plugin.version}</version> 
     </dependency> 
    </dependencies> 

    <build> 
     <plugins> 
      <plugin> 
       <inherited>true</inherited> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>3.1</version> 
       <configuration> 
        <source>1.7</source> 
        <target>1.7</target> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.cxf</groupId> 
       <artifactId>cxf-xjc-plugin</artifactId> 
       <version>${cxf.xjc.plugin.version}</version> 
       <executions> 
        <execution> 
         <id>generate-sources</id> 
         <phase>generate-sources</phase> 
         <goals> 
          <goal>xsdtojava</goal> 
         </goals> 

         <configuration> 
          <sourceRoot>${basedir}/target/generated-sources</sourceRoot> 
          <xsdOptions> 
           <xsdOption> 
            <extension>true</extension> 
            <xsd>${basedir}/src/main/resources/xsd/Message.xsd</xsd> 
            <bindingFile>${basedir}/src/main/resources/bindings.xml</bindingFile> 
            <extensionArgs> 
             <arg>-Xts:style:multiline</arg> 
             <!--<arg>-Xequals</arg>--> 
             <!--<arg>-XhashCode</arg>--> 
            </extensionArgs> 
           </xsdOption> 
          </xsdOptions> 
          <extensions> 
           <extension>org.apache.cxf.xjcplugins:cxf-xjc-ts:${cxf.xjc.plugin.version}</extension> 
           <!--<extension>org.apache.cxf.xjcplugins:cxf-xjc-XhashCode:${cxf.xjc.plugin.version}--> 
           <!--</extension>--> 
           <!--<extension>org.apache.cxf.xjcplugins:cxf-xjc-Xequals:${cxf.xjc.plugin.version}--> 
           <!--</extension>--> 
          </extensions> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 

</project> 

креплениями Файл:

<?xml version="1.0" encoding="UTF-8"?> 
<jaxb:bindings 
     xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" 
     xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" 
     jaxb:version="2.1"> 
    <jaxb:globalBindings> 
     <xjc:serializable uid="1234"/> 
    </jaxb:globalBindings> 
</jaxb:bindings> 

Если я не комментируйте прокомментированные строки для Xequals. Я получаю эту ошибку:

[ERROR] Не удалось выполнить цель org.apache.cxf: cxf-xjc-plugin: 2.6.1: xsdtojava (generate-sources) в проекте xsd-demo: Не удалось загрузить артефакт расширения: Запрошенная загрузка не существует. Не удалось найти артефакт org.apache.cxf.xjcplugins: CXF-XJC-Xequals: баночка: 2.6.1 в центре (http://repo1.maven.org/maven2)

Fine, я понимаю, что артефакт не существует, но я не знаю, тогда как для настройки плагина CXF для создания методов equals и hashCode. Вы знаете, как я могу настроить плагин CXF для генерации методов equals и hashCode? Заранее благодарю за любую помощь.

ответ

0

Мне не удалось заставить cxf-xjc-plugin генерировать методы equals и hashCode из файлов схемы XML. Я отказался от cxf-xjc-плагина и вместо этого перешел на maven-jaxb2-plugin. Это конфигурация плагин, который я использовал:

<plugin> 
    <groupId>org.jvnet.jaxb2.maven2</groupId> 
    <artifactId>maven-jaxb2-plugin</artifactId> 
    <version>0.8.3</version> 
    <executions> 
    <execution> 
     <id>generate</id> 
     <phase>generate-sources</phase> 
     <goals> 
     <goal>generate</goal> 
     </goals> 
     <configuration> 
     <extension>true</extension> 
      <generatePackage>my.package.name</generatePackage> 
      <args> 
      <arg>-XtoString</arg> 
      <arg>-Xequals</arg> 
      <arg>-XhashCode</arg> 
      </args> 
      <schemaDirectory>${basedir}/src/main/resources</schemaDirectory> 
      <schemaIncludes> 
      <include>xsd/*.xsd</include> 
      </schemaIncludes> 
      <plugins> 
      <plugin> 
       <groupId>org.jvnet.jaxb2_commons</groupId> 
       <artifactId>jaxb2-basics</artifactId> 
       <version>0.6.4</version> 
      </plugin> 
      </plugins> 
     </configuration> 
     </execution> 
    </executions> 
</plugin> 
0

После прочтения этой HOWTO, я получил его на работу следующим образом:

<build> 
    <plugins> 
     <!-- Build WSDL resources (includes XSDs) --> 
     <plugin> 
     <groupId>org.apache.cxf</groupId> 
     <artifactId>cxf-codegen-plugin</artifactId> 
     <version>2.7.0</version> 
     <executions> 
      <execution> 
       <id>generate-sources</id> 
       <phase>generate-sources</phase> 
       <goals> 
        <goal>wsdl2java</goal> 
       </goals> 
      </execution> 
     </executions> 
     <configuration> 
      <defaultOptions> 
       <extraargs> 
        <extraarg>-verbose</extraarg> 
        <extraarg>-xjc-Xequals</extraarg> 
        <extraarg>-xjc-XhashCode</extraarg> 
       </extraargs> 
       <bindingFiles> 
        <!-- Shared XSD file bindings --> 
        <bindingFile>${project.basedir}/src/main/resources/bindings.xjb</bindingFile> 
       </bindingFiles> 
      </defaultOptions> 
      <wsdlOptions> 
       <wsdlOption> 
        <wsdl>https://myserver.com/MyService?wsdl</wsdl> 
        <bindingFiles> 
        <!-- Specific WSDL file bindings --> 
        <bindingFile>${project.basedir}/src/main/resources/wsdl-bindings.xml</bindingFile> 
        </bindingFiles> 
       </wsdlOption> 
      </wsdlOptions> 
     </configuration> 
     <dependencies> 
      <dependency> 
       <groupId>org.jvnet.jaxb2_commons</groupId> 
       <artifactId>jaxb2-basics</artifactId> 
       <version>0.6.5</version> 
      </dependency> 
     </dependencies> 
     </plugin> 
    </plugins> 
</build> 

<dependencies> 
    <!-- The generated equals and hashCode methods require some runtime libraries. --> 
    <dependency> 
     <groupId>org.jvnet.jaxb2_commons</groupId> 
     <artifactId>jaxb2-basics-runtime</artifactId> 
    </dependency> 
</dependencies> 

К сожалению, для меня, используя jvnet JAXWS-Maven-плагин не вариант, так как наши файлы WSDL предоставляются нам третьей стороной, и у них есть проблемы (например, soap:body элементов в пределах wsdl:fault элементов), которые заставляют стандартный плагин задыхаться.

+0

Я получил его на работу. Однако, если вы можете использовать стандартный jvnet-плагин, я бы предложил вам сделать это.Если вы должны использовать версию apache (возможно, из-за использования разбитых .Net-файлов WSDL), я надеюсь, что это вам поможет. –

0

Конечно слишком поздно для вас ... но ...

мне удалось сгенерировать хэш-код и составляет с плагином CxF-XJC-плагин (как в вопросе) с org.jvnet.jaxb2_commons: jaxb2- Основы: 0.7.0

Вам нужны org.jvnet.jaxb2_commons: jaxb2-basics: 0.7.0 для генерации методов (equals, hashcode) и org.jvnet.jaxb2_commons: jaxb2-basics-runtime: 0.7.0 для зависимостей компиляции

Использование antrun является уродливым, но мне нужно его создать каталог для моего эпизода Использование build-helper-maven-plugin заключается в добавлении гена рейтинг каталог в путь к классам в затмении я использую привязки файл (изменить его в случае необходимости)

<dependencies> 
    <dependency> 
     <groupId>org.apache.cxf.xjcplugins</groupId> 
     <artifactId>cxf-xjc-ts</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.cxf.xjc-utils</groupId> 
     <artifactId>cxf-xjc-runtime</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.jvnet.jaxb2_commons</groupId> 
     <artifactId>jaxb2-basics-runtime</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.jvnet.jaxb2_commons</groupId> 
     <artifactId>jaxb2-basics</artifactId> 
    </dependency> 
</dependencies> 

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-antrun-plugin</artifactId> 
      <executions> 
       <execution> 
        <id>generate-resources</id> 
        <phase>validate</phase> 
        <goals> 
         <goal>run</goal> 
        </goals> 
        <configuration> 
         <tasks> 
          <echo message="Creating directories" /> 
          <mkdir dir="./target/generated/src/main/resources/bindings/" /> 
         </tasks> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>build-helper-maven-plugin</artifactId> 
      <executions> 
       <execution> 
        <id>add-source</id> 
        <phase>generate-sources</phase> 
        <goals> 
         <goal>add-source</goal> 
        </goals> 
        <configuration> 
         <sources> 
          <source>${basedir}/target/generated/src/main/java/</source> 
         </sources> 
        </configuration> 
       </execution> 
       <execution> 
        <id>add-resource</id> 
        <phase>generate-sources</phase> 
        <goals> 
         <goal>add-resource</goal> 
        </goals> 
        <configuration> 
         <resources> 
          <resource> 
           <directory> 
            ${basedir}/target/generated/src/main/resources/bindings/</directory> 
          </resource> 
         </resources> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.cxf</groupId> 
      <artifactId>cxf-xjc-plugin</artifactId> 
      <configuration> 
       <extensions> 
        <extension>org.apache.cxf.xjcplugins:cxf-xjc-dv:3.0.3</extension> 
        <extension>org.apache.cxf.xjcplugins:cxf-xjc-ts:3.0.3</extension> 
        <extension>org.jvnet.jaxb2_commons:jaxb2-basics:0.7.0</extension> 
       </extensions> 
      </configuration> 
      <executions> 
       <execution> 
        <id>generate-sources</id> 
        <phase>generate-sources</phase> 
        <goals> 
         <goal>xsdtojava</goal> 
        </goals> 
        <configuration> 
         <xsdOptions> 
          <xsdOption> 
           <extension>true</extension> 
           <xsd>${basedir}/src/main/resources/schemas/FluxExportDenormalized.xsd</xsd> 
           <bindingFile>${basedir}/src/main/resources/bindings/binding.xjb</bindingFile> 
           <extensionArgs> 
            <extensionArg>-Xdv</extensionArg> 
            <extensionArg>-episode</extensionArg> 
            <extensionArg>${basedir}/target/generated/src/main/resources/bindings/FluxExportTarifDenormalized.episode</extensionArg> 
            <extensionArg>-Xts</extensionArg> 
            <extensionArg>-Xequals</extensionArg> 
            <extensionArg>-XhashCode</extensionArg> 
           </extensionArgs> 
          </xsdOption> 
          <xsdOption> 
           <extension>true</extension> 
           <xsd>${basedir}/src/main/resources/schemas/FluxExportNormalized.xsd</xsd> 
           <extensionArgs> 
            <extensionArg>-Xdv</extensionArg> 
            <extensionArg>-b</extensionArg> 
            <extensionArg>${basedir}/src/main/resources/bindings/binding.xjb</extensionArg> 
            <extensionArg>-b</extensionArg> 
            <extensionArg>${basedir}/target/generated/src/main/resources/bindings/FluxExportDenormalized.episode</extensionArg> 
            <extensionArg>-Xequals</extensionArg> 
            <extensionArg>-XhashCode</extensionArg> 
           </extensionArgs> 
          </xsdOption> 
         </xsdOptions> 
        </configuration> 
       </execution> 
      </executions> 
      <dependencies> 
       <dependency> 
        <groupId>org.jvnet.jaxb2_commons</groupId> 
        <artifactId>jaxb2-basics</artifactId> 
        <version>0.7.0</version> 
       </dependency> 
      </dependencies> 
     </plugin> 

Может быть, вам нужен жизненный цикл в затмении, чтобы избежать красного креста ошибки:

<?xml version="1.0" encoding="UTF-8"?> 
<lifecycleMappingMetadata> 
    <pluginExecutions> 
     <pluginExecution> 
      <pluginExecutionFilter> 
       <groupId>org.apache.cxf</groupId> 
       <artifactId>cxf-xjc-plugin</artifactId> 
       <versionRange>[2.3.0,)</versionRange> 
       <goals> 
        <goal>xsdtojava</goal> 
       </goals> 
      </pluginExecutionFilter> 
      <action> 
       <execute /> 
      </action> 
     </pluginExecution> 
     <pluginExecution> 
      <pluginExecutionFilter> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-antrun-plugin</artifactId> 
       <versionRange>[1.4,)</versionRange> 
       <goals> 
        <goal>run</goal> 
       </goals> 
      </pluginExecutionFilter> 
      <action> 
       <execute /> 
      </action> 
     </pluginExecution> 
    </pluginExecutions> 
</lifecycleMappingMetadata> 

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

  • Нет связанных вопросов^_^