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

Bub*_*muk 5 java web-services jar wsimport

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

>wsimport -d C:\webservice -keep -clientjar webservice.jar http://localhost:8080/WebService?wsdl
Run Code Online (Sandbox Code Playgroud)

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

罐子看起来像这样:

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

META-INF
       |
       wsdl
          |
          wsdl file
Run Code Online (Sandbox Code Playgroud)

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

com\company\webservice\file.class
Run Code Online (Sandbox Code Playgroud)

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

有线索吗?

Sta*_*tas 3

有两种选择可以实现这一目标,两者都很有效。这两个选项都可以从 ant\gradle 自动化,你可以命名它。

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

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

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

CD  C:\WSDL\SO\
Run Code Online (Sandbox Code Playgroud)

第一个选项

C:\WSDL\SO>wsimport -clientjar StasWebServiceClient.jar stas.wsdl
Run Code Online (Sandbox Code Playgroud)

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

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

C:\WSDL\SO>jar xf StasWebServiceClient.jar
Run Code Online (Sandbox Code Playgroud)

解压罐子。

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

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\...
Run Code Online (Sandbox Code Playgroud)

=> 做

C:\WSDL\SO>jar -cvf StasWebServiceClientCorrect.jar com META-INF
Run Code Online (Sandbox Code Playgroud)

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

第二个选择

=> 运行 wsimport

C:\WSDL\SO>wsimport -keep stas.wsdl
Run Code Online (Sandbox Code Playgroud)

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

=> 创建 META-INF 文件夹

C:\WSDL\SO>mkdir META-INF
Run Code Online (Sandbox Code Playgroud)

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

C:\WSDL\SO>cd META-INF




C:\WSDL\SO\META-INF>mkdir wsdl
Run Code Online (Sandbox Code Playgroud)

=> 向上移动一个文件夹。

C:\WSDL\SO\META-INF>cd ..
Run Code Online (Sandbox Code Playgroud)

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

C:\WSDL\SO>copy stas.wsdl META-INF\wsdl\stas.wsdl
Run Code Online (Sandbox Code Playgroud)

=> 创建一个 jar 档案

C:\WSDL\SO>jar -cvf StasWebServiceClient.jar com META-INF
Run Code Online (Sandbox Code Playgroud)

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

StasService stasService = new  StasService(StasService.class.getClassLoader().getResource("META-INF/wsdl/stas.wsdl") )
Run Code Online (Sandbox Code Playgroud)