6

jaxws-maven-pluginバージョンを使用してい2.1ます。jarリソースからWSDLロケーション用に生成された非常に奇妙なコードを見つけました:

                <configuration>
                    <keep>true</keep>
                    <sourceDestDir>${basedir}/src/main/java</sourceDestDir>
                    <extension>true</extension>
                    <wsdlDirectory>${basedir}/src/main/resources/wsdl</wsdlDirectory>
                    <packageName>my.package.gen</packageName>
                    <wsdlLocation>wsdl/*</wsdlLocation>
                    <wsdlFiles>
                        <wsdlFile>mywsdl.wsdl</wsdlFile>                            
                    </wsdlFiles>
                </configuration>

そして、生成されるコードは次のとおりです。

static {
    URL url = null;
    try {
        URL baseUrl;
        baseUrl = my.package.gen.My_Service.class.getResource(".");
        url = new URL(baseUrl, "wsdl/mywsdl.wsdl");
    } catch (MalformedURLException e) {
        logger.warning("Failed to create URL for the wsdl Location: 'wsdl/mywsdl.wsdl', retrying as a local file");
        logger.warning(e.getMessage());
    }
    MYSERVICE_WSDL_LOCATION = url; }

したがって、wsdlファイルは、論理的にはメインのjarディレクトリではなく、生成されたクラスの常駐ディレクトリ(パッケージ)で検索されます。そして、WSDLが見つかりません。

のバグjaxws-maven-pluginですか、それとも構成のエラーですか?

4

3 に答える 3

2

2.1ではなくjaxws-maven-pluginバージョン2.3を使用する必要があります。そうすれば、期待どおりの結果が得られます。

このようなバージョン2.3の出力(wsdlフォルダーがsrc / main / resourcesの下にある場合):

URL url = <Any>.class.getClassLoader().getResource("wsdl/anywsdl.wsdl");
于 2014-05-02T14:18:30.440 に答える
1

の世代のために

url = new URL(baseUrl, "wsdl/mywsdl.wsdl");

これは、これによると、意図された動作です、

http://jax-ws-commons.java.net/jaxws-maven-plugin/wsimport-mojo.html#wsdlLocation

それはあなたが何をしたいかによります。

何があなたを悩ませているのなら

My_Service.class.getResource( "。");

次のようなものでポイント(相対パス)を取り除くことができます:

<plugin>
        <groupId>com.google.code.maven-replacer-plugin</groupId>
        <artifactId>replacer</artifactId>
        <version>1.5.0</version>
        <executions>
          <execution>
            <phase>process-sources</phase>
            <goals>
              <goal>replace</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <file>target/generated-sources/wsimport/lu/hitec/webservices/pssu/${wsdl.app}/${interface.name}_Service.java</file>
          <replacements>
            <replacement>
              <token>_Service\.class\.getResource\("\."\)</token>
              <value>_Service\.class\.getResource\(""\)</value>
            </replacement>
          </replacements>
        </configuration>
      </plugin>
于 2013-01-31T09:51:40.377 に答える
0

私の場合、生成されたファイルにはそのclass.getClassLoader()部分がありませんでした。次のように、ディレクトリにあるディレクトリの名前の前にスラッシュ(/)を追加して修正しましたresources<wsdlLocation>/wsdl/*</wsdlLocation>

完全な構成スニペット:

<configuration>
  <wsdlDirectory>src/main/resources/wsdl</wsdlDirectory>
  <wsdlLocation>/wsdl/*</wsdlLocation>
  <wsdlFiles>
    <wsdlFile>myFile.wsdl</wsdlFile>
  </wsdlFiles>
  <keep>true</keep>
</configuration>
于 2020-11-26T02:20:01.783 に答える