版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、接口开发目录接口开发培训文档.11.Webservice 接口开发 .21.1WebService 简介 .21.2WebService 优越性 .21.3AxisAxis2 简介 .21.3.2Axis2 服务端发布 .31.3.3Axis2 客户端 .91.4Jdk1.6+自带 webservice .101.4.1简介 .101.4.2服务端开发与发布 .101.4.3客户端开发 .131.5CXF.141.5.1CXF简介 .141.5.2CXF下载 .141.5.3CXF服务端 .151.5.4CXF客户端 .162.FTP接口开发.182.1创建 FtpClient
2、 实例 .182.2获取 ftp 服务器连接、登录、切换远程路径.182.3FTP上传 .192.4FTP下载 .192.5关闭 FtpClient 实例 .203.Socket 接口开发 .203.1客户端 / 服务端工作模式 .203.2TCP 协议和 UDP 协议 .203.3Socket 概况 .213.4服务端创建 .213.5客户端创建 .221.Webservice接口开发1.1 WebService 简介Web Service是一种新的Web应用程序分支,他们是自包含、自描述、模块化的应用,可以发布、定位、通过Web调用。 WebService可以执行从简单的请求到复杂商务处理
3、的任何功能。一旦部署以后,其他Web Service应用程序可以发现并调用它部署的服务。WebService是一种应用程序,它运用了Web网络技术和基于组件开发的精华成分。可以使用标准的互联网协议,像超文本传输协议(HTTP) 和 XML,将功能纲领性地体现在互联网和企业内部网上。像DCOM、 RMI、 IIOP 等基于组件的对象模型已经流行了较长一段时间了。然而这些模型都是依赖于一个特定的对象模型协议。WebService扩展了这些模型,使之可以和简单对象访问协议(Simple Object Access Protocol, SOAP)以及 XML通信以根除特定对象模型协议带来的障碍。可将W
4、ebService 视作 Web上的组件编程。简单来说,Webservice就是一个应用程序,它向外界暴露出一个能够通过Web进行调用的接口。目前常用的webService框架有AXIS、 XFIRE、 CXF1.2 WebService 优越性WebService 有以下的优越性:1 平台无关。不管你使用什么平台,都可以使用Web service。2 编程语言无关。只要遵守相关协议,就可以使用任意编程语言,向其他网站要求Webservice。这大大增加了web service的适用性,降低了对程序员的要求。3 对于Web service提供者来说,部署、升级和维护Web service都非常
5、单纯,不需要考虑客户端兼容问题,而且一次性就能完成。4 对于Web service使用者来说,可以轻易实现多种数据、多种服务的聚合(mashup)1.3 Axis21.3.1 Axis2简介Axis2 是目前比较流行的 WebService 引擎。 WebService 被应用在很多不同的场景。例如,可以使用 WebService 来发布服务端 Java 类的方法,以便使用不同的客户端进行调用。这样可以有效地集成多种不同的技术来完成应用系统。WebService 还经常被使用在SOA中,用于SOA各个部分交换数据。1.3.2 Axis2服务端发布 项目集成 Axis2要在自己项目
6、中使用Axis2 进行 webservice 接口的开发,首先需要将axis2 与项目工程进行集成,这样便于之后的接口服务端的开发与发布。1 开发环境: apache tomcat6.0+ 、 jdk1.6+ 、 axis2-1.6+, tomcat6.0以上版本与axis2-1.5版本不兼容。2 下载 axis2-1.6.2-war.zip,地址: /axis2/java/core/download.cgi3 将下载后的zip 包解压缩,进一步讲里面的axis2.war 解压缩,将两个目录copy 到项目工程的根目录下,将WEB-INF 下的四个目录
7、copy 到项目工程的WEB-INF下4 如果想使用无配置文件的方式进行服务的发布的话,接下来需要将的 class 文件 (包含 class 的包路径, org/ apache/axis2.)打成 jarWEB-INF/ classes 下包添加到项目功能的lib下,5 项目工程web.xml 文件中配置如下:<!-Axis2 config start-><servlet><servlet-name>AxisServlet</servlet-name> <servlet-class>org.apache.axis2.transport
8、.http.AxisServlet</servlet-class> <load-on-startup>1</load-on-startup></servlet><!如果需要使用无配置文件的方式进行服务的发布,则需要配置该servlet -><servlet><servlet-name>AxisAdminServlet</servlet-name><display-name>Apache-Axis AxisAdmin Servlet (Web Admin)</display-name
9、><servlet-class>org.apache.axis2.webapp.AxisAdminServlet</servlet-class></servlet><servlet-mapping><servlet-name>AxisServlet</servlet-name><url-pattern>/services/*</url-pattern></servlet-mapping><servlet-mapping><servlet-name>AxisA
10、dminServlet</servlet-name><url-pattern>/axis2-admin/*</url-pattern></servlet-mapping><!-Axis2end-> 手动配置发布1 编写服务端程序代码,举例如下 package com.neusoft.axis2; import com.neusoft.model.User; public class Asix2Service public String getName() return "xiaoming"Asix2S
11、ervice.java:public String sayHello(String name) return "hello " + name;public int login(User user) System.out.println(user.getName();return 1;public User getUser(String name, String sex, int age) return new User(name,age,sex);2 在项目工程WEB-INFservices 目录下创建Asix2ServiceMETA-INFservices.xml 文件,
12、文件内容如下:<?xml version="1.0" encoding="UTF-8"?><service name="Asix2Service"><description> Asix2Service Service Example </description><parameter name="ServiceClass"> com.neusoft.axis2.Asix2Service </parameter> <operation nam
13、e="getName"><messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" /></operation><operation name="sayHello"><messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" /> </operation><opera
14、tion name="login"><messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" /></operation><operation name="getUser"><messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" /></operation></
15、service>3 启动 tomcat 服务器,访问http:/ip:port/projectName/services/Asix2Service?wsdl4 使用该方式进行服务的发布,需要进行服务器的重启才能生效。 无需配置发布1 下载 eclipse 插件,地址: /axis2/java/core/tools/index.html下载后将插件安装到eclipse2 编写服务端程序代码,举例如下Axis2ServiceNoConfig.java:package com.neusoft.axis2;public class Axis
16、2ServiceNoConfig public String doSth(String sth) System.out.println(sth);return sth;3 使用 axis2 的 eclipse 插件 serviceArchiveWizard 工具生成aar 文件点击工作空间WorkSpace,右键 New选择 Other选择 Axis2 Service Archiver,点击 Next然后点击 Browser 选择你当前的工程的classes目录点击 Next没有 WSDL,选择第一项,点击Next ,然后再Next 一次不用设置 service.xml,直接 Next最关键一
17、步,填写WebService 的 Name,设置 class路径点击Load 就能看到当前class的方法勾中的方法表示将会被暴露到客户端可以调用的方法,然后点击Next设置 aar 文件的名称和保持的目录点击 Finish你可以看到提示successfully的提示。刷新当前工程可以看到Axis2ServiceNoConfig.aar文件了4 在浏览器中访问地址http:/ip:port/projectName/axis2-web/index.jsp点击 Administration , 可以看到要输入用户名和密码,用户名和密码在WEB-INFconf下的 axis2.xml中可以找到<
18、;parameter name="userName">admin</parameter><parameter name="password">axis2</parameter>5 进入管理页面后,可以看到如下功能6 使用 Upload Service这个工具,然后选择我们刚才用axis2 的工具生成aar 文件 ,upload上传。其实这一步我们可以直接将Axis2ServiceNoConfig.aar文件 copy 到 WEB-INFservices这个目录下。7 然后点击Available Service就可
19、以看到Axis2ServiceNoConfig这个 Service了1.3.3 Axis2客户端以下客户端使用动态生成客户端的开发方式,无需手动使用工具根据wsdl 生成客户端代码,String url = "http:/ip:port/projectName/services/Axis2ServiceNoConfig"String method = "doSth"/ 参数,如果有多个,继续往后面增加即可,不用指定参数的名称Object args = new Object "hello"String classes = new Cla
20、ss String.class ;RPCServiceClient serviceClient = new RPCServiceClient();Options options = serviceClient.getOptions();EndpointReference targetEPR = new EndpointReference(url);options.setTo(targetEPR);/在创建 QName 对象时, QName 类的构造方法的第一个参数表示WSDL 文件的命名空间名,也就是 <wsdl:definitions> 元素的 targetNamespace 属
21、性值QName qName = new QName("", method);/返回参数类型,这个和axis1 有点区别/ invokeBlocking 方法有三个参数,其中第一个参数的类型是QName 对象,表示要调用的方法名;/第二个参数表示要调用的WebService 方法的参数值,参数类型为Object ;/第三个参数表示 WebService 方法的返回值类型的 Class对象,参数类型为 Class。/当方法没有参数时,invokeBlocking 方法的第二个参数值不能是null ,而要使用 newObject/如果被调用的WebService 方法没有返回值,
22、应使用RPCServiceClient 类的 invokeRobust方法,/ 该方法只有两个参数,它们的含义与invokeBlocking 方法的前两个参数的含义相同String result = (String) serviceClient.invokeBlocking(qName, args, classes)0;1.4 Jdk1.6+ 自带 webservice1.4.1 简介JDK1.6+中自带了 webservice的功能,因为集成了JAX-WS,在开发 webservice接口时非常方便,不需要引入第三方jar包。1.4.2 服务端开发与发布1.服务端程序代码举例如下JdkSer
23、viceImpl.java:WebService(name="JdkServic",portName="JdkServicPort",serviceName="JdkServicName",targetNamespace="")SOAPBinding(style = Style.RPC,use = Use.LITERAL)public class JdkServiceImpl implements IJdkService OverrideWebMethod(action="doService",
24、 operationName="doJdkService")WebResult(name="String", partName="result")public String doJdkService(WebParam(name = "paramA") String args)System.out.println(args);return args;2. 发布服务Endpoint.publish("17:8888/jdk16Service", new JdkServi
25、ceImpl();Jdk 自带 webservice的功能实现主要通过注解的方式,注解内容详解如下:1. WebService注释规则信息注释目标: class 类属性:-name 对应 wsdl:portType 的名称,缺省值为 Java 类或接口的非限定名称。 (字符串)-targetNamespace 指定从 WebService 生成的 WSDL和 XML元素的 XML名称空间。缺省值为从包含该 WebService 的包名映射的名称空间。 (字符串)-serviceName指定 WebService 的服务名称: wsdl:service。缺省值为 Java 类的简单名称+Serv
26、ice 。(字符串)-portName wsdl:portName。缺省值为WebS+Port 。(字符串)-endpointInterface指定用于定义服务的抽象WebService 约定的服务端点接口的限定名。如果指定了此限定名,那么会使用该服务端点接口来确定抽象WSDL约定。(字符串)-wsdlLocation指定用于定义WebService 的 WSDL文档的 Web地址。 Web地址可以是相对路径或绝对路径。 (字符串)2. WebMethod注释表示作为一项 WebService 操作的方法。仅支持在使用 WebService来注释的类上使用 WebMeth
27、od。注释目标:方法属性:-operationName指定与此方法相匹配的wsdl:operation的名称,缺省值为Java 方法的名称。(字符串)-action定义此操作的行为。对于 SOAP绑定, 此值将确定SOAPAction 头的值。 缺省值为 Java 方法的名称。(字符串)-exclude指定是否从WebService 中排除某一方法。缺省值为false 。(布尔值)3. WebParam注释用于定制从单个参数至 WebService 消息部件和 XML元素的映射。注释目标:参数属性:-name 参数的名称。如果操作是远程过程调用(RPC)类型并且未指定partName 属性,那
28、么这是用于表示参数的 wsdl:part属性的名称。 如果操作是文档类型或者参数映射至某个头,那么 -name 是用于表示该参数的 XML元素的局部名称。如果操作是文档类型、参数类型为 BARE并且方式为 OUT或 INOUT,那么必须指定此属性。 (字符串)-partName 定义用于表示此参数的wsdl:part属性的名称。 仅当操作类型为 RPC或者操作是文档类型并且参数类型为BARE时才使用此参数。 (字符串)-targetNamespace 指定参数的XML元素的 XML名称空间。当属性映射至XML元素时,仅应用于文档绑定。缺省值为WebService 的 targetNamespa
29、ce 。(字符串)-mode 此值表示此方法的参数流的方向。有效值为IN、 INOUT和 OUT。(字符串)-header 指定参数是在消息头还是消息体中。缺省值为false 。(布尔值)4. WebResult注释用于定制从返回值至 WSDL部件或 XML元素的映射。注释目标:方法属性:-name 当返回值列示在 WSDL文件中并且在连接上的消息中找到该返回值时,指定该返回值的名称。 对于 RPC绑定,这是用于表示返回值的 wsdl:part 属性的名称。 对于文档绑定,-name 参数是用于表示返回值的 XML元素的局部名。 对于 RPC和 DOCUMENT/WRAPPED 绑定,缺省值为
30、 return 。对于 DOCUMENT/BARE绑定,缺省值为方法名 +Response。(字符串)-targetNamespace指定返回值的XML名称空间。仅当操作类型为RPC或者操作是文档类型并且参数类型为BARE时才使用此参数。 (字符串)-header指定头中是否附带结果。缺省值为false 。(布尔值)-partName指定 RPC或 DOCUMENT/BARE操作的结果的部件名称。缺省值为WebR。(字符串)5. SOAPBinding注释指定 WebService 与 SOAP消息协议之间的映射。注释目标:类型或方法属性:-style 定义发送至 WebS
31、ervice 和来自 WebService 的消息的编码样式。有效值为DOCUMENT和 RPC。缺省值为DOCUMENT。(字符串)-use定义用于发送至WebService 和来自 WebService 的消息的格式。 缺省值为 LITERAL。ENCODED在 FeaturePackforWebServices中不受支持。(字符串)-parameterStyle确定方法的参数是否表示整个消息体,或者参数是否是封装在执行操作之后命名的顶级元素中的元素。有效值为WRAPPED或 BARE。对于 DOCUMENT类型的绑定只能使用BARE值。缺省值为WRAPPED。(字符串)1.4.3 客户端
32、开发Jdk 提供了一个wsimport工具,在 jdk/bin目录下,这个工具可以生成JAVA客户端的调用代码,进入DOS下,执行wsimport -s e:/test -keep17:8888/jdk16Service?wsdl命令,便可在 e:/test目录下生成客户端代码,根据上面举例的服务端生成的客户端java文件如下:客户端代码如下:JdkServicName jsn = new JdkServicName();jsn.getJdkServicPort().doJdkService("doJdkService." );由上面的例子,可
33、以看出使用 jdk1.6+ 自带的 webservice 功能,开发非常方便,代码也非常简洁。1.5 CXF1.5.1 CXF简介Apache CXF = Celtix + XFire, Apache CXF的前身叫Apache CeltiXfire,现在已经正式更名为ApacheCXF 了,以下简称为CXF 。CXF 继承了Celtix和 XFire两大开源项目的精华,提供了对JAX-WS 全面的支持,并且提供了多种Binding、DataBinding、Transport以及各种Format的支持, 并且可以根据实际项目的需要,采 用 代 码 优 先 ( Code First) 或 者WS
34、DL 优 先 ( WSDL First) 来 轻 松 地 实 现WebServices的发布和使用。Apache CXF 已经是一个正式的Apache 顶级项目。1.5.2 CXF下载下载地址:/download.html将下载的 apache-cxf-2.7.0.zip 压缩包解压,将 lib 目录下的 jar 包导入到项目工程中,至少包含以下 jar 包:1.5.3 CXF服务端接口程序编写与jdk自带 webservice服务端编写相同,同样采用注解的方式,程序代码举例如下:1 接口类IHelloWorld.javaWebServicepublic
35、 interface IHelloWorld WebMethodString sayHello(WebParam(name="name") String name);2 实现类HelloWorldImpl.javaWebServicepublic class HelloWorldImpl implements IHelloWorld Overridepublic String sayHello(String name) System.out.println("sayHello is called by " + name);return "hel
36、lo " + name;3 发布服务IHelloWorld helloWorld = new HelloWorldImpl();/ 创建 WebService 服务工厂JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean();/ 注册 WebService 接口factory.setServiceClass(IHelloWorld.class);/ 发布接口factory.setAddress("17:8888/HelloWorld");factory.setServi
37、ceBean(helloWorld);/ 创建 WebServicefactory.create();1.5.4 CXF客户端1. 动态客户端该方式主要使用了JaxWsDynamicClientFactory工厂类,代码开发比较简单, 但是性能较低,以下代码中在createClient操作中, 会动态生产webservice下所有方法类、 参数类、 返回值类等等文件,代替了手动使用命令生成客户端文件的步骤,耗时很大,所以会很慢。String url = "17:8888/HelloWorld?wsdl"/ 创建工厂实例JaxWsDynamicC
38、lientFactory dcf = JaxWsDynamicClientFactory.newInstance ();org.apache.cxf.endpoint.Client client = dcf.createClient(url); HTTPConduit http = (HTTPConduit) client.getConduit(); HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();/ 连接超时httpClientPolicy.setConnectionTimeout(60000);/ 取消块编码httpCl
39、ientPolicy.setAllowChunking( false);/ 响应超时httpClientPolicy.setReceiveTimeout(60000);http.setClient(httpClientPolicy);Objectobjects= client.invoke( "sayHello" , "jack" );2. 生成 java 客户端代码1) 下载的 apache-cxf-2.7.0.zip包中, bin 目录下是 cxf 提供的工具,将解压缩后的apache-cxf-2.7.0目录 copy 到相应的磁盘目录下,如D:pr
40、ograms2) 配置 cxf 环境变量创建一个CXF_HOME变量,值为 CXF框架所在根目录 (如 D:programsapache-cxf-2.7.0);配置 CLASSPATH: %CXF_HOME%lib; PATH: %CXF_HOME%bin;3) 执行命令,生成客户端代码进入 DOS模式下,执行 wsdl2java -p com.neusoft.cxf -d e:test -client 17:8888/HelloWorld?wsdl将生成的客户端代码 copy 到项目工程下,如下图:编写客户端调用代码,CxfClien.java文件,代码如下:IHelloWorldService hs = new IHelloWorldService();String result = hs.getIHelloWorldPort().sayHello( "jack");4) CXF wsdl2java 命令详解 wsdl2java -p com -d src -all aa.wsdl-p指定其 wsdl 的命名空间,也就是要生成代码的包名:-d指定要产生代码所在目录-client生成客户端测试web service的代码-server生成
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年水果保鲜包装盒研发与全国市场销售合同2篇
- 二零二五年度肉类产品购销框架合同
- 2025年度航空行李托运售后服务合同样本3篇
- 二零二五年度软件性能优化合同
- 2025年度厂房租赁合同样本:电子信息产业专用4篇
- 2025年水产品电商平台用户数据合作协议书3篇
- 二零二五年度毛阳中心学校校园绿化养护合同4篇
- 二零二五年度落户手续办理特色服务合同4篇
- 2025年度智能场馆租赁保证金合同书4篇
- 二零二五年度荒山承包与农业综合开发合同
- 2024义务教育体育与健康课程标准(2022年版)必考题库及答案
- 工业机器人控制器:FANUC R-30iB:机器人实时监控与数据采集技术教程
- 墓地销售计划及方案设计书
- 新加坡留学完整版本
- 劳务服务合作协议书范本
- 优佳学案七年级上册历史
- 中医五脏心完整版本
- 智能音箱方案
- 铝箔行业海外分析
- 京东商城物流配送现状及对策分析
- 超市连锁行业招商策划
评论
0/150
提交评论