Web Service简单开发例子内附源码.docx
- 文档编号:28195724
- 上传时间:2023-07-09
- 格式:DOCX
- 页数:16
- 大小:259.61KB
Web Service简单开发例子内附源码.docx
《Web Service简单开发例子内附源码.docx》由会员分享,可在线阅读,更多相关《Web Service简单开发例子内附源码.docx(16页珍藏版)》请在冰豆网上搜索。
WebService简单开发例子内附源码
WebService开发简单了解及应用
1、实验/实习过程
WebService开发1
(1)实验目的
1、通过实验,熟悉SOAP的基本结构与功能;
2、通过实验,掌握WSDL的作用、构成;
3、利用CXF开发WebService;
(2)实验内容及要求
1、安装XML的编辑环境XMLSPY2012,并熟悉XMLSPY的工作环境;
2、通过XMLSPY软件,了解WSDL、SOAP的结构;
①在中选择一个服务(自选),并用XMLSPY软件打开该服务的WSDL文档,观察该文档的结构。
实验过程中我选择的是英汉翻译服务,该EnglishChinese.asmx>wsdl的文档结构如图1:
图1EnglishChinese?
wsdl
②在SOAP菜单中,创建一个选定的WebService的SOAP请求,观察该请求SOAP的结构,并修改调用参数值。
然后向服务器发送请求,并观察服务器返回的响应SOAP文档。
输入WSDL文件位置路径,获得WSDL文档如图2:
图2获取WSDL文档
选择了服务和端口后选择一个SOAP操作,即实现类中的一个具体方法,如图3:
图3选择SOAP操作
SOAP请求文档如图4:
图4SOAP请求文档
SOAP返回文档如图5:
图5SOAP返回文档
(3)利用CXF包,采用代码优先的方式开发WebService。
该服务中包含用来计算两个数的和、差与积的功能。
①源代码见附录1
②XMLSpy2012测试结果
获取服务的WSDL(calculator?
wsdl)文档,如图6:
图6calculator?
wsdl文档
选择操作即具体实现类的方法,如图7:
图7calculator服务提供的方法
SOAP请求文档如图8:
图8SOAP请求文档
SOAP响应文档如图9:
图9SOAP响应文档
③编写客户端程序测试如图10:
图10客户端程序测试calculatorWebService服务
WebService开发2
(1)实验目的
1、通过实验,掌握CXF发布WebServicer的技术;
2、通过实验,掌握CXF开发WebService客户端的方法;
3、通过实验,熟悉VisualStudio中C#语言调用WebService的方法;
(2)实验内容及要求
1、将上次实验中开发的“用来计算两个数的和、差与积的功能”Web服务的基础上,扩展两种运算(自选),并通过CXF的Servlet方式发布到Tomcat上;
通过CXF的Servlet发布到Tomcat如图11:
图11发布到WebService上的服务
服务调用测试如图12:
图12服务调用测试
2、利用CXF包中的wsdl2java工具,生成调用本WebSever的桩代码,并编写代码调用本WebSever的功能来进行计算(要求测试所有的计算功能)。
①源代码见附录2
②桩代码:
Wsdl2java-pClient-dG:
\eclipseWithJDK_WorkSpace\webService1\src\Clienthttp:
//localhost:
8080/calculatorimpl?
wsdl
③根据WSDL文档生成的java客户端程序如图13:
图13客户端java代码
④编写代码测试本服务的所有计算功能如图14:
图14计算功能测试结果
3、在VisualStudio中,编写代码调用本WebSever的功能来进行计算(要求测试所有的计算功能)。
2、实验/实习总结
实验过程中出现了很多问题也学到了很多东西。
首先是关于WebService的开发,WebService开发过程第一步是先编写要发布服务的接口类;第二步根据接口类编写具体的实现类;第三步发布WebService。
在第三步中可以有两种发布方式,首先是JDK直接支持的Endpoint发布方法,还有是CXF支持的Spring集成发布。
需要注意的是Endpoint发布方法JDK可以直接支持但是CXF也可以支持,但是后一种发布方式只能是基于CXF的。
WebService的两种发布方式都可以被客户访问但是区别是JDK支持的发布端口号不能是8080如果放在web工程中需要两个端口号支持,但是基于CXF的发布方式只需要8080端口支持即可。
然后是关于WebService调用的理解。
WebService调用必须有的文档是WSDL文档,可以是本地的也可以是远程访问。
通过wsdl2java工具将WSDL文档转换成java客户端代码,然后利用桩代码编写你需要实现的程序,并且在调用别人写的WebService服务时候要学会看WSDL文档结构。
还有WebService是平台独立的也就是WebService开发的语言可以和客户端程序语言不一致。
附录1基于CXF代码优先方式开发WebService相关源码
(1)服务接口Calculator类:
packagews;
importjavax.jws.WebService;
/*
*描述:
WebService服务接口类
*/
@WebService
publicinterfaceCalculator{
publicintaddition(inta,intb);
publicintsubtraction(inta,intb);
publicintmultiplication(inta,intb);
}
(2)接口实现类CalculatorImpl类:
packagews;
/*
*WebService的具体实现类
*/
publicclassCalculatorImplimplementsCalculator{
@Override
publicintaddition(inta,intb){
//TODOAuto-generatedmethodstub
returna+b;
}
@Override
publicintsubtraction(inta,intb){
//TODOAuto-generatedmethodstub
returna-b;
}
@Override
publicintmultiplication(inta,intb){
//TODOAuto-generatedmethodstub
returna*b;
}
}
(3)服务发布类:
packagews;
importjavax.xml.ws.Endpoint;
/*
*WebService服务
*/
publicclassServer{
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
Calculatorservice=newCalculatorImpl();
Stringaddress="http:
//localhost:
8080/calculator";
Endpoint.publish(address,service);
}
}
(4)客户端程序测试类:
packageClient;
importorg.apache.cxf.jaxws.JaxWsProxyFactoryBean;
publicclassClientTest{
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
JaxWsProxyFactoryBeanfactory=newJaxWsProxyFactoryBean();
factory.setServiceClass(Calculator.class);
factory.setAddress("http:
//localhost:
8080/calculator?
wsdl");
Calculatorservice=(Calculator)factory.create();
System.out.println("addition(2,3)");
System.out.println(service.addition(2,3));
System.out.println("subtraction(33,22)");
System.out.println(service.subtraction(33,22));
System.out.println("multiplication(2,3)");
System.out.println(service.multiplication(2,3));
}
}
附录2基于CXF的Servlet发布到tomcat相关源码
(1)服务接口Calculator类:
packagews;
importjavax.jws.WebService;
/*
*描述:
WebService服务接口类
*/
@WebService
publicinterfaceCalculator{
publicintaddition(inta,intb);
publicintsubtraction(inta,intb);
publicintmultiplication(inta,intb);
publicdoubledivision(inta,intb);
publicinttakeOver(inta,intb);
}
(2)接口实现类CalculatorImpl类:
packagews;
importjavax.jws.WebService;
/*
*WebService的具体实现类
*/
@WebService(targetNamespace="http:
//ws/",endpointInterface="ws.Calculator",portName="CalculatorImplPort",serviceName="CalculatorImplService")
publicclassCalculatorImplimplementsCalculator{
@Override
publicintaddition(inta,intb){
//TODOAuto-generatedmethodstub
returna+b;
}
@Override
publicintsubtraction(inta,intb){
//TODOAuto-generatedmethodstub
returna-b;
}
@Override
publicintmultiplication(inta,intb){
//TODOAuto-generatedmethodstub
returna*b;
}
@Override
publicdoubledivision(inta,intb){
//TODOAuto-generatedmethodstub
returna/b;
}
@Override
publicinttakeOver(inta,intb){
//TODOAuto-generatedmethodstub
returna%b;
}
}
(3)Web.xml配置文件
xmlversion="1.0"encoding="UTF-8"?
>
xsi="http: //www.w3.org/2001/XMLSchema-instance"xmlns="xmlns: web="xsi: schemaLocation="id="WebApp_ID"version="2.5"> (4)beans.xml配置文件 xmlversion="1.0"encoding="UTF-8"? > //www.springframework.org/schema/beans" xmlns: xsi="http: //www.w3.org/2001/XMLSchema-instance"xmlns: jaxws="http: //cxf.apache.org/jaxws" xsi: schemaLocation="http: //www.springframework.org/schema/beanshttp: //www.springframework.org/schema/beans/spring-beans-2.5.xsdhttp: //cxf.apache.org/jaxwshttp: //cxf.apache.org/schemas/jaxws.xsd"> META-INF/cxf/cxf.xml"/> META-INF/cxf/cxf-extension-soap.xml"/> META-INF/cxf/cxf-servlet.xml"/> endpointxmlns: tns="http: //ws/"id="calculator" implementor="ws.CalculatorImpl"wsdlLocation="wsdl/calculatorimpl.wsdl" endpointName="tns: CalculatorImplPort"serviceName="tns: CalculatorImplService" address="/calculatorimpl"> features> features> endpoint> (5)客户端测试类: packageclient; importorg.apache.cxf.jaxws.JaxWsProxyFactoryBean; publicclassClientTest{ publicstaticvoidmain(String[]args){ //TODOAuto-generatedmethodstub JaxWsProxyFactoryBeanfactory=newJaxWsProxyFactoryBean(); factory.setServiceClass(Calculator.class); factory.setAddress("http: //localhost: 8080/webService1/services/calculatorimpl? wsdl"); Calculatorservice=(Calculator)factory.create(); System.out.println("addition(2,3)"); System.out.println(service.addition(2,3)); System.out.println("subtraction(33,22)"); System.out.println(service.subtraction(33,22)); System.out.println("multiplication(2,3)"); System.out.println(service.multiplication(2,3)); System.out.println("division(33,11)"); System.out.println(service.division(33,11)); System.out.println("takeover(5,3)"); System.out.println(service.takeOver(5,3)); } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Web Service简单开发例子内附源码 Service 简单 开发 例子 源码