最新XFire与Spring集成WebService客户端的两种开发方式
- 格式:doc
- 大小:32.50 KB
- 文档页数:4
使用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服务启动的时候若出现下面错误。
java webservice几种调用方式Java Web Service是一种流行的技术,用于通过网络在不同系统之间实现通讯和集成。
在Java中,有多种方式可以调用Web Service。
下面将介绍几种常用的调用方式。
1.使用SOAP(Simple Object Access Protocol)协议SOAP是一种基于XML的通讯协议,可以在网络上使用HTTP、SMTP等协议发送和接收消息。
在Java中,可以使用SOAP协议调用Web Service。
SOAP使用WSDL(Web Services Description Language)来描述Web Service的接口和功能。
可以使用轻量级的SOAP框架Apache CXF或Metro来创建和调用SOAP Web Service。
调用方式主要包括以下几步:-创建一个Java类来表示Web Service的接口,并使用注解来定义接口的操作。
-使用工具,如Apache CXF或Metro,将该类生成WSDL文档。
-使用WSDL文档生成客户端代码,以便在调用Web Service时使用。
-创建一个客户端程序,通过调用生成的客户端代码来调用Web Service的方法。
2.使用JAX-WS(Java API for XML Web Services)标准JAX-WS是一种Java的Web Service规范,它提供了一种简单的方式来创建和调用Web Service。
JAX-WS提供了注解,用于将Java类转换为Web Service,并且可以使用Java的代理类来调用Web Service 的方法。
调用方式包括以下几步:-创建一个Java类,并用@WebService注解来标记它作为一个Web Service的实现。
-在该类中定义Web Service的操作,并使用@WebMethod注解来标记这些方法。
-使用工具,如JDK的wsimport命令或Eclipse的WebService工具来生成客户端代码。
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支持虽然不能从新建工程向导中配置,也没问题,恩恩完……。
winform webservice 架构Winform Webservice 架构是一种组合架构,它将 Windows Form应用程序和 Web Service 组合在一起,提供一种方便的方法来将客户端和服务器端开发集成到一起。
这种架构的设计使得开发人员可以方便地实现一个异构环境下的分布式应用程序。
Winform Webservice 架构的组合包括两个主要组成部分:Windows Form 应用程序和Web Service。
Web Service 充当服务器端的角色,而 Windows Form 应用程序则是客户端。
通过开发 Web Service,你可以将一些核心功能发布为可用的 Web 服务,然后通过一个基于Windows Form 的客户端来访问这些服务,这样客户端可以通过对Web Service 的请求来获得数据并对其进行操作,这个过程使得Windows Form 应用程序能够实现一些更加复杂的操作。
Winform Webservice 架构的主要优势在于它提供了一个统一的数据源,可以被多个应用程序访问和共享。
通过将核心业务逻辑封装在Web 服务中,你可以更轻松地将其用于不同的应用程序中。
此外,还可以使用 Web 服务来实现将数据从一个应用程序传输到另一个应用程序的功能,因此,Winform Webservice 架构也被认为是一种非常具有弹性的架构。
另一个主要优势是,Winform Webservice 架构提供了一种将Windows Form 应用程序与 Web 应用程序集成的方法。
这使得你的应用程序在多个平台上运行时显示效果非常一致,无论你在何处运行应用程序,用户界面和应用程序逻辑都会保持一致。
这个功能使得Winform Webservice 架构在企业和制造业应用程序中非常受欢迎,因为这些应用程序需要使用多个不同的平台进行工作。
当然,Winform Webservice 架构也有一些劣势。
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。
webservice实现有多种方式比如最常用的有axis框架,xfire框架,通过该框架可以发布wsdl接口,也可以实现webservice客户端,目前eclipse都有集成的插件,可以根据wsdl文件生成webservice客户端调用接口,但是这样部署的时候必须依赖框架的jar包,有时候可能因为环境等等原因,我们仅仅需要wsdl中的某一个接口,这时候可以通过http接口或socket接口直接发生xml 数据,来调用服务端webservice服务,其实webservice底层还是发送xml数据,只是框架封装了对xml数据进行序列化与反序列化操作,下面以两个简单的例子说明http方式和socket方式。
http实现webservice接口调用例子:[c-sharp]view plain copy1.import <a href="/base/17"class='replace_word' title="Java EE知识库" target='_blank' style='color:#df3434; font-weight:bold;'>Java</a>.io.Buffe redReader;2.import java.io.IOException;3.import java.io.InputStreamReader;4.import java.io.OutputStreamWriter;5.import java.io.UnsupportedEncodingException;6.import .MalformedURLException;7.import .URL;8.import .URLConnection;9.10.public class HttpPostTest {11.void testPost(String urlStr) {12.try {13. URL url = new URL(urlStr);14. URLConnection con = url.openConnection();15. con.setDoOutput(true);16. con.setRequestProperty("Pragma:", "no-cache");17. con.setRequestProperty("Cache-Control", "no-cache");18. con.setRequestProperty("Content-Type", "text/xml");19.20. OutputStreamWriter out = new OutputStreamWriter(con.getOutputStream());21. String xmlInfo = getXmlInfo();22.out.write(new String(xmlInfo));23.out.flush();24.out.close();25. BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream()));26. String line = "";27. StringBuffer buf = new StringBuffer();28.for (line = br.readLine(); line != null; line = br.readLine()) {29. buf.append(new String(line.getBytes(),"UTF-8"));30. }31. System.out.println(buf.toString());32. } catch (MalformedURLException e) {33. e.printStackTrace();34. } catch (IOException e) {35. e.printStackTrace();36. }37. }38.39.private String getXmlInfo() {40.// 通过wsdl文件可以查看接口xml格式数据,构造调用接口xml数据41. String xml = "<SOAP-ENV:Envelope xmlns:SOAP-ENV=/"http://schemas.xml/soap/envelope//" xmlns:SOAP-ENC=/"/soap/e ncoding//" xmlns:xsi=/"/2001/XMLSchema-instance/" xmlns:xsd =/"/2001/XMLSchema/">"42. + "<SOAP-ENV:Body>"43. + "<m:getItemDetailSingle xmlns:m=/"http:xxxxxxxxxxxxxxxxxx//">"44. + "<itemMo>"45. + "<category>工厂类</category>"46. + "<city>北京</city>"47. + "<flag>1</flag>"48. + "<itemId>0</itemId>"49. + "<itemIndex>1</itemIndex>"50. + "<keyword></keyword>"51. + "<mobile>2147483647</mobile>"52. + "<password>123456</password>"53. + "<userName>sohu</userName>"54. + "</itemMo>"55. + "</m:getItemDetailSingle>"56. + "</SOAP-ENV:Body>"57. + "</SOAP-ENV:Envelope>";58.return xml;59. }60.61.public static void main(String[] args) throws UnsupportedEncodingException {62. String url = "http://localhost:9003/dataService/services/Job";63.new HttpPostTest().testPost(url);64. }65.}socke方式实现例子:[c-sharp]view plain copy1.import java.io.IOException;2.import java.io.InputStream;3.import java.io.InputStreamReader;4.import java.io.OutputStream;5.import .Socket;6.import .UnknownHostException;7.8.9.public class WebServiceClient {10.11./**12. * @param args13. * @throws IOException14. * @throws UnknownHostException15. */16.public static void main(String[] args) throws UnknownHostException, IOException {17. Socket socket = new Socket("localhost",9003);18. OutputStream os = socket.getOutputStream();19. InputStream is = socket.getInputStream();20.//System.out.println(socket.isConnected());21. String httpSend = "POST /dataService/services/Job HTTP/1.1/r/n"22. + "Content-Type:text/xml/r/n"23. + "Host:localhost:9003/r/n"24. + "Content-Length:1024/r/n"25. + "/r/n"26. + "<SOAP-ENV:Envelope xmlns:SOAP-ENV=/"http://schema/soap/envelope//" xmlns:SOAP-ENC=/"/s oap/encoding//" xmlns:xsi=/"/2001/XMLSchema-instance/" xmln s:xsd=/"/2001/XMLSchema/">"27. + "<SOAP-ENV:Body>"28. + "<m:getItemDetailSingle xmlns:m=/"http://localhost//">"29. + "<itemMo>"30. + "<category>工厂类</category>"31. + "<city>北京</city>"32. + "<flag>1</flag>"33. + "<itemId>0</itemId>"34. + "<itemIndex>1</itemIndex>"35. + "<keyword>String</keyword>"36. + "<mobile>2147483647</mobile>"37. + "<password>123456</password>"38. + "<userName>sohu</userName>"39. + "</itemMo>"40. + "</m:getItemDetailSingle>"41. + "</SOAP-ENV:Body>"42. + "</SOAP-ENV:Envelope>";43. os.write(httpSend.getBytes());44. os.flush();45.46. InputStreamReader ireader = new InputStreamReader(is);47. java.io.BufferedReader breader = new java.io.BufferedReader(ireader);48.49. String responseLine = "";50.51.while((responseLine = breader.readLine()) != null)52. {53. System.out.println(new String(responseLine.getBytes(),"UTF-8"));54. }55.56. System.out.println("");57.58. }59.60.}。
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 实现方式Webservice实现方式一、引言Webservice是一种基于Web的服务架构,通过网络进行通信,并使用XML格式进行数据交换的技术。
它提供了一种跨平台、跨语言的通信方式,使得不同系统之间可以进行互操作。
本文将介绍Webservice的实现方式,包括SOAP和REST两种常见的实现方式。
二、SOAP实现方式1. SOAP(Simple Object Access Protocol)是一种基于XML的协议,用于在Web服务之间进行通信。
它使用了HTTP作为传输协议,并使用XML格式来封装数据。
SOAP提供了一种标准的方法调用机制,使得不同平台、不同语言的应用程序之间可以相互通信。
2. SOAP的实现方式主要包括以下步骤:a. 定义Web服务的接口和操作:使用WSDL(Web Services Description Language)来定义Web服务的接口和操作,包括输入参数、输出参数、操作名称等信息。
b. 生成SOAP消息:根据WSDL文件生成SOAP消息,将请求参数封装成XML格式的消息体,并使用HTTP协议发送给Web服务。
c. 解析SOAP消息:Web服务接收到SOAP消息后,解析XML格式的消息体,并根据其中的操作名称来调用相应的方法。
d. 处理请求并返回结果:Web服务根据请求的操作名称和参数,调用相应的方法进行处理,并将结果封装成XML格式的消息体,返回给客户端。
三、REST实现方式1. REST(Representational State Transfer)是一种轻量级的Web服务架构,它使用HTTP协议进行通信,不需要额外的协议和格式。
REST使用URL来定位资源,使用HTTP的GET、POST、PUT和DELETE等方法来操作资源。
2. REST的实现方式主要包括以下步骤:a. 定义资源的URL:根据业务需求,定义资源的URL,包括资源的名称和标识符。
【案例】Springboot开发WebService服务端和客户端环境说明Java JDK 1.8、Spring boot 2.1.6、Apache CXF 3.1.6POM依赖<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.1.6</version></dependency><dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-frontend-jaxws</artifactId><version>3.1.6</version></dependency><dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-transports-http</artifactId><version>3.1.6</version></dependency></dependencies>服务端webService接⼝使⽤@WebService声明式注解声明这是⼀个webService接⼝,并设置:name:服务名称targetNamespace:命名空间,通常是接⼝的包名倒序注解@WebMethod是声明接⼝⽅法,可以通过operationName为接⼝⽅法设置别名,默认是⽅法名。
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();如果已经知道调用的服务在本地时,我们可以采取下面方法(本地传输)来调用,这种方法可以提高调用服务的速度,减少调用服务的延迟时间。
在eclipse 中创建webservice项目方法一:使用xfire支持1.创建Dynamic Web Project 项目:2.将编译路径改为项目/web-INF/classes;3.将META-INF 文件夹移动到src下面,并在META-INF 中创建xfire文件夹,文件夹内放入services.xml文件;4.添加xfire支持的jar包:5.编写web.xml:7.编写services.xml可以存在多个service;8.访问http://localhost:port/projectName/services/url-pattern?wsdl(蓝色字体均为相应的内容);方法二:使用Axis2支持1.1Axis2发行包Axis2以多个发行包发行。
你需要哪个视你所需决定。
1.1.1标准二进制发行包如果你正在开发服务和应用程序,你需要Axis2标准二进制发行包。
这个发行包包括所有必要的*.jar文件,以及很多便于开发用的脚本。
它具有以下结构。
Axis2标准二进制发行包目录的结构binaxis2.bataxis2.shaxis2server.bataxis2server.shjava2wsdl.batjava2wsdl.shwsdl2java.batwsdl2java.shsetenv.shlibactivation-1.1.jar...XmlSchema.jarrepositorymodulesmodules.listaddressing-1.1.mar...servicesservices.listversion.aar...samples...webapp...confaxis2.xmlLICENSE.txtREADME.txtNOTICE.txtINSTALL.txtrelease-notes.htmlbin目录包括一些有用的脚本。
它们包括axis2.bat(或者axis2.sh),这个文件可以让你在不手工添加Axis2 jar文件到类路径的情况下方便的执行Java命令;java2wsdl.bat(和.sh)和wsdl2java.bat(和.sh),它可以让你轻易的从一个WSDL文件生成Java代码,反之亦然;axis2server.bat(和sh),一个简易Web服务器,它可以让你早自己的应用程序中搭建Axis2的功能来发送接收消息。
.net framework调用webservice接口步骤.NET Framework是用于构建Windows应用程序的一个开发平台,它支持多种编程语言,如C#, 等。
通过.NET Framework,我们可以方便地调用Web服务接口来实现与远程服务器的交互。
在调用WebService接口之前,首先需要确保已将WebService引用添加到项目中。
在Visual Studio中,可以通过以下步骤来添加WebService引用:1.打开Visual Studio,创建一个新的项目或打开现有项目。
2.在“解决方案资源管理器”窗口中,右键单击项目,选择“添加”>“服务引用”。
3.在“添加服务引用”对话框中,输入WebService的URL地址,然后点击“Go”按钮。
4.在列表中选择要引用的WebService,点击“确定”按钮。
完成上述步骤后,我们可以开始调用WebService接口了。
下面是调用WebService接口的详细步骤:1.创建WebService代理类在项目中,Visual Studio会自动生成一个与WebService接口对应的代理类,该代理类将WebService的各个方法作为类的成员。
使用该代理类可以方便地调用WebService接口。
2.实例化WebService代理类在代码中,我们首先需要实例化WebService代理类,可以通过以下方式实现:```csharpMyWebService.MyWebServiceSoapClient webService = new MyWebService.MyWebServiceSoapClient();```3.调用WebService接口的方法通过实例化的WebService代理类,我们可以方便地调用WebService接口的方法,例如:```csharpstring result = webService.GetUserInfo("123456");```4.处理WebService接口的返回值WebService接口的返回值可能是一个简单类型,如字符串、整数等,也可能是一个复杂类型,如自定义的类对象。
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@很高兴能和你探讨.。
Webservice接口调用方式简介一、什么是Webservice接口?Webservice是一种基于网络的通信协议,用于不同应用程序之间的数据交换。
它使用标准的HTTP协议传输数据,并通过XML格式进行数据封装和传递。
Webservice接口提供了一种跨平台、跨语言的数据交互方式,使得不同系统之间可以方便地进行数据交流和共享。
二、Webservice接口的调用方式Webservice接口的调用方式有多种,常见的有以下几种:1. SOAP调用方式SOAP(Simple Object Access Protocol)是一种基于XML的通信协议,用于在Web上交换结构化的和类型化的信息。
SOAP调用方式是Webservice接口最常见的调用方式之一。
SOAP调用方式的特点是使用XML格式封装请求和响应数据,并使用HTTP协议进行传输。
在SOAP调用中,客户端通过发送一个SOAP请求给服务端,服务端接收到请求后进行处理,并将处理结果封装在一个SOAP响应中返回给客户端。
SOAP调用方式的优点是使用了标准的HTTP协议和XML格式,具有跨平台、跨语言的特性,可以方便地实现不同系统之间的数据交换和共享。
2. RESTful调用方式RESTful(Representational State Transfer)是一种基于HTTP协议的架构风格,用于构建网络上的分布式系统。
RESTful调用方式是Webservice接口中另一种常见的调用方式。
RESTful调用方式的特点是使用HTTP的GET、POST、PUT、DELETE等方法来进行资源的操作。
客户端通过发送HTTP请求给服务端,服务端根据请求的方法进行相应的处理,并将处理结果以HTTP响应的形式返回给客户端。
RESTful调用方式的优点是简单、轻量级,易于理解和使用。
它适用于构建简单的、无状态的接口,特别适合移动应用和Web前端的调用。
3. JSON-RPC调用方式JSON-RPC(Remote Procedure Call)是一种基于JSON格式的远程过程调用协议,用于在网络上调用远程方法。
详解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的集成可以说是⾮常地好。
X F i r e与S p r i n g集成W e b S e r v i c e客户端的两种开发方式
XFire与Spring集成时WebService客户端的两种开发方式方式①、借助Spring并通过WSDL文件创建WebService客户端1package com.jadyer.client;
2import java.io.IOException;
3import org.codehaus.xfire.client.Client;
4import org.springframework.core.io.ClassPathResource;
5import org.springframework.core.io.Resource;
6
7/**
8 * 此时应该将服务方提供的WSDL文件,拷贝到src目录下,即可
9 */
10public class ClientUseSpringFromWSDL {
11public static void main(String[] args) throws IOException, Exception {
12new ClientUseSpringFromWSDL().generatedClient();
13 }
14
15public void generatedClient() throws IOException, Exception {
16// 拷贝到src目录下的对应的WSDL文件
17 String wsdl = "HelloService.wsdl";
18// 装载WSDL文件
19 Resource resource = new ClassPathResource(wsdl);
20// 根据WSDL创建客户端实例
21 Client client = new Client(resource.getInputStream(), null);
22// 调用特定的Web Service方法
23 Object[] result = client.invoke("sayHello", new Object[]{"玄玉"});
24// 输出服务端方法的返回结果
25 System.out.println(result[0]);
26 }
27}
方式②、借助Spring并通过WSDL访问地址创建WebService客户端28package com.jadyer.client;
29import java.util.List;
30import org.springframework.context.ApplicationContext;
31import org.springframework.context.support.ClassPathXmlApplicationContext;
32import com.jadyer.model.Person;
33import er;
34import com.jadyer.server.HelloService;
35
36/**
37 * 此时服务方应该提供给我们两个东西:所提供的服务的接口和WSDL访问地址
38 * 然后我们自己再在src目录下创建一个client.xml文件,用于被客户端调用
39 */
40public class ClientUserSpringFromXML {
41public static void main(String[] args) {
42new ClientUserSpringFromXML().generatedClient();
43 }
44
45public void generatedClient() {
46 ApplicationContext ctx = new ClassPathXmlApplicationContext("client.xml");
47 HelloService helloService = (HelloService) ctx.getBean("XFireServerDemo");
48
49//测试sayHello()方法
50 System.out.println(helloService.sayHello("玄玉"));
51
52//测试getPerson()方法
53 User uu = new User();
54 uu.setName("杨过");
55 Person pp = helloService.getPerson(uu);
56 System.out.println(pp.getName());
57
58//测试getPersonList()方法
59 List<Person> personList = helloService.getPersonList(24, "万人往");
60for(Person p : personList){
61 System.out.println(p.getName());
62 }
63 }
64}
接下来是用到的client.xml文件
65<?xml version="1.0"encoding="UTF-8"?>
66<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "/dtd/spring-beans.dtd">
67<beans>
68<bean id="XFireServerDemo"class="org.codehaus.xfire.spring.remoting.XFireClientFactoryBean"> 69<property name="serviceClass">
70<value>com.jadyer.server.HelloService</value>
71</property>
72<property name="wsdlDocumentUrl">
73<value>http://127.0.0.1:8080/XFire_Spring_03/services/HelloService?wsdl</value>
74</property>
75</bean>
76</beans>
77<!--
78这是一个用于被客户端调用的Spring配置文件,这里定义了一个XFireServerDemo的bean
79该bean访问wsdlDocumentUrl为http://127.0.0.1:8080/XFire_Spring_02/XFireServer.ws?wsdl的WSDL 80-->
最后是服务方提供的接口以及接口所用到的VO类
81package com.jadyer.server;
82import java.util.List;
83import com.jadyer.model.Person;
84import er;
85
86/**
87 * 暴露成web服务的接口类
88 */
89public interface HelloService {
90public String sayHello(String name); //简单对象的传递
91public Person getPerson(User u); //对象的传递
92public List<Person> getPersonList(Integer age, String name); //List的传递93}
94
95
96package com.jadyer.model;
97/**
98 * 接口用到的VO类
99 */
100public class User {
101private String name;
102/*--getter和setter略--*/
103}
104
105
106package com.jadyer.model;
107/**
108 * 接口用到的VO类
109 */
110public class Person {
111private Integer age;
112private String name;
113/*--getter和setter略--*/
114}。