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框架的javaEE平台,出自spring的HttpInvokerServiceExporter导出器,依赖Spring.jar
labview调用webservice访问远程数据1
调用远程wadl的Webservice代码,请求参数是json,返回结果通过main方法打印
webservice远程调用,返回String数据并生成xml文件到本地工程,在通过SAX解析器把数据解析出来。这是webservice应用的一个简单的例子。根据该例子的思想,可以实现很多功能了。例如把client工程的sayHello方法改为...
远程调用技术代码追踪(webservice).doc 之一
webService远程调用报错设置.doc
webservice远程调用与cxf框架共26页.pdf.zip
文档包括JDK开发webservice、web项目发布、使用Axis2框架实现webservice等内容
C# webservice 服务调用工具类。 此工具 对 post get 请求进行了封装,只需要传递对应的URL以及参数即可返回JSON 或者XML 的字符串。 是非常有用的调用远程接口的服务类。 webservice
java项目简单模拟soap型的webservice远程调用服务,内附使用说明文档方便学习和查阅,让你轻松学会soap-webservice的使用方法!
用eclipse+myeclipse 开发webservice步骤和客户端调用实例.
简单的理解就是:webservice 就是放在服务器上的函数,所有人都可以调用,然后返回信息。 比如google就有一个web service ,你调用它就可以很容易的做一个搜索网站。 就像调用函数一样,传入若干参数(比如关键字、...
这是一份DELPHI的webservice 远程调用例子,里面有详细文档介绍和代码,可以作为参考看看。
基于Soap协议的远程WebService服务的三种调用方式,根据WebService服务的发布方式自行选择用哪种方法。
java项目REST方式使用Jersey技术实现webservice远程调用,内附使用说明文档和Jersey包,方便学习和查阅,最重要的是我的资源优势就是物美价廉哟~~
远程调用技术代码追踪之WebService DOC文档
远程调用技术代码追踪之Webservice.doc
AXIS2远程调用WebService示例(Eclipse+AXIS2)工具和所用包 包括eclipse tomcat axis2 java直接到官网下载jre和jdk1.8版本即可
客户端调用webservice所需完整jar包,可用,客户端调用webservice所需完整jar包,可用