我使用的是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中的错误,还是我的配置中的错误?
发布于 2014-05-02 22:18:30
您应该使用jaxws-maven-plugin版本2.3而不是2.1,结果将与您预期的一样。
2.3版的输出如下所示(如果您的wsdl文件夹位于src/main/resources下):
URL url = <Any>.class.getClassLoader().getResource("wsdl/anywsdl.wsdl");发布于 2013-01-31 17:51:40
为了生成
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>发布于 2020-11-26 10:20:02
在我的例子中,生成的文件缺少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>https://stackoverflow.com/questions/14254838
复制相似问题