Web Services是由企业发布的完成其特定商务需求的在线应用服务,其他公司或应用软件能够通过Internet来访问并使用这项在线服务。用简单点的话说,就是系统对外的接口!
Web Service是现在最适合实现SOA的技术,而Axis2和XFire是实现Web Service的两种技术框架(架构)。
SOA是面向服务的体系结构(Service-Oriented
Architecture,SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种各样的系统中的服务可以使用一种统一和通用的方式进行交互。
相对于Axis来说,目前XFire相对受欢迎,加上其提供了和Spring集成的支持,在目前的Web
Service开源社区拥有众多的追随者。
XFire是codeHaus组织提供的一个开源框架,它构建了POJO和SOA之间的桥梁,主要特性就是支持将POJO通过非常简单的方式发布成Web服务,这种处理方式不仅充分发挥了POJO的作用,简化了Java应用转化为Web服务的步骤和过程,也直接降低了SOA的实现难度,为企业转向SOA架构提供了一种简单可行的方式。
服务器端发布Webservice接口
在你的项目web.xml文件中,增加以下配置
<servlet>
<servlet-name>xfire</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>xfire</servlet-name>
<url-pattern>*.ws</url-pattern>
</servlet-mapping>
<servlet>
<!-- 配合Spring容器中XFire一起工作的Servlet-->
<servlet-name>xfireServlet</servlet-name>
<servlet-class>org.codehaus.xfire.spring.XFireSpringServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>xfireServlet</servlet-name>
<!-- 在这个URI下开放Web Service服务 -->
<url-pattern>/service/*</url-pattern>
</servlet-mapping>
定义HelloWorld接口和其实现类HelloWorldImpl,实现sayHello方法。
publicclass HelloWorldImpl implements HelloWorld {
public String sayHello(String name) {
String helloWorld = "hello," + name;
return helloWorld;
}
}
XFire为Spring提供了方便易用的导出器XFireExporter,借助该导出器的支持,我们可以在Spring容器中将一个POJO导出为Web Service。HelloWorld是业务服务类,在此拥有一个sayHello的方法,我们希望将此方法开放为Web Service。(POJO,Plain Old Java Object,简单Java对象)
在xfire-servlet.xml文件中导出器的设置,该文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!-- 引入XFire预配置信息 -->
<import resource="classpath:org/codehaus/xfire/spring/xfire.xml" />
<!-- 使用XFire导出器 -->
<bean id="baseWebService" class="org.codehaus.xfire.spring.remoting.XFireExporter" lazy-init="false" abstract="true">
<!-- 引用xfire.xml中定义的工厂 -->
<property name="serviceFactory" ref="xfire.serviceFactory" />
<!-- 引用xfire.xml中的xfire实例 -->
<property name="xfire" ref="xfire" />
</bean>
<bean id="HelloWorldService" parent="baseWebService">
<!-- 业务服务bean -->
<property name="serviceBean" ref="HelloWorldBean" />
<!-- 业务服务bean的窄接口类 -->
<property name="serviceClass" value="webservice.HelloWorld" />
</bean>
</beans>
当然自己的业务HelloWorldBean也需要配置下,在applicationContext.xml中,在此不细说。
<bean id="HelloWorldBean" class="com.webservice.HelloWorldImpl">
</bean>
在实际应用中,如果某个类具有众多的方法,而其中的某些方法不需要开放为Web Service的情况下,我们可以定义一个窄接口,该接口中只需定义那些开放为Web Service的业务方法。就是上述配置文件中的<property name="serviceClass" value="webservice.HelloWorld" />。
此时webservice的配置已经全部完成,可以通过访问http://localhost:8080/projectName/HelloWorldService.ws?wsdl来查看发布的WSDl文档。
远程调用webservice
使用XFire
Client client = new Client(new URL("http://localhost:8080/projectName/service/HelloWorld?wsdl"));
/**
*invoke参数解析
*param1:调用服务方发布接口中的方法名
*param2:参数数组,可以传递多个参数,但是接口会根据实际需要参数从数组中一次取得(顺序)
*/
String str = "XFile";
Object[] obj = client.invoke("sayHello", new String[]{str});
String result =
obj[0].toString();
System.out.println(result);
使用Axis2
String url = "http://localhost:8080/projectName/service/HelloWorld";
Service server = new Service();
Call call = (Call)
server.createCall();
call.setTargetEndpointAddress(new URL(url));
String result = (String) call.invoke("sayHello", new String[]{"Axis2"});
System.out.println(result);
客户端调用webservice的方法网上有很多例子,在我的项目中也没有用到,在此就不多说了。
升级版的CXF还没用过,以后用到的时候再研究下。
该文章有一部分来自于:http://www.blogjava.net/amigoxie/archive/2007/09/26/148207.html
分享到:
相关推荐
这就是Spring框架实现远程调用服务端接口以实现WebService功能的基本流程。由于HttpInvoker基于HTTP,它天生具备良好的网络穿透能力,适合于分布式系统中的跨网络通信。同时,由于使用了Java序列化,它的性能相对较...
`WebMethod`特性标记表示该方法可以被远程调用。 3. **业务逻辑层(BLL)**: - BLL是应用程序的核心,处理业务规则和数据验证。在BLL层,你可以封装对WebService的调用,如`PaymentBLL.cs`: ```csharp public...
LabVIEW 调用WebService 访问远程数据 在本篇文章中,我们将讨论如何使用 LabVIEW 调用 WebService 来访问远程数据。首先,我们需要了解为什么需要使用 WebService 来访问远程数据。传统的方法是使用链接字符串连接...
调用远程wadl的Webservice代码,请求参数是json,返回结果通过main方法打印
webservice远程调用,返回String数据并生成xml文件到本地工程,在通过SAX解析器把数据解析出来。这是webservice应用的一个简单的例子。根据该例子的思想,可以实现很多功能了。例如把client工程的sayHello方法改为...
WebService 远程调用报错设置 在 WebService 远程调用时,可能会出现一些报错设置问题,本文将对这些问题进行详细的分析和解决。 错误信息:“测试窗体只能用于来自本地计算机的请求” 在 WebService 远程调用时...
AXIS2远程调用WebService是Java开发者在进行分布式服务交互时常用的一种技术。本文将详细介绍如何使用Eclipse集成开发环境和AXIS2框架创建并调用WebService。首先,我们需要准备以下基础工具: 1. Eclipse IDE:这...
这些存根类提供了与服务交互的方法,使得开发者可以像调用本地方法一样调用远程服务。 2. CXF:Apache CXF是一个全面的服务开发框架,支持SOAP和RESTful风格的Web服务。相比于Axis,CXF提供了更现代的API和更好的...
Web服务通常基于SOAP(Simple Object Access Protocol)协议,这是一种使用XML来交换数据的协议,广泛应用于系统之间的远程过程调用。 【SOAP调用工具】 SOAP调用工具,如标题中的Webservice Studio 2.0,是专门...
在本文中,我们将重点关注使用Web服务(WebService)作为远程调用的一种实现方式,以及如何通过代码追踪理解其工作原理。 首先,Web服务是基于开放标准如SOAP(Simple Object Access Protocol)和HTTP(超文本传输...
WebService提供了通过HTTP协议进行远程过程调用的能力,使得不同应用程序之间能够进行数据交换与通信。其中,HttpClient作为一种常用的Java库,被广泛用于发送HTTP请求并接收响应。本文将详细介绍如何使用HttpClient...
WebService 是一种基于 XML 的远程过程调用(RPC)协议,使用 SOAP(Simple Object Access Protocol)作为数据传输协议。SOAP 是一种简单有效的数据传输协议,用于分布式网络环境下数据信息交换,它以 XML 作为数据...
Web Service 远程调用技术 Web Service 是一种跨编程语言和跨操作系统平台的远程调用技术,通过 SOAP 在 Web 上提供的软件服务,使用 WSDL 文件进行说明,并通过 UDDI 进行注册。XML 是 Web Service 的基础,它是...
### BCB调用WebService方法详解及常见问题排查 #### 一、引言 在现代软件开发中,跨平台服务通信已成为一种常态。其中,WebService作为一种常见的远程服务调用方式,在不同语言之间进行交互时扮演着重要的角色。...
WebService是一种开放标准协议,用于在网络上交换数据和执行远程过程调用。WebService可以通过HTTP协议进行通信,并且通常使用XML作为数据格式。WebService的一个主要优势在于它的平台无关性,这意味着无论客户端和...
当我们谈论“webservice8 异步调用webservice”时,这通常指的是在Axis2框架下,使用RPCServiceClient类的invokeNonBlocking方法来实现Web服务的异步调用。 传统的同步调用方式会导致客户端程序在等待服务响应期间...
Web服务是基于SOAP的,它们通过HTTP协议提供远程调用功能,使得不同平台的应用程序能够相互通信。 二、.NET中的Web服务调用方式 1. 使用SoapHttpClientProtocol:在.NET Framework的早期版本中,我们可以使用...
总之,"webservice远程调用与cxf框架共26页.pdf"文档很可能会深入讲解如何使用CXF框架来创建和使用Web服务,包括SOAP和RESTful服务的创建、配置、测试和优化。这份资料对于理解和应用CXF框架以及理解Web服务远程调用...
1. **Web Service**:一种跨编程语言和操作系统平台的远程调用技术,它通过HTTP协议提供服务,可以被任何其他系统调用。 2. **SOAP(Simple Object Access Protocol)**:一种轻量级协议用于交换结构化的信息,常...
在 EzoneService 中,我们定义了一个名为 HelloWorld 的方法,该方法使用 [WebMethod] 属性指定了该方法可以被远程调用。HelloWorld 方法返回一个字符串 "Hello World"。 在客户端,我们可以使用 ConsoleApp 来调用...