web-dev-qa-db-ja.com

MavenJAXWSを使用した複数のWSDL構成

Maven JAXWS構成に複数のWSDLを含める必要があり、wsdlAのメソッド名の一部がwsdlBのメソッド名と競合するため、それらに異なる出力ディレクトリーを指定する必要があります。 org.jvnet.jax-ws-commonsを使用していますが、wsdlBではなくwsdlAにのみ適用するバインディングが必要です。

これは私が現在持っているものです:

<build>
    <pluginManagement>
      <plugins>
        <plugin> 
          <groupId>org.jvnet.jax-ws-commons</groupId> 
          <artifactId>jaxws-maven-plugin</artifactId> 
          <version>2.1</version> 
          <executions>
            <execution> 
              <goals> 
                <goal>wsimport</goal> 
              </goals>
            </execution> 
          </executions>
          <configuration> 
            <!-- Configure Output -->
            <packageName>com.mycee.project.model</packageName> 
            <sourceDestDir>src/main/Java</sourceDestDir>
            <!-- Configure WSDL Location -->
            <wsdlFiles>
              <wsdlFile>
                ${basedir}/src/jaxws/wsdl/wsdla.wsdl
              </wsdlFile>
              <!--
              <wsdlFile> 
                ${basedir}/src/jaxws/wsdl/wsdlb.wsdl
              </wsdlFile>
              -->   
            </wsdlFiles>
            <!-- Configure Binding Location -->
            <bindingDirectory>
              ${basedir}/src/jaxws/binding
            </bindingDirectory>
            <!-- Make Output Verbose -->
            <verbose>true</verbose>
          </configuration> 
        </plugin>         
      </plugins>            
    </pluginManagement>
  </build>

更新しました:

<build>
    <pluginManagement>
      <plugins>
          <!-- WSDL GENERATOR PLUGIN -->
          <!-- mvn jaxws:wsimport    -->
          <plugin> 
              <groupId>org.jvnet.jax-ws-commons</groupId> 
              <artifactId>jaxws-maven-plugin</artifactId> 
              <version>2.3</version> 
              <executions>
                  <!-- WSDL A -->
                  <execution>
                      <id>WSDLA</id>
                      <phase>generate-sources</phase>
                      <goals> 
                          <goal>wsimport</goal> 
                      </goals>
                      <configuration>
                          <packageName>com.mycee.project.model.wsdla</packageName>                                                                    <staleFile>${project.build.directory}/jaxws/stale/wsdl.a.done</staleFile>
                          <wsdlFiles>
                              <wsdlFile>${basedir}/src/jaxws/wsdl/wsdla.wsdl</wsdlFile>
                          </wsdlFiles>
                          <bindingDirectory>${basedir}/src/jaxws/binding</bindingDirectory>
                      </configuration>                          
                  </execution>
                  <!-- WSDL B -->
                  <execution>
                      <id>WSDLB</id>
                      <phase>generate-sources</phase>
                      <goals> 
                          <goal>wsimport</goal> 
                      </goals>
                      <configuration>        
                          <packageName>com.mycee.project.model.wsdlb</packageName>
                          <staleFile>${project.build.directory}/jaxws/stale/wsdl.b.done</staleFile>
                          <wsdlFiles>
                              <wsdlFile>${basedir}/src/jaxws/wsdl/wsdlb.wsdl</wsdlFile>
                          </wsdlFiles>
                      </configuration>
                  </execution>
              </executions>
              <!-- Common Config -->  
              <configuration>
                  <verbose>true</verbose>
                  <wsdlDirectory>
                      ${basedir}/src/jaxws/wsdl
                  </wsdlDirectory>
              </configuration>
          </plugin> 
      </plugins>  
    </pluginManagement>
  </build>

Mvn clean jaxws:wsimportを実行すると、Javaコードが生成されずに、次の通知が表示されます。

[INFO] --- jaxws-maven-plugin:2.2:wsimport(default-cli)@ [INFO]処理するWSDLが見つかりません。wsdlFiles、wsdlDirectory、またはwsdlUrlsのパラメーターの少なくとも1つを指定してください。

10

まず、pluginManagementブロック内で構成を構成しないことです。この場合、pluginManagementブロックでのみプラグインのバージョンを定義することをお勧めします。さらに、要件を満たすには、次のような2つの実行が必要です。

   <plugin> 
    <groupId>org.jvnet.jax-ws-commons</groupId> 
    <artifactId>jaxws-maven-plugin</artifactId> 
    <executions>
        <execution> 
            <id>wsdla-exec</id>
            <goals> 
            <goal>wsimport</goal> 
            </goals>
            <configuration>
                <packageName>com.mycee.project.model</packageName> 
                <wsdlFiles>
                    <wsdlFile>${basedir}/src/jaxws/wsdl/wsdla.wsdl</wsdlFile>
                </wsdlFiles>
                <bindingDirectory>${basedir}/src/jaxws/binding</bindingDirectory>
                <verbose>true</verbose>
            </configuration>
        </execution> 
        <execution> 
            <id>wsdlb-exec</id>
            <goals> 
            <goal>wsimport</goal> 
            </goals>
            <configuration>
                <packageName>com.mycee.project.model</packageName> 
                <wsdlFiles>
                    <wsdlFile>${basedir}/src/jaxws/wsdl/wsdlb.wsdl</wsdlFile>
                </wsdlFiles>
                <bindingDirectory>${basedir}/src/jaxws/binding</bindingDirectory>
                <verbose>true</verbose>
            </configuration>
        </execution> 
    </executions>
</plugin>
16
khmarbaise

wsdlごとに実行要素を用意し、その中に構成を配置します。共通の構成要素を実行要素の外部に保持できます。例えば。:

<build>
<pluginManagement>
  <plugins>
    <plugin> 
      <groupId>org.jvnet.jax-ws-commons</groupId> 
      <artifactId>jaxws-maven-plugin</artifactId> 
      <version>2.1</version> 
      <executions>
        <execution>
          <id>wsdla</id>
          <goals> 
            <goal>wsimport</goal> 
          </goals>
          <configuration> 
             <wsdlFile>
               ${basedir}/src/jaxws/wsdl/wsdla.wsdl
             </wsdlFile>
             <sourceDestDir>target/gen/wsdla</sourceDestDir>
          </configuration> 
        </execution> 
        <execution>
          <id>wsdlb</id>
          <goals> 
            <goal>wsimport</goal> 
          </goals>
          <configuration> 
             <wsdlFile>
               ${basedir}/src/jaxws/wsdl/wsdlb.wsdl
             </wsdlFile>
             <sourceDestDir>target/gen/wsdlb</sourceDestDir>
          </configuration> 
        </execution> 
      </executions>
      <configuration> 
        <!-- Configure Output -->
        <packageName>com.mycee.project.model</packageName> 
        <!-- Configure Binding Location -->
        <bindingDirectory>
          ${basedir}/src/jaxws/binding
        </bindingDirectory>
        <!-- Make Output Verbose -->
        <verbose>true</verbose>
      </configuration> 
    </plugin>         
  </plugins>  

</pluginManagement>

また、生成されたコードはクリーンアップされないため、/ main/src/Javaに配置しないでください。

2
tdrury