Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java jaxws maven插件解析相对于类位置的WSDL位置,为什么?_Java_Maven_Wsdl_Jax Ws_Maven Plugin - Fatal编程技术网

Java jaxws maven插件解析相对于类位置的WSDL位置,为什么?

Java jaxws maven插件解析相对于类位置的WSDL位置,为什么?,java,maven,wsdl,jax-ws,maven-plugin,Java,Maven,Wsdl,Jax Ws,Maven Plugin,我正在使用jaxws-maven插件version2.1。我发现了从jar资源中为WSDL位置生成的非常奇怪的代码: <configuration> <keep>true</keep> <sourceDestDir>${basedir}/src/main/java</sourceDestDir>

我正在使用
jaxws-maven插件
version
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>
URL url = <Any>.class.getClassLoader().getResource("wsdl/anywsdl.wsdl");
因此,wsdl文件是在生成的类驻留的目录(包)中查找的,而不是在主jar目录中查找的,这是合乎逻辑的。并且找不到WSDL

这是jaxws maven插件中的错误还是我的配置中的错误?

用于生成

url = new URL(baseUrl, "wsdl/mywsdl.wsdl");
这是预期的行为,根据这个

这取决于你想做什么

如果你有什么麻烦

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>

com.google.code.maven-replacer-plugin
替代者
1.5.0
过程源
代替
目标/生成的源代码/wsimport/lu/hitec/webservices/pssu/${wsdl.app}/${interface.name}\u Service.java
_服务\.class\.getResource\(“\.”)
_服务\.class\.getResource\(“”)

您应该使用jaxws maven插件版本2.3,而不是2.1,结果将与您预期的一样

版本2.3的输出如下(如果您的wsdl文件夹位于src/main/resources下):

URL=.class.getClassLoader().getResource(“wsdl/anywsdl.wsdl”);

在我的例子中,生成的文件缺少
类.getClassLoader()
部分。通过在
resources
目录中的目录名之前添加正斜杠(/)修复了此问题,如下所示:
/wsdl/*

完整配置代码段:

<configuration>
  <wsdlDirectory>src/main/resources/wsdl</wsdlDirectory>
  <wsdlLocation>/wsdl/*</wsdlLocation>
  <wsdlFiles>
    <wsdlFile>myFile.wsdl</wsdlFile>
  </wsdlFiles>
  <keep>true</keep>
</configuration>

src/main/resources/wsdl
/wsdl/*
myFile.wsdl
真的

同时,您能找到解决问题的方法吗?我面临着和你一样的问题,萨缪尔的解决方案真的是一个丑陋的黑客。这里有一个相同的问题和另一个解决方案。你说它在jaxws maven插件的2.3版中得到了修复?我检查了我公司的Nexus,不幸的是最高版本是2.2(除了那里的工件,我不能使用任何东西)。所以我应该建议他们更新版本?您是否有任何与信息相关的链接,它是在哪个版本中修复的?我需要一些东西来证明这样的更新是必要的。是的,这是真的。我只将构建中的版本从2.3改回了2.1,以查看结果是否与@Łukasz相同웃Lツ . 就是这样:-)我还检查了我的gradle build with wsimport任务,该任务使用jax ws 2.1.4,它也是错误的,因此我更新到jax ws 2.2.8,并在那里解决了问题。所以JAX-WS工具2.2.8也可以按要求工作。我将把这些信息提供给我的公司。如果他们更新插件或通过手工修复来解决这个问题,这取决于他们:)现在我已经一步一步地检查了从2.1.7到2.2.3的JAX-WS版本,差异确实很明显:)第一次更改发生在2.2中,但它没有使用类加载器,只是使用了简单的class.getResource(),但已经有了良好的相对路径。2.2.1、2.2.2中的相同内容缺失。从2.2.3开始,他们使用.class.getClassLoader().getResource(“”),那么好的一个是什么呢。。getClassLoader()从未出现,切换到cxf codegen插件,一切正常。。是的,一个解决方案,需要使用外部库(插件)。我希望这在jaxws maven插件的2.3版中得到修复,正如Miklos Krivan所写,在我的情况下,很难说服公司使用新版本的jaxws插件,说服他们使用新插件几乎是不可能的。。。
<configuration>
  <wsdlDirectory>src/main/resources/wsdl</wsdlDirectory>
  <wsdlLocation>/wsdl/*</wsdlLocation>
  <wsdlFiles>
    <wsdlFile>myFile.wsdl</wsdlFile>
  </wsdlFiles>
  <keep>true</keep>
</configuration>