5

我正在使用 -clientjar wsimport 参数将我的 WebService 导出到 jar 中。

>wsimport -d C:\webservice -keep -clientjar webservice.jar http://localhost:8080/WebService?wsdl

将创建一个包含源代码(.java 文件)的文件夹和一个 webservice.jar。

罐子看起来像这样:

com
  |
  company
        |
        webservice
                 |
                 a bunch of .class files

META-INF
       |
       wsdl
          |
          wsdl file

但是,当我将它放在项目中的 WEB-INF/lib 文件夹中时,这些类位于(默认包)中,并且命名为

com\company\webservice\file.class

我不明白为什么。我还使用了 -p 参数来指定包名,但它不起作用。

有什么线索吗?

4

5 回答 5

3

我认为这里的问题是该-clientjar选项的目的与OP所期望的完全不同。

-clientjar选项的目的是将 WSDL 的副本嵌入到生成的工件中,以便它可以成为应用程序 jar 文件的一部分。拥有捆绑的 WSDL(当然也实际使用它)的好处是 Web 服务使用者不必在每次启动时调用端点来下载 WSDL。

链接:

https://weblogs.java.net/blog/ramapulavarthi/archive/2010/09/03/wsimport-clientjar-option-ease-client-side-web-service-progra

使用带有 -clientjar 选项的 jaxws-maven-plugin

于 2014-07-01T14:40:17.627 回答
3

有两种选择可以实现这一点,两者都像魅力一样。并且这两个选项都可以从您命名的 ant\gradle 自动执行。

1.使用 -clientjar 然后重新打包源

2.手动将wsdl插入jar并自定义wsdLlocation URL

假设你有 C:\WSDL\SO\stas.wsdl (我在 Windows 上运行)

CD  C:\WSDL\SO\

第一个选项

C:\WSDL\SO>wsimport -clientjar StasWebServiceClient.jar stas.wsdl

这会创建 StasWebServiceClient.jar jar 文件,但是在将其导入 eclipse 时,由于主题问题(默认包),源不可导入。

=> 将 jar 文件解压到当前文件夹,你可以使用 7zip,或者任何其他很棒的 zip 工具,或者你可以运行

C:\WSDL\SO>jar xf StasWebServiceClient.jar

解压罐子。

文件夹层次结构应如下所示

C:\WSDL\SO\META-INF

C:\WSDL\SO\stas.wsdl(original wsdl)

C:\WSDL\SO\StasWebServiceClient.jar(generated jar file)

C:\WSDL\SO\META-INF\wsdl(created by -clientjar)

C:\WSDL\SO\META-INF\wsdl\stas.wsdl(copied by -clientjar)

C:\WSDL\SO\com\...

/* all generated classes\sources */

C:\WSDL\SO\com\...

=> 做

C:\WSDL\SO>jar -cvf StasWebServiceClientCorrect.jar com META-INF

这将创建另一个 jar StasWebServiceClientCorrect.jar,它现在具有正确的包装。

第二种选择

=> 运行 wsimport

C:\WSDL\SO>wsimport -keep stas.wsdl

生成代码。我总是喜欢有 -keep 选项,但这取决于你。

=> 创建 META-INF 文件夹

C:\WSDL\SO>mkdir META-INF

=> 创建 META-INF/wsdl 文件夹

C:\WSDL\SO>cd META-INF




C:\WSDL\SO\META-INF>mkdir wsdl

=> 上一个文件夹。

C:\WSDL\SO\META-INF>cd ..

=> 将 stas.wsdl 文件复制到 META-INF\wsdl\stas.wsdl

C:\WSDL\SO>copy stas.wsdl META-INF\wsdl\stas.wsdl

=> 创建一个 jar 存档

C:\WSDL\SO>jar -cvf StasWebServiceClient.jar com META-INF

将 jar 导入工作区。当您将创建对服务的实际调用时,请使用:

StasService stasService = new  StasService(StasService.class.getClassLoader().getResource("META-INF/wsdl/stas.wsdl") )
于 2015-06-08T18:44:08.537 回答
1

我有同样的问题。最后决定不使用 -clientjar 选项并使用 jar.exe 手动生成一个 jar 并且可以正常工作。

于 2014-02-10T15:42:10.923 回答
1

1.) 解压/解压clientjar

2.) jar 文件使用

jar cvf <jarName>.jar <root_folders> 

例子:

jar cvf weather.jar com META_INF
于 2014-08-22T07:18:03.853 回答
0

我使用了-clientjar,所以它会为我完成所有工作,但使用我最喜欢的文件归档器来解压缩并再次压缩它。

于 2014-03-07T20:47:27.760 回答