WebService 根据 wsdl 文件生成 Java 代理类方式汇总

WebService 根据 wsdl 文件生成 Java 代理类方式汇总

目录

概述

1、对于公司内部,或者条件允许的情况下,找对方开发人员直接获取 服务端的接口源码也是可以的,粘贴到客户端就能用。

2、客户端调用服务的方式有许多种,并不是所有的方式都需要根据 wsdl 文件生成客户端类,如果需要生成,则通常有以下几种方式。

3、温馨提醒:如果使用浏览器在线访问 wsdl 地址,复制内容粘贴到本地创建 xxx.wsdl 文件时,建议使用 浏览器WebService 根据 wsdl 文件生成 Java 代理类方式汇总,某次使用的 复制的内容少了一些东西,导致文件内容不完整而报错。

特别提醒

1)代理类中有些类相互引用时,使用的是绝对地址,所以要么是生成的时候,提前指定好路径,要么是修改报错的路径为实际路径。

2)无论是下面哪种方式,都可以使用在线url地址,或者本地文件进行生成,所以生成的服务类代码中也是在线地址或者本地地址,必须要能够正常访问。如果是本地文件,则建议将 wsdl 文件放在项目中(资源目录下),这样就可以和项目一起移动,否则如果将来项目移动了,而忘了本地的 wsdl 文件,显然运行就报错了。

Java JDK .exe

1、Java JDK 的 bin文件夹下有一个 .exe 工具,可依据 wsdl 文件生成相应的类文件,将生成好的类文件拷贝到需要使用的项目中,就可以像调用本地的类一样调用 提供的方法。

2、.exe 工具可以用于非 Java 的 服务器,如用 C# 、.net 等语言编写的 服务端,只要得到了其 wsdl 文件WebService 根据 wsdl 文件生成 Java 代理类方式汇总,则通过 即可生成 Java 客户端实现。

3、只要在电脑上配置了 Java JDK 的环境变量,则可以在任意目录下使用 cmd 窗口执行 命令,输入 回车,即可看到命令的格式、以及参数、使用示例等。

4、常用命令如下,只要服务商提供了 wsdl 地址,自己就可以默默的生成类文件然后调用。:

E:tempwebservice>wsimport -keep -encoding UTF-8 -d E:/temp/webservice/class -s E:/temp/webservice/java -p org.example.webservice.agency -verbose http://localhost:8080/webservice/agencyService?wsdl
正在解析 WSDL...
正在生成代码...
orgexamplewebserviceagencyAgencyService.java
orgexamplewebserviceagencyIAgencyService.java
orgexamplewebserviceagencyObjectFactory.java
orgexamplewebserviceagencyQueryAgencyStatInfo.java
orgexamplewebserviceagencyQueryAgencyStatInfoResponse.java
orgexamplewebserviceagencySyncAgencyStatInfo.java
orgexamplewebserviceagencySyncAgencyStatInfoResponse.java
orgexamplewebserviceagencypackage-info.java
正在编译代码...
javac -d E:tempwebserviceclass -classpath C:wmxsoftwareJavajdk1.8.0_131/lib/tools.jar;C:wmxsoftwareJavajdk1.8.0_131/classes -Xbootclasspath/p:C:wmxsoftwareJavajdk1.8.0_131jrelibrt.jar;C:wmxsoftwareJavajdk1.8.0_131jrelibrt.jar E:tempwebservicejavaorgexamplewebserviceagencyAgencyService.java E:tempwebservicejavaorgexamplewebserviceagencyIAgencyService.java E:tempwebservicejavaorgexamplewebserviceagencyObjectFactory.java E:tempwebservicejavaorgexamplewebserviceagencyQueryAgencyStatInfo.java E:tempwebservicejavaorgexamplewebserviceagencyQueryAgencyStatInfoResponse.java E:tempwebservicejavaorgexamplewebserviceagencySyncAgencyStatInfo.java E:tempwebservicejavaorgexamplewebserviceagencySyncAgencyStatInfoResponse.java E:tempwebservicejavaorgexamplewebserviceagencypackage-info.java
E:tempwebservice>

-keep:保留已生成的文件而不覆盖它们。

-:指定源文件所使用的字符编码。防止中文乱码。

-d:指定.class文件的输出目录,此目录必须提前创建好。部署阶段,直接使用 .class 文件也是可以的。

-s:指定.java文件的输出目录,不指定时,默认与 -d 设置的路径一致。

-p:定义所有生成类的包名,不指定时会保持与原来一致。可以在客户端确定一个目录,然后这里指定它,这样生成的所有文件到时候直接粘贴进去连路径都不用改,否则如果找不到路径就会报错。

-:在控制台显示输出信息

-b:指定jaxws/jaxb绑定文件或额外的

-:使用扩展来支持SOAP1.2

结尾指定 wsdl 文件路径,可以是在线地址java生成wsdl文件,也可以是本地地址(就是把在线内容复制到本地),如:

:8080//?wsdl

D:wsdl.wsdl

5、生成的文件中主要关注目标接口即可,接口中的内容基本已经和服务端大差不差了java生成wsdl文件,因为是面向接口编程,其他文件基本可以不用关注。

src/main//wsdl/.wsdl · 汪少棠/ – 。

解析组件 's:' 时出错

1、生成时报错如下,执行失败,出现的原因是 服务端如果是 .net 写的,则使用 Java .exe 生成时就会报错。

2、开发中如果没有遇到这个错误,自然是最好,万一遇到,则可以一试,亲测有效。

PS E:wmxwebservice> wsimport -keep -d E:wmxwebservice -verbose http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl
正在解析 WSDL...
[WARNING] src-resolve.4.2: 解析组件 's:schema' 时出错。在该组件中检测到 's:schema' 位于名称空间 'http://www.w3.org/2001/XMLSchema' 中, 但无法从方案文档 'http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl#types?schema1' 引用此名称空间的组件。如果这是不正确的名称空间, 则很可能需要更改 's:schema' 的前缀。如果这是正确的名称空间, 则应将适当的 'import' 标记添加到 'http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl#types?schema1'。
  http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl#types?schema1的第 44 行
[WARNING] src-resolve: 无法将名称 's:schema' 解析为 'element declaration' 组件。
  http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl#types?schema1的第 44 行
[ERROR] undefined element declaration 's:schema'
  http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl的第 44 行
[ERROR] undefined element declaration 's:schema'
  http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl的第 85 行
Exception in thread "main" com.sun.tools.internal.ws.wscompile.AbortException
        at com.sun.tools.internal.ws.processor.modeler.wsdl.JAXBModelBuilder.bind(JAXBModelBuilder.java:129)
        at com.sun.tools.internal.ws.processor.modeler.wsdl.WSDLModeler.buildJAXBModel(WSDLModeler.java:2283)
        at com.sun.tools.internal.ws.processor.modeler.wsdl.WSDLModeler.internalBuildModel(WSDLModeler.java:183)
        at com.sun.tools.internal.ws.processor.modeler.wsdl.WSDLModeler.buildModel(WSDLModeler.java:126)
        at com.sun.tools.internal.ws.wscompile.WsimportTool.buildWsdlModel(WsimportTool.java:429)
        at com.sun.tools.internal.ws.wscompile.WsimportTool.run(WsimportTool.java:190)
        at com.sun.tools.internal.ws.wscompile.WsimportTool.run(WsimportTool.java:168)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at com.sun.tools.internal.ws.Invoker.invoke(Invoker.java:159)
        at com.sun.tools.internal.ws.WsImport.main(WsImport.java:42)
PS E:wmxwebservice>

解决办法

1、针对 .net 开发的 服务端,Java .exe 生成代理类出错解决办法如下:

1)将服务端的 wsdl 文档保存到本地,如 E:wmx\.wsdl.xml、E:wmx\.wsdl、E:wmx\.xml (经实测文件的后缀名其实关系不大,都可以正常生成)

2、修改 wsdl 文档以下内容:

将文件中所有的 替换成

2、直接在 wsdl 文档页面右键,选择查看源代码,然后将 Ctrl + S 保存即可,然后便可打开文件,替换其中的内容:

3、此时使用 .exe 再次生成java生成wsdl文件,便可以正确执行:

CXF 工具包

1、直接从 CXF 官网下载二进制 jar 包,解压后,在 bin 目录下提供了各种转换工具,其中就包括 工具。

。兼容JDK8。

。JDK11及以上。

。JDK11及以上。

百度网盘地址: 提取码: 9pay。

2、cmd 进入此目录后即可使用这些工具,在 cmd 中可以使用 -help 即可看到所有的参数以及使用方法。常用命令如下:

E:迅雷下载apache-cxf-3.5.7bin>.wsdl2java -keep -encoding UTF-8 -d E:/temp/webservice/cxf/java -compile -classdir E:/temp/webservice/cxf/class -p org.example.webservice.user -verbose http://localhost:8080/webservice/userService?wsdl
Loading FrontEnd jaxws ...
Loading DataBinding jaxb ...
wsdl2java -keep -encoding UTF-8 -d E:/temp/webservice/cxf/java -compile -classdir E:/temp/webservice/cxf/class -p org.example.webservice.user -verbose http://localhost:8080/webservice/userService?wsdl
wsdl2java - Apache CXF 3.5.7
E:迅雷下载apache-cxf-3.5.7bin>

-keep:保留已生成的文件而不覆盖它们。

-:指定生成的代理类的编码,和服务端的一致即可,防止中文乱码。

-:对生成的 .java 文件进行编译生成 .class 文件。

-d:指定.java文件的输出目录,目录不存在时会自动创建。

-:指定.class 文件的输出目录,目录不存在时会自动创建。

-p:定义所有生成类的包名,不指定时会保持与原来一致。可以在客户端确定一个目录,然后这里指定它,这样生成的所有文件到时候直接粘贴进去连路径都不用改,否则如果找不到路径就会报错。

-:在控制台显示输出信息

结尾指定 wsdl 文件路径,可以是在线地址,也可以是本地地址(就是把在线内容复制到本地),如:

:8080//?wsdl

D:wsdl.wsdl

3、直接将生成好的所有代理类导入到客户端中即可使用。

src/main//wsdl/.wsdl · 汪少棠/ – 。

cxf– maven 插件

1、插件底层仍然是 cxf ,只是被集成为 maven 插件,方便操作。





	org.apache.cxf
	cxf-codegen-plugin
	3.2.5
	
		
			generate-sources
			generate-sources
			
				
				
				<!--${project.basedir}/src/main/java-->
				
				E:/temp/webservice/cxf-codegen-plugin2
				
				
				true
				
					
						
						src/main/resources/wsdl/userService.wsdl
						<!--http://localhost:8080/webservice/userService?wsdl-->
					
				
			
			
				wsdl2java
			
		
	

。

pom.xml · 汪少棠/ – 。

2、最后在命令行窗口执行命令:mvn – 即可自动生成。

公告:
1. 本站所有资源来源于用户上传和网络,如有侵权请联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系站长处理!
6. 本站不售卖代码,资源标价只是站长收集整理的辛苦费!如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
7. 站长QQ号码 2205675299

资源库 - 资源分享下载网 » WebService 根据 wsdl 文件生成 Java 代理类方式汇总

常见问题FAQ

关于资源售价和售后服务的说明?
本站所有资源的标价均为本站收集资源的辛苦费,不代表资源本身的价值。软件是高智慧高价值的商品,不可能是白菜价。本站资源标价只是赞助费用,收取的赞助费仅用来维持本站的日常运营!毕竟收集整理资料需要投入云计算资源和站长大量的精力。
代码有没有售后服务和技术支持?
由于代码的运行具有不可预见性,本站不保证代码完整可运行,不提供技术支持和售后服务。 本站原创代码都是站长自己开发的,可以有偿提供技术支持服务。 网站里标明【亲测】的代码都是站长亲测过的,其他的代码由于精力有限,没有一一测试,不能保证代码就一定能够使用,更没有技术支持服务,下载前请自行斟酌。
有没有搭建服务?
由于搭建服务比较费时费力,所以本站除了原创代码外均不提供搭建服务。本站分享代码纯属兴趣爱好,不以盈利为目的,请勿咨询有没有搭建服务,谢谢理解。
链接地址失效了怎么办?
请带上资源链接地址联系客服,工作时间内我们看到后将第一时间回复。
关于解压密码
本站资源一般都没有加密,如果发现需要解压密码的,那么就输入 hao.35dc.com 试试。

发表评论

资源库,由老程序员细心甄别、精心筛选,只为提供优质的源码资源

关于我们 联系我们