wsimport -clientjar 生成的类在(默认包)中。

5
我正在使用"-clientjar"参数在一个jar文件中导出我的WebService。
>wsimport -d C:\webservice -keep -clientjar webservice.jar http://localhost:8080/WebService?wsdl

创建了一个包含源代码(.java文件)和webservice.jar的文件夹。
jar文件长这样:
com
  |
  company
        |
        webservice
                 |
                 a bunch of .class files

META-INF
       |
       wsdl
          |
          wsdl file

然而,当我将它放在项目的WEB-INF/lib文件夹中时,这些类就在(默认包)中,并且命名方式如下:
com\company\webservice\file.class

我不明白为什么。我也使用了“-p”参数指定软件包名称,但它不起作用。
有任何线索吗?

同样的问题。有什么线索吗? - inquisitive
当我使用-clientjar选项时,生成的JAR文件仅包含一个META-INF文件夹。 - peterh
5个回答

3

有两种方法可以实现这一点,都非常有效。

而且两种选项都可以从ant\gradle等自动化工具中实现。

1.使用-clientjar,然后重新打包源代码。

2.手动将wsdl文件插入jar包,并定制wsdLlocation URL。

假设您的wsdl文件位于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或其他任何优秀的压缩工具,或者运行以下命令:
C:\WSDL\SO>jar xf StasWebServiceClient.jar

解压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") )

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


问题在于我发现需要修改wsimport生成的代码,因为它没有生成可工作的SOAP调用。如果我修改源代码并使用Eclipse重新编译,它会清除包含wsdl文件的met-inf文件夹。 我还没有找到wsimport.exe为什么不能从网站发布的wsdl文件生成可工作的代码。我需要向IELDSubmissionService.submit()方法添加一个带有头属性设置为“true”的注释“action”参数,然后它就可以工作了。但我还没有找到一种优雅的构建方式。 - sb4
@sb4。也许你可以在SO上发布你的问题作为一个新问题? - peterh

1
1.) 解压缩/解包客户端jar文件 2.) 使用jar文件
jar cvf <jarName>.jar <root_folders> 

例子:
jar cvf weather.jar com META_INF

1

我曾经遇到相同的问题。最终决定不使用 -clientjar 选项,手动使用 jar.exe 生成一个 Jar 包,并且现在可以正常工作。


0

我使用了-clientjar,这样它就可以为我完成所有的工作,但是我使用了我最喜欢的文件压缩软件来解压并重新打包。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接