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

转载于:https://www.cnblogs.com/zhaock/archive/2013/01/11/8353238.html

webservice发布及远程调用相关推荐

  1. webservice java接口远程调用

    webservice 例如:java接口远程调用 文章目录 webservice 一.使用步骤 1引入Maven依赖 2.读入数据 总结 一.使用步骤 1引入Maven依赖 <!-- axis ...

  2. 为什么添加Web引用后,客户端就能远程调用WebService了?

    前言 好多人会写WebService也会远程调用WebService,调用前必须先添加WebReferences才行,可有多少人知道为什么添加引用后就能访问了呢?肯定有人会说只要能调用就行了,不必关心 ...

  3. RCF--RPC(远程调用框架)

    RPC(远程调用框架) 一. RPC定义 RPC(Remote Procedure Call Protocol)--远程过程调用协议,是一种通过网络从远程计算机请求服务,就像调用本地方法一样,不需要了 ...

  4. Java远程调用WebService接口

    WebService简介 Web Service技术, 能使得运行在不同机器上的不同应用无须借助附加的.专门的第三方软件或硬件, 就可相互交换数据或集成.依据Web Service规范实施的应用之间, ...

  5. C#动态调用web服务 远程调用技术WebService

    一.课程介绍 一位伟大的讲师曾经说过一句话:事物存在即合理!意思就是说:任何存在的事物都有其存在的原因,存在的一切事物都可以找到其存在的理由,我们应当把焦点放在因果关联的本质上.所以在本次分享课开课之 ...

  6. WebService 远程调用方法汇总

    WebService 远程调用方法汇总 一.Web Service 二.REST 三.RPC 一.Web Service webservice 即web服务,它是一种跨编程语言和跨操作系统平台的远程调 ...

  7. WebService远程调用技术

    Web Service--也叫XML Web Service WebService,是一种跨编程语言和跨操作系统平台的远程调用技术. 各个应用程序之间的交流就需要Web Service来作为相互交流的 ...

  8. Java实现的简单的WebService服务发布和Client调用例子

    做大作业,要求用到WS,在网上看了看,自己写了一个,很简单的服务发布和Client调用例子. WebService有很多实现的方式,但是原理基本都是一样的,都是基于SOA的三角模型,所以重点在于理解了 ...

  9. C# WebService发布与调用方法(转)

    Web Service是可操作的分布式应用程序.它以SOAP作为基本通信协议,使用HTTP和XML进行可以穿越防火墙的自由通信. 错误提示: * 出现 访问 IIS 元数据库失败 * iis 无法显示 ...

最新文章

  1. querySelector querySelectorAll
  2. 用区块链变革教育行业?全球首个教育+旅行+区块链平台——Ambertime:让每个人都能够将时间凝结成自己专属的“琥珀”...
  3. POJ 3469 Dual Core CPU (最小割建模)
  4. mysql半复制_mysql半同步复制
  5. 实验楼python挑战答案_python基础知识
  6. 元宵节正月十五主题海报还没设计好,PSD分层模板来喽!
  7. paip.mysql备份慢的解决
  8. vs2005 编码转换后编译的时候会出错,”error c101008a“,处理方法
  9. vs2017安装勾选哪些_医学图像处理 VS2017配置ITK
  10. Java批量下载有道单词发音+与Anki卡片整合
  11. 黑马程序员—银行调度系统
  12. Android ROS开发环境搭建
  13. 2017全国一线城市二线三线四线五线城市名单【最新完整榜单】
  14. 帝国源码php安装文件是哪个,帝国CMS数据库配置文件是哪个文件?
  15. 7人制足球技战术要点
  16. 嵌入式开发模拟红外测距仪---UDP通信实现无线装置
  17. LINUX 导入pfx证书
  18. 半导体物理复习总结(五)——非平衡载流子
  19. hover在两种情况下的两种用法
  20. 作文提升~老师整理的优美比喻句太实用

热门文章

  1. 使用gdb调试运行时的程序小技巧 -转
  2. Linux 编译时查找错误字符,编译Linux内核时出现“fatal error: linux/netfilter/xt_dscp: No such file or directory”...
  3. 蓝桥杯 ALGO-21算法训练 装箱问题 java版
  4. Zipkin分布式任务追踪
  5. JS查漏补缺(自用版)
  6. Java编程解密-Dubbo负载均衡与集群容错机制
  7. FFMPEG增加和提取字幕流
  8. Google发布Puppeteer 1.0
  9. C++ 推断进程是否存在
  10. [Android Pro] app_process command in Android