今天继续学习web service,王老师讲了web
service中使用的wsdl(网络服务描述语言)和用于web
service实现的两个主要的框架,axis,xfire.王老师提到。axis技术要早,比较成熟和稳定。xfire在新的软件系统中比较常用。
Web Services 技术
SOAP 它把成熟的基于HTTP的WEB技术与XML的灵活性和可扩展性组合在了一起。HTTP用于实现SOAP的RPC风格的
传输,而XML是它的编码模式。一个SOAP请求的HTTP体是一个XML文档,它包含方法中[in]和[in,out]参数的值。这些
值被编码成为一个显著的调用元素的子元素,这个调用元素具有SOAPMethodNameHTTP头的方法名和名域URI。调用
元素必须出现在标准的SOAP<Envelope> 和<Body>元素内,SOAP的XML特性是为把数据类型的实例序列化成XML的编
码模式。
WSDL是 “网络服务描述语言 (Web Services Description Language)”的缩写。它是为自如地表述多种类型的网络服务
而设定,可以用于描述 SOAP 网络服务。
一个 WSDL 文件不过就是一个文件。更具体地讲,是一个 XML 文件。通常存储于你所访问的 SOAP 网络服务这个被描
述对象所在的服务器上。
在 WSDL 文件中描述了调用相应的 SOAP 网络服务的一切:
服务 URL 和命名空间
网络服务的类型 (可能是 SOAP 的函数调用,但我说过,WSDL 足够自如地去 描述网络服务的广泛内容)
有效函数列表
每个函数的参数
每个参数的类型
每个函数的返回值及其数据类型
换言之,一个 WSDL 文件告诉你调用 SOAP 所需要知道的一切。
axis 安装配置
安装JDK
安装并配置Tomcat
从官方网站
http://ws.apache.org/axis
下载最新的Axis项目打包文件,并将webapps下axis目录拷贝到Tomcat的webapps
目录下
验证Axis的安装,发布一个服务,浏览所发布的服务。
即时发布
使用即时发布首先需要一个实现服务功能的Java源文件,将其扩展名改为.jws (Java Web Service的缩写),然后将该
文件放到Tomcat下面的webapps\axis目录下即可。但是JWS的web服务发布是一个很简单的Web服务发布方式,在页面
中你不能使用包,而且由于代码是在运行期被编译的,所以在部署之后,你也很难找到错误所在。
定制发布
编写要发布为服务的java类
编译生成的class文件应该放在Tomcat下的webapps\axis\WEB-INF\classes\下面编写deploy.wsdd 文件描述服务的名称,入口等信息切换到命令航下,执行
java org.apache.axis.client.AdminClient deploy.wsdd
服务器端发布以后,客户端就可以调用其服务了,客户端的调用有三种方式
1.DLL动态接口调用方式(Dynamic Invocation Interface)
2.动态代理方式(Dynamic Proxy)
3.静态方式 (Stubs)
当前主流的两种web service技术是axis和xfire,先看一下axis的这三种方式的服务调用,ddl方式
public static void main(String [] args) {
try {
String endpoint =
"
http://localhost:8080/axis/services/test1
";
//实例化一个服务对象service
Service service = new Service();
//创建一个空的调用对象Call,设置Call的操作名称,目标地址,传入参数等等
//执行调用后即可得到返回的结果
Call call = (Call) service.createCall();
call.setTargetEndpointAddress( new java.net.URL(endpoint) );
//QName读取节点 "
http://soapinterop.org/
"是namespace
call.setOperationName(new QName("
http://soapinterop.org/
", "add3") );
Integer ret = (Integer) call.invoke( new Object[] { 1,3 } );
System.out.println( ret);
} catch (Exception e) {
System.err.println(e.toString());
}
}
动态代理方式
动态代理需要一个本地的接口作为代理
public interface ITestDynameicProxy extends Remote {
public String getMessage() throws RemoteException;
}
public static void main(String[] args) throws Exception {
String wsdlUrl = "
http://localhost:8080/axis/test/Test.jws?wsdl
";
String nameSpaceUri = "
http://soapinterop.org/
";
String serviceName = "Test1Service";
String portName = "Test1";
ServiceFactory serviceFactory = ServiceFactory.newInstance();
Service service = serviceFactory.createService(
new URL(wsdlUrl), new QName(nameSpaceUri,serviceName));
//创建代理
ITestDynameicProxy proxy = (ITestDynameicProxy)service.getPort(
new QName(nameSpaceUri,portName),ITestDynameicProxy.class);
System.out.println(proxy.getMessage());
}
通过输入wsdl地址,命名空间地址和服务名,用服务工厂创建出一个服务实例,再通过设置端口名得到一个服务类
型的服务代理对象,通过该代理,就可以直接访问web服务了。
静态方式:
按常规方式发布一个web service
得到wsdl文件
通过web页面直接另存为
通过Java2WSDL工具类生成
(java org.apache.axis.wsdl.Java2WSDL -o demo1.wsdl -l
http://localhost:8080/axis/services/demo
-n
http://www.itcast.cn/
test.Demo)
利用WSDL2Java工具类生成客户端调用代码
(java org.apache.axis.wsdl.WSDL2Java demo.wsdl -p client)
在生成的代码基础上,进行客户端的调用
public static void main(String[] args) throws ServiceException, RemoteException {
DemoServiceLocator demoService = new DemoServiceLocator();
Demo demo = demoService.getdemo();
System.out.println(demo.getMessage());
}
xfire类似Axis,也有三种客户端调用的方式
dll方式
public static void main(String[] args) throws MalformedURLException,
Exception {
Client client = new Client(
new URL("
http://localhost:8080/xfire/services/HelloWorld?wsdl
"));
Object[] results = client.invoke("example", new Object[] { "name" });
System.out.println((String) results[0]);
}
动态代理方式,这也是要学习的银联项目中要用到的
public static void main(String[] args) {
//1-制造一个service对象,来利用web service所提供的服务
Service service = new ObjectServiceFactory().create(firstPortType.class);
//2-制作一个XFire的代理工厂,有了代理之后,调用web service的方法就好像是在本地进行调用了
XFireProxyFactory factory = new XFireProxyFactory(XFireFactory.newInstance().getXFire());
//3-获取web service提供服务的网址
String sayHelloURL = "
http://localhost:8080/axis/services/Version
";
//4-开始使用web service
try {
firstPortType test = (firstPortType)factory.create(service, sayHelloURL);
String str = test.getVersion();
System.out.println(str);
} catch (Exception e) {
e.printStackTrace();
}
}
分享到:
相关推荐
org.apache.axis2.eclipse.service.plugin_1.7.8插件文件,欢迎小伙伴下载
web_ service_基于axis和xfire.rar
基于java的开发源码-Web服务框架 Apache Axis.zip 基于java的开发源码-Web服务框架 Apache Axis.zip 基于java的开发源码-Web服务框架 Apache Axis.zip 基于java的开发源码-Web服务框架 Apache Axis.zip 基于java的...
标签:axis2.eclipse.service.plugin-1.5.1-sources.jar,axis2.eclipse.service.plugin,1.5.1,sources,jar包下载,依赖包
eclipse插件 org.apache.axis2.eclipse.service.plugin_1.7.4.jar
TipTec.Developing.Web.Services.with.Apache.Axis.2005 TipTec.Developing.Web.Services.with.Apache.Axis.2005 TipTec.Developing.Web.Services.with.Apache.Axis.2005 TipTec.Developing.Web.Services.with....
标签:axis2.eclipse.service.plugin-1.5.jar,axis2.eclipse.service.plugin,1.5,jar包下载,依赖包
标签:axis2.eclipse.service.plugin-1.4.1.jar,axis2.eclipse.service.plugin,1.4.1,jar包下载,依赖包
XFire 是与Axis 2并列的新一代Web Service框架,通过提供简单的API支持Web Service各项标准协议,帮助你方便快速地开发Web Service应用。 相对于Axis来说,目前XFire相对受欢迎,加上其提供了和Spring集成的支持,在...
org.apache.axis jar org.apache.axis jar org.apache.axis jar
当你的webservice报这个错时 <Call Stack = DEBUG_FRAME = org.apache.axis2.util.JavaUtils.callStackToString(JavaUtils.java:564) DEBUG_FRAME = org.apache.axis2.description.ParameterIncludeImpl....
org.apache.axis2.jar
eclipse 4.9.0 插件org.apache.axis2.eclipse.service.plugin_1.7.8
Web_Service开发指南(axis+xfire+cxf).pdf
axis2解决 org.apache.axis2.util.JavaUtils.callStackToString问题
抛出无法找到主类:org.apache.axis.wsdl.WSDL2Java(Throws Could not find main class: org.apache.axis.wsdl.WSDL2Java)。 添加本文的jar包压缩包解压出来的所有jar包到当前使用的java.exe 命令的lib目录下的ext...
Axis开发Web Service实例,介绍AXIS的三种方法
.Web Service简介 .如何开发一个Web Service .Axis2简介 .Axis2安装与部署 .Web Service开发步骤
jquery.flot.axislabels.js
好像没有多少人讨论, 大多数的话题都是围绕xfire, cxf, axis/axis2等主流的Web Service框架.尽管是从事这方面的工作, 不过实际开发中还是公司内部开发的一个Web Service模块, 发现与Spring提供的这个模块的构架很像...