最近在使用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官方文档说明),自己根据实际需要,从返回值中提取对自己有用的信息。
分享到:
相关推荐
本教程将讲解如何使用Spring Boot集成Apache CXF(一个强大的Java Web Service框架)来构建服务端,并探讨两种Java客户端调用Web Service接口的方法。 首先,我们需要理解Spring Boot与CXF的整合。Spring Boot通过...
创建一个WebService服务端,首先需要定义服务接口,这个接口会包含一些公开的方法,供客户端调用。在Java中,可以使用JAX-WS(Java API for XML Web Services)框架来实现。服务端主要包含以下步骤: - 定义服务...
在这个场景下,"Xfire客户端调用webservice jar包"是指Xfire客户端为了实现某些功能,如获取服务器数据或更新信息,需要调用Web服务的接口。这些接口通常以Java的jar包形式提供,方便开发者集成到他们的应用中。 ...
在本案例中,文件`ws_client03`可能包含了客户端调用WebService的代码示例,而`ws_server`则可能是WebService的服务端实现。通常,服务器端代码会定义服务接口和实现,然后通过一个容器(如Tomcat)部署,使其可以...
这两种技术都可以创建SOAP(Simple Object Access Protocol)和RESTful类型的WebService,后者更倾向于使用Json进行数据传输。 二、C# WebService客户端 1. ASMX客户端:在C#中调用一个ASMX WebService,可以通过`...
在本文中,我们将重点关注CXF客户端调用Web服务的方法,特别是处理Map类型参数的问题。 首先,CXF客户端调用Web服务时,通常会通过服务接口类来实现。在给出的示例中,`TestService`接口定义了几个服务方法,如`...
7. **调用Web服务**:客户端通过实例化服务代理类并调用其方法来发起请求。请求被封装成SOAP消息,然后通过HTTP或HTTPS发送到服务端。服务端处理请求后,返回响应,客户端解析响应内容并进行后续处理。 8. **异常...
CXF提供了两种开发方法:WSDL-First和Code-First。WSDL-First方法首先编写WSDL文件,然后从WSDL文件生成服务桩、调用桩和部分服务代码。Code-First方法首先实现服务,然后抽象出服务的远程调用接口,然后利用CXF生成...
在本文中,我们将探讨XFire与Spring框架集成以实现WebService客户端的两种开发方式。XFire是一个流行的Java Web服务实现库,而Spring是一个广泛使用的应用程序框架,可以方便地管理和配置Web服务客户端。 ### 方式...
这两种方法各有特点,适用于不同的场景。 静态调用是通过在项目中添加Web引用或者服务引用来实现的。这种调用方式在编译时就已经确定了服务接口,因此也被称为强类型调用。在.NET环境中,例如使用C#或VB.NET开发时...
Web Service 技术为跨平台数据交互提供了一种标准的方法,而 Delphi 和 Java 作为两种广泛使用的开发工具,均提供了丰富的支持来简化 Web Service 的开发过程。通过本文介绍的理论和技术,开发者可以更好地理解和...
【WebService五种发布方式及客户端调用】 在IT行业中,WebService是一种基于标准的、平台无关的通信机制,用于不同系统间的数据交换。本篇主要讨论的是使用CXF和Axis2两种方式来发布WebService以及客户端如何调用...
Web Service是一种基于XML(可扩展标记语言)的标准化方法,用于在不同应用程序之间共享数据和服务。它通过SOAP(简单对象访问协议)进行通信,SOAP消息通常封装在HTTP请求中,使得跨网络的通信变得更加便捷。 在...
WebService接口调用工具类是Java开发中常见的一种技术,用于与远程服务进行通信,尤其在集成不同系统或服务时非常关键。在这个场景中,"webservice接口调用工具类依赖jar包"指的是为了实现对WebService接口的调用,...
在本文中,我们将深入探讨如何使用Delphi 2007创建一个Webservice客户端,以便调用远程Web服务并处理返回的数据。Web服务通常使用SOAP(简单对象访问协议)进行通信,允许不同平台的应用程序之间交换数据。 首先,...
4. **多种编程模型**:Axis2提供了两种编程模型,即服务 Archive (SAR) 和Web Application Archive (WAR),分别适合于简单的服务和复杂的企业级应用。 5. **工具集**:Axis2提供了一整套工具,如wsdl2java用于生成...
Web服务(WebService)是一种基于标准协议的,可互操作的软件接口,允许不同系统之间进行数据交换和功能调用。在本案例中,我们将重点讨论如何使用Axis框架来调用Web服务并传递参数。 首先,我们需要理解Web服务的...
- **注意**:`client` 和 `client2` 是两种访问 Web 服务的方法,效果相同。 **第七步:编写客户端主类** 1. 在 src 目录下新建一个名为 `Client.java` 的 Java 类。 2. 示例代码如下: ```java import java.util...
Web服务的实现通常遵循SOAP(Simple Object Access Protocol)或REST(Representational State Transfer)两种主要架构风格。SOAP是一种基于XML的协议,主要用于在分布式环境中交换结构化的、机器可读的数据。而REST...
3. **客户端调用流程**: - **获取WSDL**:首先,客户端需要知道服务的WSDL地址,这是服务的接口定义,包含了服务的端点地址、操作方法和输入/输出参数。 - **生成Stub**:使用工具(如JAXB或 wsimport 命令)根据...