项目框架中要增加webservice的功能,引入了cxf2.7.6作为框架支持,为了加快客户端的编写,采用生成的方式通过wsdl生成客户端代码。
客户端代码自自动生成有三种方式:
The WSDL2Java tool will generate JAX-WS clients from your WSDL. You can run WSDL2java one of three ways: The command line The Maven Plugin With the WSDL2Java API
第一种通过wsdl2java命令行的形式测试通过,但通过java调用外部命令总是有环境变量的问题还要配置相应工具路径等操作,比较麻烦。
第二种通过Maven Plugin生成,对Maven不熟悉,跳过
第三种通过WSDL2Java API生成,在网上百度谷歌的搜索了半天,没有这样的文章,也没有这么做的,可能是方法太过偏激了。但为了框架中可以保证开发人员对webservice的使用可以快速上手,便花了很长时间研究这个事儿,后来在wsdl2java.bat中找到解决办法。
解决办法如下:
1. 工具类:
import java.net.URLDecoder; import java.util.Locale; import java.util.ResourceBundle; import org.apache.cxf.tools.common.ToolContext; import org.apache.cxf.tools.wsdlto.WSDLToJava; /** * @desc 客户端代码生成工具类 * @version v1.0, 2013-12-11 */ public class ClientCodeGenerator { public static void main(String[] args) throws Exception { ClientCodeGenerator.generateClient(); } public static void generateClient() { try { System.out.println("---------------client code generate starting.--------------"); String properties = "com.apps.mymis.demo.webservice.client.wsdl2java.ws-client-config"; ResourceBundle rb = ResourceBundle.getBundle(properties, Locale.getDefault()); String serviceWsdlUrl = rb.getString("ws.client.serviceWSDLUrl"); String stubcodeTargetPath = rb.getString("ws.client.stubCodeTargetPath"); String async = rb.getString("ws.client.async"); System.out.println("---------------service WSDL URL is " + serviceWsdlUrl + ".--------------"); System.out.println("---------------client code save at " + stubcodeTargetPath + ".--------------"); WSDLToJava w2j = null; String bindingPath = URLDecoder.decode(ClientCodeGenerator.class.getResource("").getPath()).substring(1) + "anyc_binding.xml"; System.out.println(bindingPath); if ("true".equals(async)) w2j = new WSDLToJava(new String[] { "-client", "-d", stubcodeTargetPath, "-b", bindingPath, serviceWsdlUrl }); else w2j = new WSDLToJava(new String[] { "-client", "-d", stubcodeTargetPath, serviceWsdlUrl }); w2j.run(new ToolContext()); System.out.println("---------------client code generate finished.--------------"); } catch (Exception e) { e.printStackTrace(); } } }
2. 配置文件 ws-client-config.properties
#服务端wsdl文件本地路径或者wsdl地址 ws.client.serviceWSDLUrl=http://127.0.0.1:8080/test/service/TestAyncService?wsdl #客户端代码需要存储的位置 ws.client.stubCodeTargetPath=c\: #是否生成异步代码 ws.client.async=false
3. anyc_binding.xml 用于生成异步客户端代码的配置文件(可无视,与此主题无关)
<bindings xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" wsdlLocation="http://127.0.0.1:8080/test/service/TestAyncService?wsdl" xmlns="http://java.sun.com/xml/ns/jaxws"> <bindings node="wsdl:definitions"> <enableAsyncMapping>true</enableAsyncMapping> </bindings> </bindings>
执行java工具类即可生成客户端代码。
PS:org.apache.cxf.tools.wsdlto.WSDLToJava类的参数与wsdl2java命令的参数格式相同
相关推荐
使用cxf wsdl2java生成webservice客户端命令
利用wsdl2java工具和SoapUI工具生成webservice的客户端代码 Java实现登陆验证调用 压缩包里包括需要的所有文件,供需要的同学使用 1.apache-cxf-3.3.7 2.SoapUI 5.4.0-EB 3.生成代码的教程 4.获取service调用的...
1、配置环境变量:新建CXF_HOME D...3、生成客户端:wsdl2java -d C:\Users\ASUS\Desktop\生成的代码存放地址 -encoding utf-8 -p com.jeiao.boss.生成后代码的包名 http://xxx.xxx.xxx.xxx:xxxx/service/接口地址?wsdl
详细介绍3种方法根据wsdl逆向生成webservice服务端;有最原始的wsdl2java指令,还有通过soapUI工具以及通过myeclipse的web service project来生成。
cxf java代码生成 wsdl文件 ,wsdl文件生成 java代码,相关博文: http://blog.csdn.net/dream_broken/article/details/35331949
cxf自动生成webservice客户端,apache-cxf-2.7.18最稳定的版本 apache cxf 框架wsdl2java命令的使用。 -encoding是指定编码类型; -p 指定包名 -d 指定生成目录 -all生成服务端和客户端代码 -...
抛出无法找到主类:org.apache.axis.wsdl.WSDL2Java(Throws Could not find main class: org.apache.axis.wsdl.WSDL2Java)。 添加本文的jar包压缩包解压出来的所有jar包到当前使用的java.exe 命令的lib目录下的ext...
通过wsdl2java的命令生成客户端代码 进入dos窗口,进入apache-cxf-2.3.1\bin所在的目录,输入指令: wsdl2java -p com.jaxb.client -d ../src -all E:\webService\***.xml (你的wsdl文件或者xml文件) 命令...
Eclipse根据wsdl文件自动生成webservice client图解,以及调用示例,附测试项目。源码示例,包括两个wsdl文件
利用注解修改webservice生成wsdl的服务名称,命名空间,返回值,调用方法。加强安全性。代码完整,包括服务端和客户端两个项目
wsdl反向生成工具,可以根据wsdl文档反向生成webService客户端
使用cxf生成webservice,包括客户端和服务器端,非常好用
例子中包含cxf的jar包,在调用服务器端方法时,首先要在cmd中,通过wsdl生成服务器端的接口、接口实现类等相关的javal类。 cmd WSDL2JAVA http://IP:8080/项目名/服务器端设置好的调用方法?方法名 如:wsdl2java ...
java CXF客户端请求ERP SAP webservice通过用户名和密码验证功能!
通过wsdl文件生成服务器端代码并部署 最近对接联通VAC,对方给了个文档和WSDL文件,目的要通过WSDL约束生成服务器端框架;通过几天折腾,找到一种解决方案是通过Axis1框架; 由于联通提供WSDL版本旧(2009),尝试过...
cxf发布webservice,通过wsdl2java生成客户端,然后调用服务
Webservice接口,Cxf写的客户端, 是java项目,直接main方法运行. 开发环境:32位jdk1.7+Cxf3.1.4+tomcat7, 开发工具:myeclipse8.5. 成功访问服务端,并传送参数。测试通过。
根据wsdl文件生成webservice客户端代码
2、将cxf_jar包文件夹下所有包,拷至MyCXFService与MyCXFClient项目WebRoot\WEB-INF\lib\cxf_2.7.8 目录下(注意:两个项目都需要这些jar包) 3、将两个项目都导入myEclipse 4、将MyCXFService与MyCXFClient 一起...