传智播客-web service(5)-利用axis开发WS应用

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)流以及如何生成请求响应数据信息的具体过程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值