最近在使用webservice做系统,同时自己需要调用别人的webservice获取相应的数据,自己总结了下,将关键代码整理如下,备以后使用。
第一种方法:采用RPCServiceClient调用service
首先创建一个存储访问webservice参数的类,模板如下:
public class CallServiceBean
{
private String targetEPR;
private Object[] parameters;
private Class<?>[] returnClasses;
private String action;
private String callMethod;
public String getCallMethod()
{
return callMethod;
}
public void setCallMethod(String callMethod)
{
this.callMethod = callMethod;
}
public String getTargetEPR()
{
return targetEPR;
}
public void setTargetEPR(String targetEPR)
{
this.targetEPR = targetEPR;
}
public Object[] getParameters()
{
return parameters;
}
public void setParameters(Object[] parameters)
{
this.parameters = parameters;
}
public Class<?>[] getReturnClasses()
{
return returnClasses;
}
public void setReturnClasses(Class<?>[] returnClasses)
{
this.returnClasses = returnClasses;
}
public String getAction()
{
return action;
}
public void setAction(String action)
{
this.action = action;
}
}
其次编写访问并接受service返回的参数的代码:
import org.apache.axis2.rpc.client.RPCServiceClient;
/**
* 组织webservice调用参数
* @param departmentCode
* @param password
* @param MaxDateTime
* @return
*/
public CallServiceBean getCallServiceBean(String departmentCode,String password,String MaxDateTime){
CallServiceBean callServiceBean = new CallServiceBean();
//wsdl地址
callServiceBean.setTargetEPR(http://127.0.0.1:5888/services/childService?wsdl);
//参数列表
callServiceBean.setParameters(new Object[]{departmentCode,password,MaxDateTime});
//调用的wsdl方法
callServiceBean.setCallMethod("downloadImmunization");
//设置接受service返回的参数类型
callServiceBean.setReturnClasses(new Class[]{DataHandler.class});
return callServiceBean;
}
/**
* 获取WebService数据
* callServiceBean 保存调用webservice的参数
*/
public Object[] callReturnService(CallServiceBean callServiceBean) {
try {
RPCServiceClient serviceClient = new RPCServiceClient();
Options options = serviceClient.getOptions();
// 指定调用 WebService的 URL
EndpointReference targetEPR = new EndpointReference(callServiceBean.getTargetEPR());
options.setTo(targetEPR);
if (null != callServiceBean.getAction()) {
options.setAction(callServiceBean.getAction());
}
//options.setTimeOutInMilliSeconds(80000000);
// 指定调用方法的参数值
Object[] opAddEntryArgs = callServiceBean.getParameters() == null ? new Object[] {} : callServiceBean.getParameters();
// 指定要调用的方法及 WSDL文件的命名空间
QName opAddEntry = new QName(Constants.NUL, callServiceBean.getCallMethod());
return serviceClient.invokeBlocking(opAddEntry, opAddEntryArgs, callServiceBean.getReturnClasses());
} catch (RemoteException e) {
e.printStackTrace();
//增加线程休眠
try {
Thread.sleep(5000);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
}
return null;
}
注意:这里的参数列表String departmentCode,String password,String MaxDateTime,自己可以根据自己的实际需要来定义。
第二种方法,采用cxf的代理工厂bean
代码如下:
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
JaxWsProxyFactoryBean jwpf = new JaxWsProxyFactoryBean();// 代理工厂Bean
jwpf.setServiceClass(IWsEhrIndexBO.class);
jwpf.setAddress("http://localhost:8080/WSReceiveData/services/ehrIndex");
IWsEhrIndexBO client = (IWsEhrIndexBO) jwpf.create();
EhrIndex ehrIndex = new EhrIndex();
ehrIndex.setEhrId("wme32613");
ehrIndex.setPatientId("58600820120423000001");
ehrIndex.setSystemCode("SZ000001-10");
ehrIndex.setCreateUnit("SZ586005");
List<EhrIndex> list = new ArrayList<EhrIndex>();
list.add(ehrIndex);
client.saveEhrIndex(list);
注意:如果有返回类型,可以采用cxf的客户端生成对应的接收参数的类来接收这个返回值(可以参见cxf官方文档说明),自己根据实际需要,从返回值中提取对自己有用的信息。
webservice客户端调用service的两种方法
猜你喜欢
转载自xiyuhanfei.iteye.com/blog/1607424
今日推荐
周排行