JAVA之WebService框架---Xfire全解
- 格式:doc
- 大小:552.55 KB
- 文档页数:17
使用XFire开发webservice服务和客户端全攻略收藏XFire 是与Axis 2并列的新一代Web Service框架,通过提供简单的API支持Web Service 各项标准协议,帮助你方便快速地开发Web Service应用。
相对于Axis来说,目前XFire相对受欢迎,加上其提供了和Spring集成的支持,在目前的Web Service开源社区拥有众多的追随者。
并且因为XFire为Spring提供的支持,使得我们可以很容易在Spring中使用XFire构建Web Service应用。
XFire 与Axis2相比具有如下特征:l 支持一系列Web Service的新标准--JSR181、WSDL2.0 、JAXB2、WS-Security 等;l 使用Stax解释XML,性能有了质的提高。
XFire采用Woodstox 作Stax实现;l 容易上手,可以方便快速地从pojo发布服务;l 支持Spring、Pico、Plexus、Loom等容器;l 灵活的Binding机制,包括默认的Aegis,xmlbeans,jaxb2,castor;l 高性能的SOAP 栈设计;l 支持Spring、Pico、Plexus、Loom等容器。
XFire 与Axis1性能的比较如下:l XFire 比Axis1.3快2-6倍;l XFire 的响应时间是Axis1.3的1/2到1/5。
XFire 在WebService框架中开始较晚,它从现有的框架中借鉴了许多优秀的理念,力争将Web Service的应用开发难度降到最低。
此外,还提供了各种绑定技术、支持多种传输协议,对WebService体系中许多新的规范提供了支持。
下面让我们来看一个XFire于Spring集成的helloWorld的简单例子。
一.实现的功能和特点本例具有如下功能和特点:1)基于J2EE平台的Web Service服务;2)开发方便,配置简单;3)与spring无缝集成。
目录一使用Axis和XFire发布Web Service (2)1.1 准备工作 (2)1.1.1 新建工程 (2)1.1.2 axis依赖文件 (3)1.1.3 XFire依赖文件 (3)1.2 Axis发布Web Service (4)1.2.1 传递简单数据类型的Web Service (4)1.2.2 带自定义对象传递的Web Service (8)1.3 XFire发布Web Services (10)1.3.1 传递简单数据类型的Web Service (10)1.3.2传递复杂数据类型的Web Service (12)附录: 1Server的结构 (16)二调用Web Services (17)2.1 准备工作 (17)2.1.1 新建工程 (17)2.1.2 启动Tomcat上发布的1Server服务 (17)2.2 Axis发布的Web Service调用方式 (18)2.2.1 Dynamic Invocation Interface (DII)方式 (18)2.2.2 Dynamic Proxy方式 (19)2.2.3 Stubs方式 (20)2.3调用XFire发布的Web Service (22)2.3.1服务以jar包形式发布的时候直接调用 (23)2.3.2 使用Axis的Client包 (23)2.3.3 使用Xfire的Client包 (24)附录2:2Client目录结构 (31)一使用Axis和XFire发布Web Service 1.1 准备工作Axis主页:/Axis下载:/dist/ws/XFire主页:/XFire下载:/Download去以上站点下载axis最新包和XFire最新包,包内有axis和XFire依赖的其他jar包。
1.1.1 新建工程1.1.2 axis依赖文件1.1.3 XFire依赖文件1.2 Axis发布Web Service1.2.1 传递简单数据类型的Web Service1.把Axis依赖的jar包放入lib文件夹下.2.在web.xml中加入如下:<!-- ****************** axis ws start ****************** --> <listener><listener-class>org.apache.axis.transport.http.AxisHTTPSessionListener </listener-class></listener><servlet><servlet-name>AxisServlet</servlet-name><servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class></servlet><servlet><servlet-name>AdminServlet</servlet-name><servlet-class>org.apache.axis.transport.http.AdminServlet</servlet-class><load-on-startup>100</load-on-startup></servlet><servlet><servlet-name>SOAPMonitorService</servlet-name><servlet-class>org.apache.axis.monitor.SOAPMonitorService</servlet-class><init-param><param-name>SOAPMonitorPort</param-name><param-value>5001</param-value></init-param><load-on-startup>100</load-on-startup></servlet><servlet-mapping><servlet-name>AxisServlet</servlet-name><url-pattern>/servlet/AxisServlet</url-pattern></servlet-mapping><servlet-mapping><servlet-name>AxisServlet</servlet-name><url-pattern>*.jws</url-pattern></servlet-mapping><servlet-mapping><servlet-name>AxisServlet</servlet-name><url-pattern>/services/*</url-pattern></servlet-mapping><servlet-mapping><servlet-name>SOAPMonitorService</servlet-name><url-pattern>/SOAPMonitor</url-pattern></servlet-mapping><!-- uncomment this if you want the admin servlet --><!--<servlet-mapping><servlet-name>AdminServlet</servlet-name><url-pattern>/servlet/AdminServlet</url-pattern></servlet-mapping>--><session-config><!-- Default to 5 minute session timeouts --><session-timeout>5</session-timeout></session-config><!-- currently the W3C havent settled on a media type for WSDL;/TR/2003/WD-wsdl12-20030303/#ietf-draftfor now we go with the basic 'it's XML' response -->3.发布到Tomcat5.0+ 启动Tomcat服务启动的时候若出现下面错误。
Xfire开发的webservice客户端超时问题解决Xfire开发的webservice客户端超时问题解决最近某电信ISAG升级后我们的客户端出现大量超时提示,并且下发很慢[MeChannelGw]2010-06-10 06:00:05 (HttpMethodBase.java:2102)-[INFO] Timer-1 - 100 (continue) read timeout. Resume sending the request[MeChannelGw]2010-06-10 06:00:08 (HttpMethodBase.java:2102)-[INFO] Timer-1 - 100 (continue) read timeout. Resume sending the request[MeChannelGw]2010-06-10 06:00:11 (HttpMethodBase.java:2102)-[INFO] Timer-1 - 100 (continue) read timeout. Resume sending the request[MeChannelGw]2010-06-10 06:00:14 (HttpMethodBase.java:2102)-[INFO] Timer-1 - 100 (continue) read timeout. Resume sending the request[MeChannelGw]2010-06-10 06:00:17 (HttpMethodBase.java:2102)-[INFO] Timer-1 - 100 (continue) read timeout. Resume sending the request每隔3-4秒才下发一次数据。
曾以为是对方服务器问题,网络的问题等等,就是换台机器部署,还是会有这个问题。
实际,上因为Xfire默认的机制下,会不断的去和服务端握手造成的。
如何在MyEclipse和Eclipse下安装XFire插件CXF插件 WebService首先,现在都用CFX了(CFX部分源于XFire)吧,所以建议大家使用CXF,本文后面讲XFire安装……CXF的安装参见:Apache CXF: An Open-Source Services Framework /源文件的下载在/download.html博客更新时最新为2.42 一共两个文件,要下载的是其中的二进制下载包,也就是Binary distribution,下载File下的zip(for win)或者tar.gz(for linux)我用的是winXP下载完成后按照如下配置:将你的Binary distribution加压至任意文件夹(将被设为%CXF_HOME%)我的电脑->属性->高级->环境变量创建一个CXF_HOME变量,值为CXF框架所在根目录,修改一下CLASSPATH=%CXF_HOME%/lib;PATH=%CXF_HOME%/bin; 以方便在DOS窗口下直接运行java2ws,wsdl2java等可执行文件。
在%JAVA_HOME%/jre/lib目录下创建一下endorsed文件夹,将jaxb-api.jar,jaxws.jar拷贝进去。
(建议在%CXF_HOME%的文件夹中搜索endorsed,就包括这两个文件,当然,你也可以直接将这个路径包含在%CXF_HOME%\lib\endorsed包含在CLASSPATH中尝试一下,我没有试过)配置好了后,你在DOS窗口下输入java2ws,看看配置是否有效,有效会提示Missing argument: classname。
这样就OK了。
MyEclipse安装XFire要进行基于XFire的开发,需要在MyEclipse或者Eclipse里安装XFire,但是网上基本没有安装插件的说明,在这里做一个介绍:在Eclipse里添加XFire,请遵照XFire官网说明/Eclipse+Plugin进行安装在MyEclipse (9.0)骤如下:进入help->MyEclipse Configer Center ,点选Software选项卡,左侧有个Browse Software,点击导航右侧的 Add Site,弹出对话框,填入名称“XFire”(任填)和站点"/xfire/update/",点击确定,稍等片刻,你会发现在Browse Software下多了XFire的两个选项(只是找到,还没安装),OK,分别双击这两个选项,这连个添加会排程到等待更新的列表中,也就是页面右下角的Software Updates Aviables里面(其实有一个确实已经在MyEclipse里面安装了,所以应该只有一个更新),在单选框中打对勾,然后更新,会弹出更新向导,然后默认的Next Next就可以了……新建一个工程,在工程添加向导里你可能看不到XFire的选项,不急,在工程添加完成后,在工程上右键,在菜单上会出现“为该工程配置XFire”特性,在这里设置就好了……针对之前没说清楚,在这里补充这一点……完……安装完毕,新建工程,右键->添加XFire支持虽然不能从新建工程向导中配置,也没问题,恩恩完……。
WebService接口说明文档文档说明本文档主要讲述如何用C Sharp创建一个简单的Web Service接口,并使用Java调用这个Web Service接口。
准备工作系统环境:安装JDK1.6或更新版本开发工具:Microsoft Visual Studio 2012、MyEclipse 10.5、axis2-1.6.2C Sharp服务端1.首先,创建一个Web Service项目。
依次点击:文件—新建—项目,在弹出的新建项目窗口中选择Web下的 空 Web 应用程序。
如下图:2.接下来我们需要创建我们的Web Service接口实现文件。
鼠标右击我们的项目,依次点击:添加—新建项,在弹出窗口中选择Web 服务。
可修改新建项的文件名,注意文件名后缀后.asmx。
如下图:新建完成后我们的项目结构如下:3.打开我们新建的MyService.asmx下的MyService.asmx.cs文件,可以看到其中已经有默认的HelloWorld方法。
我们可以直接运行查看下运行的效果,效果如下图:点击HelloWorld,再点击调用可以看到页面返回:4.接下来我们完善我们的Web Service接口功能。
主要对Web Service接口进行参数类型的测试,文本型、布尔型、数值型、类(Class)等。
新增Add()等运算方法:新增strcat()连接字符串方法:新增GetBool()返回布尔值方法:新增GetTest()返回测试类,并新增Test类运行我们的项目,可以看到我们的结果如下图:点击add方法测试:输入add的参数i和j点击调用按钮,可以看到返回计算结果:5.到此为止我们C Sharp创建的Web Service程序完成。
接下来看Java如何调用我们的Web Service接口。
Java调用Web Service准备对于一个Web Service接口我们当前只知道访问的地址,我们如何用Java去访问接口呢?已知Web Service接口地址:http://localhost:11766/MyService.asmx?WSDLJava调用Web Service的方式有以下1.使用HttpClient2.使用Xfire3.使用axis2本文档示例选择的是axis2,首先到axis2网站下载axis2,网址:/axis2/java/core/download.cgi当前最新版本1.6.2。
WebService理论详解、JWS(JavaWebService)快速⼊门⽬录WebService (web服务)概述1、WebService(Web服务)是⼀种跨语⾔、跨平台的远程调⽤技术。
A、跨语⾔:服务器与客户端可以使⽤不同的语⾔开发,客户端都能调⽤服务器开放的接⼝,服务器只需要写⼀遍,任意语⾔的客户端都能进⾏调⽤。
B、跨平台:服务端程序和客户端程序可以运⾏在不同的操作系统上。
C、远程调⽤:指计算机 A(客户端) 上的程序可以调⽤计算机 B(服务器) 上的对象的⽅法。
如⽕车站进出站需要刷⾝份证,参加⼤型展会、演唱会时也可以刷⾝份证,显然⽕车站以及展览会、演唱会这些刷⾝份证的系统⾃⼰是不可能有全国⼈民的⾝份证数据的,它们都在公安局的数据库⾥,所以就可以理解成是公安⾝份证系统使⽤ webService 向外提供了接⼝,各地刷⾝份证的系统作为客户端调⽤⽽已。
2、WebService 是可互操作的分布式应⽤程序的⼀个平台、⼀个标准,它定义了应⽤程序如何在 Web 上实现互操作性,可以⽤任何语⾔在任何平台上写Web Service 服务端,然后可以通过 Web service 标准对这些服务进⾏操作。
3、如果系统需要为任意的第三⽅客户提供服务,那么服务器系统就可以使⽤ webService 技术,这样⽅便数据交互。
需要注意的是如果服务端接⼝⽅为webservice,则客户端也必须使⽤ webservice 。
web Service 应⽤场景?1. 同⼀家公司的新旧应⽤之间,⼦系统之间,如校内的招⽣系统、就业系统、缴费系统、考试系统等2. 不同公司的业务应⽤之间,如天猫⽹与中通物流系统交互3. ⼀些提供数据的内容聚合服务应⽤,如天⽓预报、股票⾏情、机票、邮政编码等如何发布⼀个 webService?1、定义 SEI(Service Endpoint Interface)服务终端接⼝,即 webService 提供的服务接⼝2、定义 SIB(Service Implemention Bean)服务实现类,即 webService 提供的服务接⼝的实现类3、发布 webService 服务 Endpoint publish(String address, Object implementor)如何请求⼀个 webService?1、根据服务的提供的 wsdl ⽂档⽣成客户端代码,可以使⽤ Java Jdk⾃带的 wsimport.exe⼯具,或者使⽤第三⽅如 Apache 的 CXF wsdl2java ⼯具既能⽣成服务端代码,也能⽣成客户端代码。
XFire 概述XFire 是 codeHaus 组织提供的一个开源框架,它构建了 POJO 和 SOA 之间的桥梁,主要特性就是支持将 POJO 通过非常简单的方式发布成 Web 服务,这种处理方式不仅充分发挥了 POJO 的作用,简化了 Java 应用转化为 Web 服务的步骤和过程,也直接降低了 SOA 的实现难度,为企业转向 SOA 架构提供了一种简单可行的方式。
XFire 目前最新的版本是 1.2.2,目前支持的特性主要包括:∙支持将 Web 服务绑定到 POJO、XMLBeans、JAXB1.1、JAXB2.0 和 Castor;∙支持基于 HTTP、JMS、XMPP 等多种协议访问 Web 服务;∙支持多种 Web 服务业界重要标准如 SOAP、WSDL、Web 服务寻址(WS-Addressing)、Web 服务安全(WS-Security)等;∙支持 JSR181,可以通过 JDK5 配置 Web 服务;∙高性能的 SOAP 实现;∙服务器端、客户端代码辅助生成;∙对 Spring、Pico、Plexus 等项目的支持等。
XFire 安装包XFire 框架目前的最新版本是 1.2.6,可以访问 下载XFire 框架的安装包,下载时请选择“全部二进制发布包(Binary Distribution in zip package)”,而不仅仅是“XFire jar 文件(Jar of all XFire modules)”。
下载完成后,我们可以将下载的 .zip 文件解压缩到任意的文件夹中(后面的章节中使用 % XFIRE_HOME % 表示 XFire 框架的安装目录),解压缩后形成的文件目录结构如下:∙api(目录)api 目录中是 XFire 框架中所有类(class)对应的 API 文档,为开发者使用 XFire 完成应用开发提供帮助。
∙examples(目录)examples 目录中包含了所有随 XFire 二进制包发布的实例,包括这些实例的源代码和相关 Web 应用配置内容。
java webservice调用方式及解析摘要:一、Java WebService简介二、Java WebService调用方式1.基于HTTP的调用2.基于SOAP的调用3.基于REST的调用三、Java WebService解析1.WSDL文件解析2.SOAP消息解析3.XML消息解析正文:一、Java WebService简介Java WebService是一种基于Java技术的Web服务,它允许不同平台、不同编程语言的应用程序相互通信。
Java WebService遵循JAX-WS(Java API for XML Web Services)规范,利用XML、SOAP、WSDL等技术来实现服务的发布、发现和调用。
二、Java WebService调用方式1.基于HTTP的调用基于HTTP的调用是指使用HTTP协议传输XML数据来进行WebService调用。
这种方式简单、易实现,但不够灵活。
优点是兼容性较好,可以跨平台、跨语言。
2.基于SOAP的调用基于SOAP(Simple Object Access Protocol)的调用是一种更复杂的WebService调用方式。
它使用XML文档来表示消息,并通过HTTP传输。
SOAP消息包含三个部分:Header、Body和Footer。
Header用于传递消息的元数据,如消息版本、编码方式等;Body是消息的主体,包含具体的方法调用和参数;Footer用于传递消息的额外信息。
3.基于REST的调用基于REST(Representational State Transfer)的调用是一种基于HTTP 协议的调用方式。
它将WebService暴露为一系列资源(Resource),并通过HTTP动词(GET、POST、PUT、DELETE)进行操作。
RESTful WebService 具有较好的可读性和实用性,易于理解和开发。
三、Java WebService解析1.WSDL文件解析WSDL(Web Services Description Language)文件是描述WebService接口和消息格式的一种XML文档。
java开发常用的jar包的作用解释转载自:/chaod5659/article/details/8250845 java开发中主要用到的jar包描述commons-io.jar:可以看成是java.io的扩展,用来帮助进行IO功能开发.它包含三个主要的领域:Utilityclasses-提供一些静态方法来完成公共任务.Filters-提供文件过滤器的各种实现.Streams-提供实用的Stream,reader与writer实现.commons-beanutils.jar:提供对Java反射和自省API的包装,主要提供了对于JavaBean进行各种操作。
commons-digester.jar:它能方便地将XML文档所定义的元素转化为JAVA对象,其实它的用法有点象栈(当然内在的原理就是那个古老的东西,只是提供了更高一层的封装)。
commons-lang.jar:它扩展了标准ngAPI,增加了字符串操作方法、基本数值方法、对象反射、创建和串行化以及System属性。
它还包含一个可继承的enum类型、对多种嵌套的Exception 类型的支持、对java.util.Date的增强以及用于构建方法的实用程序,例如自动生成toString()的结果、自动实现hashCode()和equals()方法、数组操作、枚举、日期和时间的处理等等。
ArrayUtils–用于对数组的操作,如添加、查找、删除、子数组、倒序、元素类型转换等;BitField–用于操作位元,提供了一些方便而安全的方法;BooleanUtils–用于操作和转换boolean或者Boolean及相应的数组;CharEncoding–包含了Java环境支持的字符编码,提供是否支持某种编码的判断;CharRange–用于设定字符范围并做相应检查;CharSet–用于设定一组字符作为范围并做相应检查;CharSetUtils–用于操作CharSet;CharUtils–用于操作char值和Character对象;ClassUtils–用于对Java类的操作,不使用反射;ObjectUtils–用于操作Java对象,提供null安全的访问和其他一些功能;RandomStringUtils–用于生成随机的字符串;SerializationUtils–用于处理对象序列化,提供比一般Java序列化更高级的处理能力;StringEscapeUtils–用于正确处理转义字符,产生正确的Java、JavaScript、HTML、XML和SQL代码;StringUtils–处理String的核心类,提供了相当多的功能;SystemUtils–在ng.System基础上提供更方便的访问,如用户路径、Java版本、时区、操作系统等判断;Validate–提供验证的操作,有点类似assert断言;WordUtils–用于处理单词大小写、换行等。
Xfire指南1. 概述XFire是全球众多牛人在与axis系列对比后一致投票的选择。
我比较欣赏的特性有:1.与Spring整合,无须生成一堆文件,无须打包独立war,直接将应用中的Pojo导出为Web服务。
2.Aegis--超简约的默认Java XML 绑定机制,且可以Plugin其他绑定机制。
3.JSR181--annotatiton驱动的POJO WebService配置。
4.基于Stax的高性能框架。
5.脱离Web服务器的单元测试能力。
网上的文档与例子总是不新,请大家抛开所有的文档,所有的Axis 习惯,单看这份代表XFire1.2.2最简约做法的指南。
2. 生火指南2.1 修改web.xml,在Web应用中增加XFire的入口注意XFire有了自己的Servlet,不再依赖Spring MVC的DispatchServlet,也就远离了大家不熟悉的Spring MVC URL Mapping,与Spring达致完美的整合。
这里指定了路径为/service/* ,即WebService的URL会被默认生成为/yyy/service/BookServiceservice/ServiceName ,其中ServiceName默认为下文中的接口名。
xml 代码1.<servlet>2. <servlet-name>xfireservlet-name>3. <servlet-class>org.codehaus.xfire.spring.XFireSpringServletservlet-class>4. servlet>5. <servlet-mapping>6. <servlet-name>xfireservlet-name>7. <url-pattern>/service/*url-pattern>8. servlet-mapping>如果应用使用了Hibernate,使用了OpenSessionInView Filter,注意配置OSIV Filter Filter覆盖xfire servlet的路径,即本例中的/service/*.2.2 编写窄接口,抽取POJO中要导出的服务从已有的BookManager.java中,抽取出一个窄接口,仅暴露需要导出为Web Service的方法。
java 调用webservice的各种方法总结现在webservice加xml技术已经逐渐成熟,但要真正要用起来还需时日!!由于毕业设计缘故,我看了很多关于webservice方面的知识,今天和大家一起来研究研究webservice的各种使用方法。
一、利用jdk web服务api实现,这里使用基于SOAP message 的Web 服务1.首先建立一个Web services EndPoint:package Hello;import javax.jws.WebService;import javax.jws.WebMethod;import javax.xml.ws.Endpoint;@WebServicepublic class Hello {@WebMethodpublic String hello(String name) {return "Hello, " + name + "\n";}public static void main(String[] args) {// create and publish an endpointHello hello = new Hello();Endpoint endpoint = Endpoint.publish("http://localhost:8080/hello", hello);}}2.使用apt 编译Hello.java(例:apt -d [存放编译后的文件目录] Hello.java ) ,会生成jaws目录3.使用java Hello.Hello运行,然后将浏览器指向http://localhost:8080/hello?wsdl就会出现下列显示4.使用wsimport 生成客户端使用如下:wsimport -p . -keep http://localhost:8080/hello?wsdl这时,会在当前目录中生成如下文件:5.客户端程序:1class HelloClient{2public static void main(String args[]) {3 HelloService service = new HelloService();4 Hello helloProxy = service.getHelloPort();5 String hello = helloProxy.hello("你好");6 System.out.println(hello);7 }8}9以上方法还稍显繁琐,还有更加简单的方法二、使用xfire,我这里使用的是myeclipse集成的xfire进行测试的利用xfire开发WebService,可以有三种方法:1一种是从javabean 中生成;2 一种是从wsdl文件中生成;3 还有一种是自己建立webservice步骤如下:用myeclipse建立webservice工程,目录结构如下:首先建立webservice接口,代码如下:1package com.myeclipse.wsExample;2//Generated by MyEclipse34public interface IHelloWorldService {56 public String example(String message);78} 接着实现这个借口:1package com.myeclipse.wsExample; 2//Generated by MyEclipse34public class HelloWorldServiceImpl implements IHelloWorldService { 56 public String example(String message) {7 return message;8 }910} 修改service.xml 文件,加入以下代码:1<service>2 <name>HelloWorldService</name>3 <serviceClass>4 com.myeclipse.wsExample.IHelloWorldService5 </serviceClass>6 <implementationClass>7 com.myeclipse.wsExample.HelloWorldServiceImpl8 </implementationClass>9 <style>wrapped</style>10 <use>literal</use>11 <scope>application</scope>12 </service> 把整个项目部署到tomcat服务器中,打开浏览器,输入http://localhost:8989/HelloWorld/services/HelloWorldService?wsdl,可以看到如下:然后再展开HelloWorldService后面的wsdl可以看到:客户端实现如下:1package com.myeclipse.wsExample.client;23import .MalformedURLException;4import .URL;56import org.codehaus.xfire.XFireFactory;7import org.codehaus.xfire.client.Client;8import org.codehaus.xfire.client.XFireProxyFactory;9import org.codehaus.xfire.service.Service;10import org.codehaus.xfire.service.binding.ObjectServiceFactory;1112import com.myeclipse.wsExample.IHelloWorldService;1314public class HelloWorldClient {15public static void main(String[] args) throws MalformedURLException, Exception {16// TODO Auto-generated method stub17Service s=new ObjectServiceFactory().create(IHelloWorldService.class);18XFireProxyFactory xf=new XFireProxyFactory(XFireFactory.newInstance().getXFire());19String url="http://localhost:8989/HelloWorld/services/HelloWorldService";2021 try22 {2324 IHelloWorldService hs=(IHelloWorldService) xf.create(s,url);25 String st=hs.example("zhangjin");26 System.out.print(st);27 }28 catch(Exception e)29 {30 e.printStackTrace();31 }32 }3334}35 这里再说点题外话,有时候我们知道一个wsdl地址,比如想用java客户端引用.net 做得webservice,使用myeclipse引用,但是却出现无法通过验证的错误,这时我们可以直接在类中引用,步骤如下:1public static void main(String[] args) throws MalformedURLException, Exception {2 // TODO Auto-generated method stub3 Service s=new ObjectServiceFactory().create(IHelloWorldService.class);4 XFireProxyFactory xf=new XFireProxyFactory(XFireFactory.newInstance().getXFire()); 567//远程调用.net开发的webservice8Client c=new Client(new URL("/webservices/qqOnlineWebService.asmx?wsdl"));9 Object[] o=c.invoke("qqCheckOnline", new String[]{"531086641","591284436"});1011//调用.net本机开发的webservice12Client c1=new Client(new URL("http://localhost/zj/Service.asmx?wsdl"));13Object[] o1=c1.invoke("HelloWorld",new String[]{});1415}三、使用axis1.4调用webservice方法前提条件:下载axis1.4包和tomcat服务器,并将axis文件夹复制到tomcat服务器的webapp文件夹中这里我就说一下最简单的方法:首先建立一个任意的java类(例如:HelloWorld.java),复制到axis文件夹下,将其扩展名改为jws,然后重新启动tomcat,在浏览器中输入http://localhost:8989/axis/HelloWorld.jws?wsdl,就会得到一个wsdl文件,其客户端调用方法如下:1import javax.xml.rpc.Service;2import javax.xml.rpc.ServiceException;3import javax.xml.rpc.ServiceFactory;45import .MalformedURLException;6import .URL;7import java.rmi.RemoteException;89import space.QName;1011public class TestHelloWorld {121314 public static void main(String[] args) throws MalformedURLException, ServiceException, RemoteException {15 // TODO Auto-generated method stub1617 String wsdlUrl ="http://localhost:8989/axis/HelloWorld.jws?wsdl";18 String nameSpaceUri ="http://localhost:8989/axis/HelloWorld.jws";19 String serviceName = "HelloWorldService";20 String portName = "HelloWorld";2122 ServiceFactory serviceFactory = ServiceFactory.newInstance();23 Service afService =serviceFactory.createService(new URL(wsdlUrl),new QName(nameSpaceUri, serviceName));24 HelloWorldInterface proxy = (HelloWorldInterface)afService.getPort(new QName(nameSpaceUri, portName),HelloWorldInterface.class);25 System.out.println("return value is "+proxy.getName("john") ) ;2627 }2829}30四、使用axis2开发webservice(这里首先感谢李宁老师)使用axis2 需要先下载axis2-1.4.1-bin.zipaxis2-1.4.1-war.zip/axis2/同理,也需要将axis2复制到webapp目录中在axis2中部署webservice有两种方法,第一种是pojo方式,这种方式比较简单,但是有一些限制,例如部署的类不能加上包名第二种方式是利用xml发布webservice,这种方法比较灵活,不需要限制类的声明下面分别说明使用方法:1.pojo方式:在Axis2中不需要进行任何的配置,就可以直接将一个简单的POJO发布成WebService。
java-webService(调⽤wsdl接⼝)使⽤Axis或XFire实现WebService:Axis2是Apache下的⼀个重量级WebService框架,准确说它是⼀个Web Services / SOAP / WSDL 的引擎,是WebService框架的集⼤成者,它能不但能制作和发布WebService,⽽且可以⽣成Java和其他语⾔版WebService客户端和服务端代码。
这是它的优势所在。
但是,这也不可避免的导致了Axis2的复杂性,使⽤过的开发者都知道,它所依赖的包数量和⼤⼩都是很惊⼈的,打包部署发布都⽐较⿇烦,不能很好的与现有应⽤整合为⼀体。
但是如果你要开发Java之外别的语⾔客户端,Axis2提供的丰富⼯具将是你不⼆的选择。
XFire是⼀个⾼性能的WebService框架,在Java6之前,它的知名度甚⾄超过了Apache的Axis2,XFire的优点是开发⽅便,与现有的Web整合很好,可以融为⼀体,并且开发也很⽅便。
但是对Java之外的语⾔,没有提供相关的代码⼯具。
XFire后来被Apache收购了,原因是它太优秀了,收购后,随着Java6 JWS的兴起,开源的WebService引擎已经不再被看好,渐渐的都败落了。
参考路径:axis2:参考路径:private static Object[] requestFunctionWebService(String url,String parameters,String namespance,String methodName) {try {RPCServiceClient rpcServiceClient = new RPCServiceClient();EndpointReference endpointReference = new EndpointReference(url);//url后缀不加"?wsdl"Options options = rpcServiceClient.getOptions();options.setTimeOutInMilliSeconds(30000);options.setProperty(HTTPConstants.SO_TIMEOUT, 30000);options.setTo(endpointReference);rpcServiceClient.setOptions(options);QName qName = new QName(namespance, methodName);Class[] classStr = new Class[] {String.class};Object[] params = new Object[] {parameters};Object[] objects = rpcServiceClient.invokeBlocking(qName,params,classStr);return objects;} catch (Exception e) {logger.error("requestFunctionWebService请求接⼝异常:"+ e.toString());return null;}}CXF:参考路径:添加依赖: <dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-frontend-jaxws</artifactId><version>3.1.16</version></dependency><dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-transports-http-jetty</artifactId><version>3.1.16</version></dependency>public static Object[] getService(String url,String parameters, String namespace,String methodName) {try {String newUrl =url+"?wsdl";JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();Client client = dcf.createClient(newUrl);QName name=new QName(namespace, methodName);Object[] params = new Object[] {parameters};return client.invoke(name,params);} catch (Exception e) {logger.error(e);return null;}}XFire:参考路径:①通过WSDL地址来创建动态客户端②通过服务端提供的接⼝来创建客户端③使⽤Ant通过WSDL⽂件来⽣成客户端第⼀种⽅式:通过WSDL地址来创建动态客户端package com.jadyer.client;import .MalformedURLException;import .URL;import org.codehaus.xfire.client.Client;/*** 通过WSDL来创建动态客户端* @see此时需要在项⽬中引⼊XFire 1.2 Core Libraries和XFire 1.2 HTTP Client Libraries*/public class ClientFromWSDL {public static void main(String[] args) throws MalformedURLException, Exception {Client client = new Client(new URL("http://127.0.0.1:8080/XFire_demo/services/XFireServer?wsdl")); Object[] results11 = client.invoke("sayHello", new Object[]{"Jadyer22"});System.out.println(results11[0]);}}第⼆种⽅式:通过服务端提供的端⼝来创建客户端package com.jadyer.client;import .MalformedURLException;import java.util.List;import org.codehaus.xfire.client.XFireProxyFactory;import org.codehaus.xfire.service.Service;import org.codehaus.xfire.service.binding.ObjectServiceFactory;import com.jadyer.model.Person;import er;import com.jadyer.server.HelloService;/*** 通过Web服务端提供的接⼝来创建客户端* @see客户端必须提供⼀个与服务端完全⼀致的接⼝,包名也要⼀致* @see在本例中,需要在客户端(即该项⽬)中提供HelloService.java接⼝,以及Person和User两个POJO类 * @see并且此时需要在项⽬中引⼊XFire 1.2 Core Libraries和XFire 1.2 HTTP Client Libraries*/public class ClientFromInterface {public static void main(String[] args)throws MalformedURLException{//⾸先使⽤XFire的ObjectServiceFactory从HelloService接⼝创建⼀个服务模型serviceModel//serviceModel包含服务的说明,换句话说,就是服务的元数据//Create a metadata of the serviceService serviceModel = new ObjectServiceFactory().create(HelloService.class);//访问的地址String serviceURL = "http://127.0.0.1:8080/XFire_demo/services/XFireServer";//通过查看org.codehaus.xfire.client.XFireProxyFactory源码发现//下⾯两⾏代码与这⾥直接new XFireProxyFactory()的作⽤是等效的//XFire xfire = XFireFactory.newInstance().getXFire();//XFireProxyFactory factory = new XFireProxyFactory(xfire);//为XFire获得⼀个代理⼯⼚对象//Create a proxy for the deployed serviceXFireProxyFactory factory = new XFireProxyFactory();//通过proxyFactory,使⽤服务模型serviceModel和服务端点URL(⽤来获得WSDL)//得到⼀个服务的本地代理,这个代理就是实际的客户端HelloService client = (HelloService)factory.create(serviceModel, serviceURL);/*** Invoke the service* @see调⽤服务的本地代理(即实际的客户端)中的⽅法,便得到我们需要的WebServcie*//*--处理简单对象--*/String serviceResponse = client.sayHello("Jadyer11");System.out.println(serviceResponse);/*--处理对象--*/User u = new User();u.setName("Jadyer99");Person pp = client.getPerson(u);System.out.println(pp.getName());/*--处理List--*/List<Person> personList = client.getPersonList(24, "Jadyer88");for(Person p : personList){System.out.println(p.getName());}}这是它要⽤到的接⼝和两个POJO类/*** Web服务提供给客户端的接⼝* @see这是第⼆种⽅式创建的客户端,要⽤到的接⼝*/package com.jadyer.server;import java.util.List;import com.jadyer.model.Person;import er;public interface HelloService {public String sayHello(String name);public Person getPerson(User u);public List<Person> getPersonList(Integer age, String name);}/*** 第⼆种⽅式创建的客户端,要⽤到的两个POJO类*/package com.jadyer.model;public class User {private String name;/*--getter和setter略--*/}package com.jadyer.model;public class Person {private Integer age;private String name;/*--getter和setter略--*/}Axis:Java WebService接⼝⽣成和调⽤:参考路径:调⽤:引⽤jar包:axis.jar 、jaxrpc.jar⼀、使⽤eclipse⾃动⽣成的wsdl接⼝1、2、3、调⽤接⼝private static String requestFunctionWebService(String http,String message) { //http="http://203.48.27.97:85/dagl/service/TDHYxService?wsdl"String retMessage = "";try {YxBrowseWSProxy yx = new YxBrowseWSProxy(http);retMessage = yx.yxBrowse(message);//⽅法名yxBrowse} catch (Exception e) {logger.error("requestFunctionWebService请求接⼝异常:"+ e.getMessage());e.printStackTrace();}return retMessage;}⼆、直接AXIS调⽤远程的web serviceimport java.util.Date;import java.text.DateFormat;import org.apache.axis.client.Call;import org.apache.axis.client.Service;import space.QName;import ng.Integer;import javax.xml.rpc.ParameterMode;public class caClient {public static void main(String[] args) {try {String endpoint = "http://localhost:8080/ca3/services/caSynrochnized?wsdl";//直接引⽤远程的wsdl⽂件//以下都是套路Service service = new Service();Call call = (Call) service.createCall();call.setTargetEndpointAddress(endpoint);call.setOperationName("addUser");//WSDL⾥⾯描述的接⼝名称call.addParameter("userName", org.apache.axis.encoding.XMLType.XSD_DATE,javax.xml.rpc.ParameterMode.IN);//接⼝的参数call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);//设置返回类型 String temp = "测试⼈员";String result = (String)call.invoke(new Object[]{temp});//给⽅法传递参数,并且调⽤⽅法System.out.println("result is "+result);}catch (Exception e) {System.err.println(e.toString());}}}。
Axis2,CXF,xifire1. Axis2.x (3)1.1. 开发准备工作 (3)1.1.1. 环境 (3)1.1.2. 单独启动AXIS2服务 (4)1.1.3. 将axis2-1.6.2-bin.zip中的项目打成axis2.war包 (4)1.1.4. Axis2脚本 (5)1.1.5. 安装eclipse插件(可选) (7)1.1.6. axis2-bin文件目录结构 (8)1.1.7. 部署axis2.war到tomcat (8)1.1.8. 上传services(Uploading Services) (9)1.2. Axis2开发部署 (9)1.2.1. 编写服务器代码,和配置文件 (10)1.2.2. 发布 (11)1.2.3. 通过class文件生成wsdl文件(java2wsdl) (13)1.2.4. 通过wsdl文件生成Java访问代码(wsdl2java) (13)1.2.5. 调用:Axis2开发WebService客户端的3种方式 (14)1.2.6. PS:配置文件介绍 (21)1.3. 大病系统ESB接口开发 (25)1.3.1. esb接口标准 (26)1.3.2. esb接口开发 (31)1.3.3. esb接口调试测试 (53)1.3.4. esb接口发布 (53)2. CXF (53)2.1. 准备工作 (54)2.2. 开发示例 (54)2.2.1. 编写服务端接口 (55)2.2.2. 编写服务实现 (56)2.2.3. 编写webServiceApp.java类来暴露web服务 (57)2.2.4. 启动服务 (57)2.2.5. 编写客户端访问服务 (57)2.2.6. 测试 (58)2.2.7. 集成到spring (58)2.2.8. 通过wsdl文件生成客户端和服务器端代码 (61)3. xfire (62)3.1. 准备工作 (62)3.2. 开发步骤 (62)3.2.1. 建立目录结构 (62)3.2.2. 添加依赖包 (63)3.2.3. 编写服务端代码 (63)3.2.4. 配置web.xml (66)3.2.5. 创建xfire配置文件 (67)3.2.6. services.xml的作用 (68)3.2.7. 在服务器上运行服务 (69)4. Axis与XFire的比较 (72)4.1. XFire与Axis1性能的比较 (72)4.2. XFire与Axis2的比较 (72)5. cxf与axis2比较 (73)6. WSDL文件 (74)6.1. 抽象定义 (74)6.2. 具体定义 (74)7. JAXB (76)7.1. Java SE中的JAXB (76)7.2. 使用 (77)7.3. 缺省的数据类型绑定 (77)7.4. 代码示例 (78)1.Axis2.xWeb Service是现在最适合实现SOAP的技术,而Axis2是实现Web Service的一种技术框架(架构)。
WebService教程详解(⼀)Web Services 可以将应⽤程序转换为⽹络应⽤程序。
通过使⽤ Web Services,您的应⽤程序可以向全世界发布信息,或提供某项功能。
Web Services 可以被其他应⽤程序使⽤。
通过 Web Services,您的会计部门的 Win 2k 服务器可以与 IT 供应商的 UNIX 服务器相连接。
基本的 Web Services 平台是 XML+HTTP。
Web services 使⽤ XML 来编解码数据,并使⽤ SOAP 来传输数据。
什么是webServiceWebService,顾名思义就是基于Web的服务。
它使⽤Web(HTTP)⽅式,接收和响应外部系统的某种请求。
从⽽实现远程调⽤.1:从WebService的⼯作模式上理解的话,它跟普通的Web程序(⽐如ASP、JSP等)并没有本质的区别,都是基于HTTP传输协议的程序。
2:WebService所使⽤的数据均是基于XML格式的。
⽬前标准的WebService在数据格式上主要采⽤SOAP协议。
SOAP协议实际上就是⼀种基于XML编码规范的⽂本协议。
webService的技术⽀持Web Service平台需要⼀套协议来实现分布式应⽤程序的创建。
任何平台都有它的数据表⽰⽅法和类型系统。
要实现互操作性,Web Service平台必须提供⼀套标准的类型系统,⽤于沟通不同平台、编程语⾔和组件模型中的不同类型系统。
⽬前这些协议有:XML和XSD 可扩展的标记语⾔XML 是Web Service平台中表⽰数据的基本格式。
除了易于建⽴和易于分析外,XML主要的优点在于它既与平台⽆关,⼜与⼚商⽆关。
XML是由万维⽹协会(W3C)创建,W3C制定的XML SchemaXSD 定义了⼀套标准的数据类型,并给出了⼀种语⾔来扩展这套数据类型。
Web Service平台是⽤XSD来作为数据类型系统的。
当你⽤某种语⾔如VB. NET或C# 来构造⼀个Web Service时,为了符合Web Service标准,所有你使⽤的数据类型都必须被转换为XSD类型。
XFire 1.2.6调用Web Service的几种方法最近由于项目的需求,我开始学习XFire 1.2.6。
XFire的服务发布很简单,但由于xfire为用户提供了多种调用(invoke) web service的方法,所以在编写客户端代码的时侯,需要我们做一番斟酌。
在不同的应用环境下,我们可能需要采用不同的服务调用的方法。
本文将详细介绍这几种调用web服务的方法。
方法一:动态客户端(Dynamic Client)这是一种最简单的web服务调用方法。
具体过程如下:1.创建一个服务代理,其中url为调用服务的wsdl地址。
Client client = new Client(new URL(url));2.调用web服务,输入参数(简单类型)。
Object[] results = client.invoke(methodName, new Object[]{param1,param2});3.打印web 服务运行结果System.out.println((ReturnValueType)results[0]);全过程只需要三个过程,非常简单。
但是,上述过程仅限于简单的方法调用,对于那些以复杂数据结构为参数的方法,以及复杂结构的返回值的方法,需要采用另外的处理方法,否则将无法正常运行。
关于复杂参数的传递以及调用复杂返回值方法的过程还有待进一步研究,如果哪个读者熟悉这一块,可以与我联系,本人将非常感谢。
方法二:代理工厂方法(Proxy Factory)一般的方法如如下:1.创建一个服务实例,就像在自己的服务器上创建一样。
要注意的是,这里的“”Service serviceModel = new ObjectServiceFactory().create(YourService.class);要注意的是,这里的“YourService”是接口类,而不是接口的实现类。
2.定义服务URLString serviceURL = “http://localhost:8080/XFireTest/services/YourService”;3.为服务创建一个代理YourService client = (YourService) new XFireProxyFactory().create(serviceModel,serviceURL);4.使用代理访问服务提供的方法String name = (String) client.getName();如果已经知道调用的服务在本地时,我们可以采取下面方法(本地传输)来调用,这种方法可以提高调用服务的速度,减少调用服务的延迟时间。
XFire开发WebServiceXFire简介:XFire是新一代的Java Web服务引擎,XFire使得在JavaEE应用中发布Web服务变得轻而易举。
和其他Web服务引擎相比,XFire的配置非常简单,可以非常容易地和Spring 集成,它使得Java开发人员终于可以获得和.Net开发人员一样的开发效率. 详细内容请看:/view/920041.htmlWebService简介:它是一种构建应用程序的普遍模型,可以在任何支持网络通信的操作系统中实施运行;它是一种新的web .应用程序分支,是自包含、自描述、模块化的应用,可以发布、定位、通过web调用。
Web Service是一个应用组件,它逻辑性的为其他应用程序提供数据与服务.各应用程序通过网络协议和规定的一些标准数据格式(Http,XML,Soap)来访问Web Service,通过Web Service内部执行得到所需结果.Web Service可以执行从简单的请求到复杂商务处理的任何功能。
一旦部署以后,其他Web Service应用程序可以发现并调用它部署的服务。
具体内容请访问:/view/837392.html开发环境:JDK 1.6;MyEclipse8.5;tomcat 6.0;Windows XP;XFire1.2接下来我们看怎么用XFire来构建一个webservice服务端。
1.创建工程打开MyEclipse 8.5,新建一个WebService工程。
如下图Webservice服务端名称Webservice服务路径什么都不用改动services.xml2.创建webserice服务.MyServiceTestImpl.java代码如下:Service.xml配置文件如下:3.测试服务端测试服务器我们采用Tomcat, 需要将做好的服务端打包部署到tomcat上,然后启动. 在进行测试.可以看到,我们服务端提供了一个名叫“sayHello”的接口.我们点击这个方法名.在下面填入字符串. 点击GO如下这样服务端就返回一个字符串. 说明我们服务端测试通过.4.创建客户端代码创建客户端可以用MyEcilse自带的创建客户端方式.去创建. 比较简单. 傻瓜式操作.这里我就不在示范. 我采用手写的方式写一个客户端.这样有助于大家理解.也能加深记忆.(1)创建一个工程. MyserviceCilent 添加XFire架包. 工程架构如下.(2)创建接口实现类.IMyServiceTest.java. 源码如下:package service.client;//Generated by MyEclipsepublic interface IMyServiceTest {public String sayHello(String user);}MyServiceTestImpl.java 源码如下:package service.client;//Generated by MyEclipsepublic class MyServiceTestImpl implements IMyServiceTest { public String sayHello(String user) {return"您好,"+user;}}(3)写测试类.ClientTest.java 源码如下:public static void main(String [] args){Service serviceModel = newObjectServiceFactory().create(IMyServiceTest.class);XFire xfire = XFireFactory.newInstance().getXFire();XFireProxyFactory factory = new XFireProxyFactory(xfire); String serviceUrl ="http://10.222.22.97:8080/MyServiceTest/services/MyServiceTest";IMyServiceTest client = null;try {client = (IMyServiceTest) factory.create(serviceModel, serviceUrl);} catch (MalformedURLException e) {System.out.println("Client call webservice has exception: "+ e.toString());}String result1 =client.sayHello("张三");System.out.print(result1);}直接执行后会返回以下结果.5.现在一个简单的webservice已经开发完成. 当然有的同学会提出. 只可以传递字符串类型吗?当然不是. 后续我还为大家在写传递对象类型. 集合类型. 数组类型. 敬请期待.谢谢!有什么问题,可以联系我. 邮箱:zhubox1j7253@很高兴能和你探讨.。
详解java开发webservice的⼏种⽅式webservice的应⽤已经越来越⼴泛了,下⾯介绍⼏种在Java体系中开发webservice的⽅式,相当于做个记录。
1.Axis2Axis是apache下⼀个开源的webservice开发组件,出现的算是⽐较早了,也⽐较成熟。
这⾥主要介绍Axis+eclipse开发webservice,当然不⽤eclipse也可以开发和发布webservice,只是⽤eclipse会⽐较⽅便。
(3)下载eclipse的axis2插件(4)eclipse安装axis2插件1)在任意⽬录下新建⼀个Axis2⽂件夹,在该⽂件夹下新建eclipse⽬录,在eclipse⽬录中新建plugins⽬录和features⽬录,例如:D:\programSoftware\eclipse-SVN\Axis2\eclipse;2)把下载的axis2插件解压,并把解压的⽂件放到新建的eclipse的plugins⽬录下;3)在%eclipse_home%的⽬录下新建links⽬录,并在links⽬录下新建axis2.link⽂件,内容为:path=D:\programSoftware\eclipse-SVN\Axis2;4)重启eclipse,点击·file-new-other,如果看到Axis2 Wizards,则表明插件安装成功。
(5)安装axis2(6)使⽤eclipse新建web⼯程,创建⼀个普通java类,⾄少包含⼀个⽅法。
(7)发布webservice1)点击eclipse的File-New-other,打开Axis2 Wizards,选择Axis2 Service Archiver,然后Next;2)选择Class File Location,也就是类⽂件存放路径,注意:只选到classes⽬录,不要包括包⽂件夹,然后Next;3)选择Skip WSDL,然后Next4)⼀路Next到Select the Service XML file to be included in the Service archive,勾选Generate theservice xml automatically;5)Service Name-填写你的service名称,Class Name-填写类名称,要包括包名,然后点击load,然后点击Finish,这时webservice就发布成功了;6)然后到%TOMCAT_HOME%/webapps/axis2/WEB-INF/services 看看是否多了⼀个.aar的⽂件;2.Apche CXFCXF开发webservice也是⽐较⽅便和简单的,它和spring的集成可以说是⾮常地好。
Java WebService框架之XFire使用说明声明:此文档只为做学习交流用,如果你有任何异议或更好的想法,欢迎你在群里讨论或者与我讨论!希望能够帮到你!WebService这个字眼,或许大家听起来,并不陌生,一般做过几年开发经验的程序员,几乎都跟它打过交道,首先,我要说明的是,WebService并不是java的特权,也就是说,并不是java只有WebService,.net有,C#有。
等等不罗嗦,首先我得让大家知道,WebService是干嘛用的,从字面意思理解就是web服务,其实,说白了,Web Services就是发布的、完成其特定需求的、在线应用服务。
其他公司或应用软件能够通过Internet来访问并使用这项在线服务。
WebService的主要目标是跨平台的可互操作性。
他独立于平台、独立于软件供应商的标准,是创建可互操作的、分布式应用程序的新平台。
(相关详细解释,大家可以百度的文库)我举个例子,或许大家就明白了,我举个它的应用,比如说,现在有这么一个需求:WebService应用案例一:张三传递给李四某个城市的名字比如说北京,李四反馈给张三北京的天气预报为:晴,王五传递给李四的城市名字济南,李四反馈给王五济南的天气预报为:阴;赵六传递给李四武汉。
等等。
但是,无论是谁想给李四传递城市的名字,必须遵循李四开放出来的一个发送地址,要不然你找不到李四,李四也收不到你的请求城市。
那么,在该示例中,无非就是想实现的一个功能就是,任何人传递给李四一个城市的相关名字,李四反馈给请求者该城市的天气情况,前提是,按照李四公布给大家的发送地址,那么,所有向李四发送请求城市的人,都会收到李四反馈的请求的城市的天气情况,那么这就是一个典型的webservice的调用,它与平台无关,跟每一个系统都无关,是独立的在线服务,那么,在此例中,每一个向李四发送请求的人,都是客户端,而李四所实现的接受城市,反馈回天气预报的功能,就是webservice的服务断,而李四提供的发送地址,就是大名鼎鼎的访问Webservice得到WSDL地址再给大家举一个例子:WebService应用案例二:有两套系统,A系统为用。
Net语言开发的,B系统用java语言开发的,现在有一个需求,就是要实现A系统跟B系统之间的信息交互,那么此时,A系统,可以写一个。
Net的webService,之后,公布给B系统webservice的访问地址,那么B系统就可以访问A系统,而A系统如果想访问B系统的数据,那么B系统可以写一个java 的webService,把地址告知给A系统,A系统就可以访问B系统的数据。
可能有的人会有疑问,貌似。
当前不同系统间交互数据都用XML么?如果你能想到这,恭喜你,你已经跟设计webservice的人的想法一样了,呵呵。
因为它的描述WSDL就是xml其实一般说到webservice,就是开发它的服务端,客户端,基本上没什么技术含量,按照某种格式调用就OK。
长篇大论了一番,我想,大家应该对WebService有个了解了,那么下面进入正题,Java 的WebService框架,比较常用的有:Axis,XFire ,Cfx等,呵呵,因为之前搞过Axis,繁琐的配置,说实话真的不能让我爱上它,当我遇到XFire的时候,我才发现,原来,它可以让WebService如此简单,核心只需一个xml配置文件就全部搞定,因此我强烈推荐XFire,如果你是初学者,我更加强烈推荐XFire是一款开源的Java SOAP框架。
它拥有一个轻量级的信息处理模块,通过STAX来与SOAP信息相结合,支持POJO和schema开发. XFire支持Web Services standards,Spring 整合,下面就以此为例,先讲解借助Myeclipse的自动生成来介绍,当然你也可以手工去写。
下面通过一个简单的示例来讲解Xfire的使用。
首先说一下我的开发环境配置:Myeclipse6.5 + jdk1.5 + tomcat6.0步骤1:选择File----New----WebService Project,创建项目如图:步骤2:输入项目的名字,Test_WebService(可以随意起),如图:步骤3:点击Next,进入如下界面,在此操作界面中,走默认即可,.其中是Xfire的核心过滤器,用于拦截/services/*的请求,后面会详细说明,保持默认,点next步骤4:你将会看到这个窗口,这是让你选择Xfire的核心jar包,如图:其中,为Xfire的和核心类库,为必选,如果你开发的这个webservice用于本项目中的话,那你还需勾选,当然,如果你仅仅是开发一个独立的WebService的话,那就没必要勾选了。
在这咱开发一个独立的WebService,供任何一个项目可以调用它,只勾选第一项,点击Finish。
步骤5:至此,WebService的整体骨架已经创建完毕了。
看一下左侧项目栏中,我们刚创建的该WebService的结构如图:一次点开项目的层级文件夹,你会发现比普通的项目多了,点开services.xml你会发现,什么都没有,这就对了,services.xml就是注册你的webservice方法用的,点开web.xml你发现多了这么几行代码:这就是上面我提到的,Xfire的核心过滤器,上面走了默认,所以,这里看到的东西,就是跟上面你走默认的一样,如果你改了默认的信息的话,那么此处就为你更改了的信息了,当然,我还是建议大家走默认。
步骤6:既然万事具备了,那么,咱们现在就开发一个WebSERVICE的服务类,在这,MyEclipse已经给提供了快捷的创建方式,爱死它了。
你可以在项目名字Test_WebService上右击选择:步骤7:在弹出的窗口中选择:MyEclipse下的Web Service下的WebService点击Next步骤8:在打开的窗口中,勾选,借助Myeclipse通过javabean 的形式来生成WebService点击next步骤9:在打开的该窗口中,你只需填入:,这就是将来你访问该WebService的名字了,当然建立好了以后,如果你又想改名字,可以在services.xml中改的,我借用了一下我的qq昵称的名字,呵呵Silent soul。
你可以起你想要的名字,当然要遵循命名规范,做到见名知意。
底下的会自动根据你填入的Web service name的名字,自动填进去,在中,这是让你选择,你要把创建的webservice类,放在哪个包中,此时,我还没有建立包,所以,咱们可以n点击New建立一个包,建好后,该窗口最后的样子为以下:点击Finish步骤10:至此,创建webservice的步骤已经结束,此时再看,Test_WebServcie的结构:你会发现,多了,并且,services.xml中多了:分别打开ISilent_Soul_Service,和Silent_Soul_ServiceImpl,你会发现,跟你所见到的普通的java类没有任何区别,ISilent_Soul_Service就是一个普通的接口,Silent_Soul_ServiceImpl是一个实现了ISilent_Soul_Service接口的类,恭喜你,看对了。
!!就是这么简单,Xfire让webservice就是这么简单,就是普通的javabean,只不过,在services.xml中,你要注册一下该类和接口为service。
,在servies.xml中,这就是webservice的名字了,就是接口,为实现方法步骤11:此时你就可以在ISilent_Soul_Service接口中定义你想定义的方法,在Silent_Soul_ServiceImpl中做实现了,Myeclipse默认给生成了一个方法,example(String message),那么咱就在这个方法里,做个简单的实现,在Silent_Soul_ServiceImpl类中加入如下代码:步骤12:此时WebService全部创建完毕,恭喜你,你可以在任意一个项目中调用了。
为了方便,将其部署到Tomcat上,当然,你可以部署在任何一个服务器上,resin,weblogic。
你随便,跟部署普通的项目一样,如图:步骤13:启动Tomcat,启动成功后,打开浏览器,输入:http://127.0.0.1:8088/Test_WebService/services/Silent_Soul_Service?ws dl你就能看见如下界面了:恭喜你,如果你能看到该界面,已经证明,你的webservice是成功的。
在此说明一点,如果你的tomcat是6.0一下的版本的话,启动的时候会报错,不过不用担心,那是因为tomact6.0以下的版本,中有一个还是两个包,跟Xfire中带的包冲突,具体是哪个我记不清了,去掉冲突的包就Ok ,再有就是,我建议大家如果你喜欢用Tomcat的话,那你就用5。
X以上的版本,因为tomcat算不上是个服务器,只能算是一个web的容器,但是它是从6.0以后,更加专注于服务器的,负载均衡能力肯定比低版本的要好。
分析一下这个访问地址:http://127.0.0.1:8088/Test_WebService这一部分很好理解,就是本机的服务器地址加项目的名字,后面的services/Silent_Soul_Service?wsdl,这一块,其中services是固定的,因为你在你的web.xml中,定义的Xfire的过滤器,过滤的路径就是/services/*,所以,你必须加上services,而Silent_Soul_Service?wsdl,Silent_Soul_Service是你在services.xml中配置的webservice的名字了,后面跟一个?wsdl这是固定的,也就是说,名字+?wsdl了。
WSDL是Web Service的描述语言。
也就是说,任何一个webservice的访问形式基本都是这样的,最后都是http://*******/webservice名字?wsdl.步骤13:此时。
你可以随便在你的任何一个项目里调用了,但是,一定要记住,无论哪个项目中,你想调用的话,都得在要用到的项目中引入这两个类库步骤14:为了演示,我随便见一个java的项目,当然,j2se的也可,J2EE项目也可,都可以。
我随便见一个普通的java项目,引入上面所说的两个类库,如图:在HelloWebService中,我只加入一个main方法,如下:其中:URL:填入访问你的webservice的地址,invoke方法的第一个参数填入你要调用的方法的名字,第二个参数写入你要传递的参数返回值为Object【】数组类型。