【问题标题】:Multiple WSDLs Configurations With Maven JAXWS使用 Maven JAXWS 的多个 WSDL 配置
【发布时间】:2013-07-14 12:15:33
【问题描述】:

我需要在我的 Maven JAXWS 配置中包含多个 WSDL,并且我需要为它们指定不同的输出目录,因为 wsdlA 中的某些方法名称与 wsdlB 中的方法名称冲突。我正在使用 org.jvnet.jax-ws-commons,我需要绑定仅适用于 wsdlA,而不适用于 wsdlB。

这是我目前拥有的:

<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。

【问题讨论】:

    标签: maven jax-ws


    【解决方案1】:

    首先不要在 pluginManagement 块中配置配置。在这种情况下,最好只在 pluginManagement 块中定义插件的版本。此外,为了满足您的要求,您需要进行两次这样的执行:

       <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>
    

    【讨论】:

    • 我显然在某处遗漏了一些东西,我创建了两个执行块,都使用 ...,运行 mvn clean jaxws:wsimport ,我收到以下通知: [INFO] --- jaxws-maven-plugin:2.2:wsimport (default-cli) @ ... --- [INFO] 找不到要处理的 WSDL,请至少指定以下一项参数:wsdlFiles、wsdlDirectory 或 wsdlUrls。
    • 根据您需要设置 wsdlDirectory 的文档,因为您没有使用默认值 (${basedir}/src/wsdl.)。此外,不要单独调用目标,更好地调用生命周期,例如 mvn generate-sources。比你可以看到配置等是否正常。之后使用mvn package
    • 你没有仔细看我的帖子,因为一开始就提到了pluginManagement的信息。
    • 一点旁注 - 调用 maven 的正确目标似乎是 mvn generate-sources 而不是 mvn jaxws:wsimport 对于这个答案。
    【解决方案2】:

    每个 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 中,因为它不会被清理。

    【讨论】:

    • 我显然在某处遗漏了一些东西,我创建了两个执行块,都使用 ...,运行 mvn clean jaxws:wsimport ,我收到以下通知: [INFO] --- jaxws-maven-plugin:2.2:wsimport (default-cli) @ ... --- [INFO] 找不到要处理的 WSDL,请至少指定以下一项参数:wsdlFiles、wsdlDirectory 或 wsdlUrls。
    • 您是否在全局配置部分指定了
    • 尝试在执行配置部分添加 参数 - 确保每个 staleFile 对于每个 wsdl 都是唯一的。也许它认为它不需要从 wsdl 重新生成源。这应该可以工作 - 这正是我们使用的配置。
    • 我们使用 2.1 版。实际上,我们分叉了 2.l 版本并添加了跨类路径(因此跨 maven 模块)解析 XML 模式的能力,但插件的其余部分是相同的。
    • 看到你的另一个帖子 - 我不敢相信我没有注意到你在 中拥有所有这些......我很高兴你得到了答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-18
    • 1970-01-01
    • 1970-01-01
    • 2012-12-24
    • 2015-10-24
    • 1970-01-01
    • 2021-05-31
    相关资源
    最近更新 更多