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

时间:2013-09-23 19:14:58

标签: java web-services jar wsimport

我正在使用-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参数来指定包名,但它不起作用。

任何线索?

5 个答案:

答案 0 :(得分: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

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

答案 1 :(得分:2)

我认为这里的问题是-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

Using jaxws-maven-plugin with -clientjar option

答案 2 :(得分:1)

1。)解压缩/解压缩clientjar

2。)jar文件使用

jar cvf <jarName>.jar <root_folders> 

示例:

jar cvf weather.jar com META_INF

答案 3 :(得分:0)

我遇到了同样的问题。最后决定不使用-clientjar选项并使用jar.exe手动生成jar并运行。

答案 4 :(得分:0)

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