上一篇文章说的是直接用axis来进行webservice调用,这种方法比较原始,而且容易出错,比如你设置的返回类型如果和wsdl中定义的类型不同的话,就会抛出异常。其实,可以完全屏蔽对底层的操作,而把这些操作留给代理类去实现。代理类一般由开发工具生成,不如JBuilder,wsdl2java这些工具就可以根据wsdl文件生成对应的java类。这样操作代理类进行调用,就方便多了。这里用wsdl2java来举例,看看怎样通过代理调用webservice接口的。
1.获得wsdl2java
wsdl2java是axis2的一个工具,首先到http://ws.apache.org/axis2/download/1_3/download.cgi下载得到axis2的开发包。
2.通过wsdl2java
进入axis2/bin目录,运行wsdl2java -uri xxx.wsdl,这样,就会将wsdl文件转换为对应的java文件。其中包括一个Stub文件和一个CallbackHandler。
3.通过Stub调用webservice接口
public static void callWebService() ...
{
try ...{
//获得Stub实例
CopartnerServiceStub s = new CopartnerServiceStub();
CopartnerServiceStub.CheckUserService srv = new CopartnerServiceStub.CheckUserService();
//设置接口参数
srv.setUserId(WebServiceTest.USER_ID);
srv.setCheckCode(WebServiceTest.CHECK_CODE);
//得到返回值
CheckUserServiceResponse res = s.CheckUserService(srv);
ReturnValue ss = res.getCheckUserServiceResult();
System.out.println(ss.getDescript());
} catch (Exception e) ...{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
try ...{
//获得Stub实例
CopartnerServiceStub s = new CopartnerServiceStub();
CopartnerServiceStub.CheckUserService srv = new CopartnerServiceStub.CheckUserService();
//设置接口参数
srv.setUserId(WebServiceTest.USER_ID);
srv.setCheckCode(WebServiceTest.CHECK_CODE);
//得到返回值
CheckUserServiceResponse res = s.CheckUserService(srv);
ReturnValue ss = res.getCheckUserServiceResult();
System.out.println(ss.getDescript());
} catch (Exception e) ...{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
ok,这样比自己去操作soap要简单多了,而且不会出现soap异常。