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">
webService1
index.html
index.htm
index.jsp
default.html
default.htm
default.jsp
ApacheCXFEndpoint
cxf
cxf
org.apache.cxf.transport.servlet.CXFServlet
1
cxf
/services/*
60
contextConfigLocation
WEB-INF/beans.xml
org.springframework.web.context.ContextLoaderListener
(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));
}
}