首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jaxws-maven-plugin解析WSDL相对于类位置的位置,为什么?

jaxws-maven-plugin解析WSDL相对于类位置的位置,为什么?
EN

Stack Overflow用户
提问于 2013-01-10 17:45:40
回答 3查看 11.6K关注 0票数 6

我使用的是jaxws-maven-plugin版本的2.1。我发现了从jar资源中为WSDL位置生成的非常奇怪的代码:

代码语言:javascript
复制
                <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>

生成的代码是:

代码语言:javascript
复制
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中的错误,还是我的配置中的错误?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-05-02 22:18:30

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

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

代码语言:javascript
复制
URL url = <Any>.class.getClassLoader().getResource("wsdl/anywsdl.wsdl");
票数 2
EN

Stack Overflow用户

发布于 2013-01-31 17:51:40

为了生成

代码语言:javascript
复制
url = new URL(baseUrl, "wsdl/mywsdl.wsdl");

这是预期的行为,根据这个,

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

这取决于你想做什么。

如果困扰你的是

My_Service.class.getResource(".");

你可以去掉这个点(相对路径),如下所示:

代码语言:javascript
复制
<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>
票数 1
EN

Stack Overflow用户

发布于 2020-11-26 10:20:02

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

完整配置片段:

代码语言:javascript
复制
<configuration>
  <wsdlDirectory>src/main/resources/wsdl</wsdlDirectory>
  <wsdlLocation>/wsdl/*</wsdlLocation>
  <wsdlFiles>
    <wsdlFile>myFile.wsdl</wsdlFile>
  </wsdlFiles>
  <keep>true</keep>
</configuration>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14254838

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档