加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

基于wsdl 文件的webService接口开发

发布时间:2020-12-16 23:36:19 所属栏目:安全 来源:网络整理
导读:准备工作:①、首先我们要下载:axis2-1.4.1-war(发布webservice),axis2-1.4.1-bin.zip(webservice调用使用的各种包)。②、 要配置环境变量: AXIS2_HOME ? ? 1、Axis2提供了一个wsdl2java.bat命令可以根据WSDL文件自动产生调用WebService的代码。wsdl2ja

准备工作:①、首先我们要下载: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);
? ? ? ?
? ? ? ? HttpTransportProperties.Authenticator basicauth = new HttpTransportProperties.Authenticator();
basicauth.setUsername("NWPCPIC"); ??//注册用户
? ?basicauth.setPassword("Nwpcpic2014");?//注册用户

//有时即使我们注册了用户信息获取了权限,仍然会报错,如下:

//2014-7-14 12:48:24 org.apache.commons.httpclient.auth.AuthChallengeProcessor selectAuthScheme
//信息: basic authentication scheme selected

//该信息是要我们选择身份验证方案
? ? //basicauth.setPreemptiveAuthentication(true);//设置为优先认证

? ?//basicauth.setHost("XXX.XXX.XXX.XXX");
? ?// basicauth.setDomain("XXX.XXX.XXX.XXX");
? ?_serviceClient.getOptions().setProperty(HTTPConstants.AUTHENTICATE,basicauth);

把项目部署到tomcat上时,会出现:

- Unable to sendViaPost to url

java.net.SocketTimeoutException: Read timed out?

错误,通过设置存根每个方法的超时时间来解决。


解决办法:
在存根业务调用代码中进行设置,添加: _operationClient.getOptions().setTimeOutInMilliSeconds(600000L); _operationClient表示一个客户端对象。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读