Axis 1、再说soap。 前文说过,soap是基于xml的通信协议和编码格式以便用于应用程序间通信。最初是由微软和userland构思,已经历了几代的发展,当前是soap1.2,尽管版本1.1很普遍。W3C的xml协议工作组负责这一规范。 soap被广泛认为是跨平台、跨语言分布式计算应用的新一代支撑. web services是一种技术方案,而在这个方案中用得最广泛的技术实现就是soap。 2、什么是axis呢? axis本质上是soap引擎,是soap第三代产品(始于ibm的soap4j),是web service方案中解析xml的引擎,一个用于构建soap处理器比如客户端、服务器端、网关等等的框架。当前的版本是用java写的,axis客户端的c++实现正在开发中。Axis不只是soap引擎,它还包括: (1)简单的独立服务器; (2)可以插入到servlet引擎(比如tomcat)中的服务器; (3)Wsdl的扩展支持; (4)从wsdl生成java类; (5)一些样例程序; (6)监控tcp/ip包的工具; 通常xml解析有两种机制:SAX和DOM。SAX的xml解析方式基于事件,一次加载--加载过程依次触发节点事件、元素事件,在事件处理中可以加入业务逻辑代码;DOM则是基于(DOM)对象,两次加载--第一次加载xml文件,第二次遍历文件生成DOM树。axis的底层xml解析机制采用的是SAX,所以灵活高效。 虽然可以自行开发解析xml的代码,但是很麻烦,而且要关注细节,所以一般面向对象的开发很少会自行开发xml解析代码,而都是利用诸如axis这样的框架。譬如有些开发会用到dom4j这样的xml解析工具包。 采用Axis方式开发WS客户端 1、既然axis是框架,所以第一步是下载该框架包。然后可以将该包webapps目录下的axis项目拷到tomcat的webapps目录下,可以从IE中访问,先睹为快,具体操作步骤请参见前文。 2、将该项目lib包内的jar文件拷到新建的axisclient项目lib目录下,设为类路径。这里新建的项目为一般的java项目即可。然后编写如下示例代码: public class App { public static void main(String[] args) throws Exception { Service service = new Service(); Call call = (Call) service.createCall(); //设置调用的目标终端地址 String url = "http://localhost:8888/axis/EchoHeaders.jws"; call.setTargetEndpointAddress(new URL(url)); //设置调用的操作名称 call.setOperationName("echo"); //调用服务(参数是对象数组) Object o = call.invoke(new Object[]{"tom"}); System.out.println(o);//打印的结果即"tom" } } 上述代码表示一个客户端访问axis服务,服务的请求地址为url--当然是部署好axis项目后才能有这个地址,在java中,echo可视为EchoHeaders服务对外开放的一个方法,这个方法的定义是返回传入的参数。再通过web service explorer或TCP/IP Monitor查看请求响应的数据。 参数在上述代码运行后的xml数据中为<arg0 xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="soapenc:string">tom</arg0>,很显然参数名“arg0”的可读性很差。可以在调用invoke方法之前加入下列代码更改: //设置xml文档中的消息的元素名称 call.addParameter("name", Constants.XSD_STRING, ParameterMode.IN); xml文档中的参数即表示为<name xsi:type="xsd:string">tom</name>。里面的“XSD”表明采用的schema方式规定xml结构,因为XSD比DTD表达更丰富--最起码它可以定义数据类型,DTD就不可以。 也可以设置返回类型(还是在invoke方法调用前):call.setReturnType(Constants.XSD_STRING)。 3、所有远程调用的最底层机制肯定都是socket。可以通过org.apache.axis.transport.http.HTTPSender类的源码看到axis是如何运用socket机制创建连接,发送和接收输入(InputStream)输出(OutputStream)流以及如何生成请求响应数据信息的具体过程。
详细解决方案
传智播客-web service(五)-利用axis开发WS应用
热度:197 发布时间:2012-11-06 14:07:00.0
Axis 1、再说soap。 前文说过,soap是基于xml的通信协议和编码格式以便用于应用程序间通信。最初是由微软和userland构思,已经历了几代的发展,当前是soap1.2,尽管版本1.1很普遍。W3C的xml协议工作组负责这一规范。 soap被广泛认为是跨平台、跨语言分布式计算应用的新一代支撑. web services是一种技术方案,而在这个方案中用得最广泛的技术实现就是soap。 2、什么是axis呢? axis本质上是soap引擎,是soap第三代产品(始于ibm的soap4j),是web service方案中解析xml的引擎,一个用于构建soap处理器比如客户端、服务器端、网关等等的框架。当前的版本是用java写的,axis客户端的c++实现正在开发中。Axis不只是soap引擎,它还包括: (1)简单的独立服务器; (2)可以插入到servlet引擎(比如tomcat)中的服务器; (3)Wsdl的扩展支持; (4)从wsdl生成java类; (5)一些样例程序; (6)监控tcp/ip包的工具; 通常xml解析有两种机制:SAX和DOM。SAX的xml解析方式基于事件,一次加载--加载过程依次触发节点事件、元素事件,在事件处理中可以加入业务逻辑代码;DOM则是基于(DOM)对象,两次加载--第一次加载xml文件,第二次遍历文件生成DOM树。axis的底层xml解析机制采用的是SAX,所以灵活高效。 虽然可以自行开发解析xml的代码,但是很麻烦,而且要关注细节,所以一般面向对象的开发很少会自行开发xml解析代码,而都是利用诸如axis这样的框架。譬如有些开发会用到dom4j这样的xml解析工具包。 采用Axis方式开发WS客户端 1、既然axis是框架,所以第一步是下载该框架包。然后可以将该包webapps目录下的axis项目拷到tomcat的webapps目录下,可以从IE中访问,先睹为快,具体操作步骤请参见前文。 2、将该项目lib包内的jar文件拷到新建的axisclient项目lib目录下,设为类路径。这里新建的项目为一般的java项目即可。然后编写如下示例代码: public class App { public static void main(String[] args) throws Exception { Service service = new Service(); Call call = (Call) service.createCall(); //设置调用的目标终端地址 String url = "http://localhost:8888/axis/EchoHeaders.jws"; call.setTargetEndpointAddress(new URL(url)); //设置调用的操作名称 call.setOperationName("echo"); //调用服务(参数是对象数组) Object o = call.invoke(new Object[]{"tom"}); System.out.println(o);//打印的结果即"tom" } } 上述代码表示一个客户端访问axis服务,服务的请求地址为url--当然是部署好axis项目后才能有这个地址,在java中,echo可视为EchoHeaders服务对外开放的一个方法,这个方法的定义是返回传入的参数。再通过web service explorer或TCP/IP Monitor查看请求响应的数据。 参数在上述代码运行后的xml数据中为<arg0 xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="soapenc:string">tom</arg0>,很显然参数名“arg0”的可读性很差。可以在调用invoke方法之前加入下列代码更改: //设置xml文档中的消息的元素名称 call.addParameter("name", Constants.XSD_STRING, ParameterMode.IN); xml文档中的参数即表示为<name xsi:type="xsd:string">tom</name>。里面的“XSD”表明采用的schema方式规定xml结构,因为XSD比DTD表达更丰富--最起码它可以定义数据类型,DTD就不可以。 也可以设置返回类型(还是在invoke方法调用前):call.setReturnType(Constants.XSD_STRING)。 3、所有远程调用的最底层机制肯定都是socket。可以通过org.apache.axis.transport.http.HTTPSender类的源码看到axis是如何运用socket机制创建连接,发送和接收输入(InputStream)输出(OutputStream)流以及如何生成请求响应数据信息的具体过程。
相关解决方案
- 小弟我想做一个多功能web service client
- Servlet.service() for servlet [jsp] in context with path解决方案
- web service 第一天接触不懂 仍是那个访问天气预报的例子 代码很简单
- Web Service 错误:服务器未能识别 HTTP 头 SOAPAction 的值: http://tempuri.org/
- web service No services have been found.解决方法
- 学习Web Service,用哪种框架好?AXIS,XFire,CXF?该如何处理
- java service 项目有关问题
- 对象集,数组,web service,该怎么解决
- WEB Service传递附件怎么做啊(axis)
- org.apache.axis.client.Service的有关问题
- org.apache.catalina.core.ApplicationDispatcher invoke Servlet.service() for se解决思路
- JMS:Java讯息服务(Java Message Service)初学笔记
- 新手学习j2me,请教调用.net service 时用ksoap,还是用JSR172好
- WCF service 下传订单文件到ftp
- 请教:有人开发过OPOS驱动吗,撰写 service object?
- vc写的 windows service 控制台程序有关问题
- 请教一上有没有C++调用WEB SERVICE 做成DLL的例子
- vs2008中怎么使用vc++构建web service
- 客户端用vc2005的c++来编写,web service 只是连接就报错解决方法
- Reporting service 中使用储存过程有关问题
- Reporting Service 报表订阅 到win2003 系统的有关问题
- Reporting Service 分组排列有关问题
- Silverlight学习数据跟RIA服务时,找不到domain service class模板
- 生手学习web service
- asp reporting service 只显示一起,大神进
- ajax怎么调用带有SoapHeader的 web service
- ASP.NET web service 中 怎么保持状态
- !AJAX的autocompleteextender控件实现自动输入一定需要Web Service
- 无法打开登录所请求的数据库 "xxx"登录失败用户 'NT AUTHORITY\NETWORK SERVICE' 登录失败解决方案
- |zyciis| C# 怎么制作 Windows2003 IIS6 和 Meida Service 的自动安装程序