基于wsdl 文件的webService接口开发
准备工作:①、首先我们要下载:axis2-1.4.1-war(发布webservice),axis2-1.4.1-bin.zip(webservice调用使用的各种包)。②、要配置环境变量:AXIS2_HOME ? ? 1、Axis2提供了一个wsdl2java.bat命令可以根据WSDL文件自动产生调用WebService的代码。wsdl2java.bat命令可以在<Axis2安装目录>"bin目录中找到。在使用wsdl2java.bat命令之前需要设置AXIS2_HOME环境变量,该变量值是<Axis2安装目录>。 2、我们通过命令行工具?来实现这个?首先我们到该文件下面的bin目录,如: 然后开始工作:运行该命令:wsdl2java?-uri?http://localhost:8080/axis2/services/SimpleService?wsdl?-p?com.tl.test?-s?-o?stub 解释:-uri?后面运行的是?你的wsdl,?-p?是文件生成的包名?-o?stub生成的文件目录,是bin目录下面的 运行结果如下: ? 这样?你就可以在你的bin里面下面找到你要的文件了 如下面: ? ? 然后?你就可以把这个类?拷贝到你的工程下面使用了,主要包名,我这里是com.tl.test,所以你相应的在你的工程下面建一个com.tl.test, 如下面: 最后,我们就可以建立一个类来测试,代码如下面: ? ?... package?com.tl.test; ? ? //这样的方法大大的减少了调用webservice的步骤,并且代码更加简介。但要注意的是,wsdl2java.bat命令生成stub类将 //webservice方法的参数都封装在相应的类中。 public?class?StubClient?{ public?static?void?main(String[]?args)?throws?Exception?{ SimpleServiceStub?sss?=?new?SimpleServiceStub(); //封装getGreeting方法的参数 SimpleServiceStub.GetGreeting?gg?=?new?SimpleServiceStub.GetGreeting(); gg.setName("王武"); System.out.println(sss.getGreeting(gg).get_return()); System.out.println(sss.getPrice().get_return()); } ? } ? ? 运行效果如下: ? 上面的代码大大简化了调用WebService的步骤,并使代码更加简洁。但要注意的是,wsdl2java.bat命令生成的Stub类将WebService方法的参数都封装在了相应的类中,类名为方法名,例如,getGreeting方法的参数都封装在了GetGreeting类中,要想调用getGreeting方法,必须先创建GetGreeting类的对象实例。 补充 : 一.实际的WSDL文件生成代码较为复杂,要弄清楚对生成代码方法的调用,实际使用: 1、获取webService接口类实例? 2、调用发送webService传输对象的方法 3、调用生成webService传输对象的方法 4、调用生成webService对象(发送实体)方法 5、调用webService对象方法(set) 二.实际使用中出现问题及解决。 1、实际使用中webService服务端都会设置访问权限,此时需要添加获取访问权限 _serviceClient = new org.apache.axis2.client.ServiceClient(configurationContext,_service); //有时即使我们注册了用户信息获取了权限,仍然会报错,如下: //2014-7-14 12:48:24 org.apache.commons.httpclient.auth.AuthChallengeProcessor selectAuthScheme //该信息是要我们选择身份验证方案 ? ?//basicauth.setHost("XXX.XXX.XXX.XXX"); 把项目部署到tomcat上时,会出现: - Unable to sendViaPost to url java.net.SocketTimeoutException: Read timed out? 错误,通过设置存根每个方法的超时时间来解决。
解决办法:
在存根业务调用代码中进行设置,添加: _operationClient.getOptions().setTimeOutInMilliSeconds(600000L); _operationClient表示一个客户端对象。
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |