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

Java wsimport-clientjar在中生成类(默认包),java,web-services,jar,wsimport,Java,Web Services,Jar,Wsimport,我正在使用-clientjar wsimport参数将我的Web服务导出到jar中 >wsimport -d C:\webservice -keep -clientjar webservice.jar http://localhost:8080/WebService?wsdl 将创建一个包含源代码(.java文件)的文件夹和一个webservice.jar 罐子看起来像这样: com | company | webservice

我正在使用-clientjar wsimport参数将我的Web服务导出到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参数来指定包名,但它不起作用


有什么线索吗?

我也有同样的问题。最后决定不使用-clientjar选项,并使用jar.exe和works手动生成了一个jar。

我使用了-clientjar,因此它将为我完成所有工作,但是使用了我最喜欢的文件归档程序来解压Zjar并再次将其放入jar。

我认为这里的问题是
-clientjar
选项的用途与OP预期的完全不同

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

链接:

1.)解压缩/unjar clientjar

2.)使用

jar cvf <jarName>.jar <root_folders> 

实现这一点有两种选择,两种方法都很有魅力。 这两个选项都可以从ant\gradle自动执行,您可以随意选择

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

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

假设您有C:\WSDL\SO\stas.WSDL (我在windows上运行)

第一选项

C:\WSDL\SO>wsimport -clientjar StasWebServiceClient.jar stas.wsdl
这将创建staswebbserviceclient.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,staswebbserviceclientcorrect.jar,它现在具有正确的打包

第二选项

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

C:\WSDL\SO>wsimport -keep stas.wsdl
生成代码。我总是喜欢有-保留选项,但这取决于你

=>创建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") )

彼此彼此。有什么线索吗?当我使用
-clientjar
选项时,结果生成的jar只包含一个META-INF文件夹。问题是,我发现我需要修改wsimport生成的代码,因为它不经过小的修改就不会生成有效的SOAP调用。如果我修改源代码并使用Eclipse重新编译,它会清除包含wsdl文件的met inf文件夹。我还没有找到为什么wsimport.exe不从网站发布的wsdl文件生成工作代码。我需要向IELDSubmissionService.submit()方法添加一个带注释的“action”参数,并将header属性设置为“true”,然后它就可以工作了。但我还没有找到一个优雅的方法来建造这个。
StasService stasService = new  StasService(StasService.class.getClassLoader().getResource("META-INF/wsdl/stas.wsdl") )