`
zhongkem
  • 浏览: 151508 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

axis1.4 使用笔记(4)

阅读更多

4 服务发布需要注意的地方(包括客户端和服务端)

       axis的用法可以说简单,也可以说难。有很多细节方面不注意的话会让你花费很多时间。很多答案在网上是没有答案的,只能靠自己琢磨。在这一节中我就把一些常见的问题或建议总结下:

 

1.自定义类型的映射。

 

QName qn = new QName("urn:BeanService", "AbstractServiceinfo");
_call.registerTypeMapping(AbstractServiceinfo.class, qn,
				new org.apache.axis.encoding.ser.BeanSerializerFactory(
						AbstractServiceinfo.class, qn),
				new org.apache.axis.encoding.ser.BeanDeserializerFactory(
						AbstractServiceinfo.class, qn));

 格式基本如上所示。

要记住当你的方法需要传入自定义类型的参数或返回自定义类型时,一定要在wsdd文档中注册,在客户端编程时也要注册。 

客户端采取第二种方式时的映射注册可以看3.2.3的代码,采取第一种方式时也要注册,需要找到服务对应的存根类SN_AdvanceSearchSoapBindingStub,在这个类里有各个方法对应的调用配置,找到需要注册的方法,加上上面的映射就行了。格式都是一样的!

 

2.当返回类型类似于ArrayList<Serviceinfo>时

对于这样的返回类型,axis都会把返回值转成Object[],别想着直接把结果转成ArrayList,有时会出问题

下面是一个典型的用法:方法的返回值是ArrayList<Serviceinfo>,用下面的方法遍历就行了。

Object[] result = (Object[]) call.invoke(new Object[] { search });
			if (result != null && result.length > 0) {
				for (int i = 0; i < result.length; i++) {
					Serviceinfo serviceinfo = (Serviceinfo) result[i];
					System.out.println(serviceinfo.getCatagoryName()
							+ serviceinfo.getAffiliation());
				}
			}

 对于java中的set也一样,都会转成Object[],如下面的方法:

Map<Integer, Set<Integer>> composition(UserParameter userparameter)得到返回值时就应该这样处理:

Map<Integer, Object[]> result=(Map) call.invoke(new Object[]{userPar});
				
			for (Iterator<Integer> iter = result.keySet().iterator(); iter
					.hasNext();) {
				Integer key = iter.next();
				Object[] obj = result.get(key);
				if(obj != null && obj.length > 0) { 
					  for(int i = 0; i < obj.length; i ++) { 
						  Integer serviceinfo = (Integer) obj[i]; 
					    System.out.println(serviceinfo);				  
						} 
				}		

 注意对应于Set<Integer>的返回值是Object[]类型,通过循环来遍历,如果直接转型就会出现异常

 

3.自定义类型一定要可以序列化,也就是要实现java.io.Serializable接口。如果你的方法准备发布成web服务最好把输入和输出都打包成javaBean,axis对javaBean的处理还是很自动的。

 

4.需要在服务端和客户端传递的javaBean当然在两端的工程里都应该有相似的代码,否则就会出现一方不能解析!如果客户端不能直接拿到javaBean的代码,可以借助wsdl2java生成的类中就应该会有对应的javaBean,直接拿过来用就行,当然,下一步采取哪种方式调用服务都是随意的。可见wsdl2java还是很有用的。

 

5.这点一定要看:血的教训

如果你的服务中返回值都是类似于List<Serviceinfo> getServiceinfoList(...)这样的集合类型,而没有一个类似于Serviceinfo getServiceinfo(..)这样的方法,发布成服务后,在对应的wsdl中就不会出现Serviceinfo的复杂类型对应的,也就是说你用wsdl2java是不能生成Serviceinfo对应的javaBean的。。调用的时候也就会出错。解决方法是在服务端可以加上一个什么也不做的public方法,如:

public Serviceinfo doNothing(){
		Serviceinfo info=new Serviceinfo();	
		return info;
	}

 这样。wsdl文档中就会有对Serviceinfo的类型定义了。

这一步很重要啊。。当时在这徘徊了好久。。一定不要以为你在wsdd中有了beanMapping定义,就会在wsdl中出现对应类型定义,一定要在你的public方法的输入或返回值用到这个bean时才会在wsdl中定义!

 

还碰到好多问题,一时想不起来,想到后再补充吧。

 

最后看看一些参考文献:

1.Web_Service开发指南_2.3.1.pdf,新手建议先看这个。。比我写的好多了!可以到这个网下:

     http://www.hlmz.org/forum/

2.axis 生成客户端client stub文件

     http://hi.baidu.com/shanshuijoy/blog/item/6766673e4d2a1e3570cf6cf9.html

3.AXIS实现Web服务深入篇 

     http://g.51cto.com/michael/323

4.axis开发web服务

    http://yangzb.iteye.com/blog/256890

 

                     

分享到:
评论

相关推荐

    axis1.4学习文档

    axis1.4 webservice个人学习笔记

    Axis + tomcate

    标题 "Axis + tomcat" 指涉的是在Apache Axis1.4版本与Tomcat应用服务器上部署和使用Web服务的技术。Apache Axis是Java平台上一个流行的开源工具,用于创建和部署Web服务,而Tomcat则是一款轻量级的Java应用服务器,...

    Axis2版本学习笔记

    本笔记将深入探讨Axis2的核心概念、版本差异、安装配置以及在实际项目中的应用。 1. **核心概念** - **SOAP**: Axis2是基于SOAP(Simple Object Access Protocol)协议的,它允许应用程序通过HTTP进行通信,实现跨...

    axis学习资料汇总

    axis学习资料汇总: Axis实例与分析详解; Axis学习笔记.pdf; Tomcat5.0.28下AXIS完全安装手册.doc; Axis1.4 开发指南_V1.0.pdf; AXIS入门及应用.rar; Axis开发Web+Services.doc 等等

    Axis2_1.X学习笔记

    标题"Axis2_1.X学习笔记"指的是关于Axis2的一个学习资源,其中1.X代表可能是1.4或者1.5等版本,Axis2是Apache软件基金会开发的一个开放源代码Web服务平台,主要用于构建和部署Web服务。这个学习笔记可能是对Axis2在1...

    AXIS摄像机调试培训PPT教学课件.pptx

    - 使用AXIS IP Utility扫描物理连接中的摄像机IP,确保笔记本电脑的本地连接IP与摄像机在同一网段。 - 在设置IP时,需避免笔记本电脑使用169.254开头的DHCP地址,否则摄像机会学习到这个地址。 2. **初始配置**:...

    AXIS摄像机调试培训PPT学习教案.pptx

    1. **AXIS IP Utility的使用**:这是一个用于扫描并识别网络中物理连接的AXIS摄像机的工具。在使用前,需要将笔记本电脑的本地连接IP设置为与摄像机在同一网段,以确保通信。 2. **摄像机初始化设置**:当摄像机是...

    webservices 资源

    “Apache Axis 1.4.zip”和“103244826axis.zip”是Apache Axis的版本,Axis是一个流行的Java Web服务框架,用于生成和部署Web服务。它简化了SOAP通信,并提供了自动代码生成工具。 “axis文档.zip”很可能是Apache...

    卡耐基梅陇大学 计算机图形学 PPT 4-transform

    对于刚体平移,我们可以使用一个4x4的变换矩阵来表示。假设平移向量为 \(\mathbf{d} = [d_x, d_y, d_z]^T\),则变换矩阵可以表示为: \[ T(d_x, d_y, d_z) = \begin{bmatrix} 1 & 0 & 0 & d_x \\ 0 & 1 & 0 & d_y \...

Global site tag (gtag.js) - Google Analytics