AXIS实现Web应用
- 格式:doc
- 大小:97.00 KB
- 文档页数:12
Axis2.x WebService上次介绍了axis1.x的用法,这次继续上次的,将叙述axis2的用法。
Axis1.x在线博文:/hoojo/archive/2010/12/20/1911349.html一、准备工作1、开发准备首先需要下载axis2的相关jar包,到axis的官方网站即可获得开发的依赖包。
下载地址:/axis2/java/core/download.cgi现在最高的版本是1.5.4的然后你需要下载官方提供的axis的eclipse插件工具,可以帮助我们打包(aar)及其生产客户端调用代码。
下载页面:/axis2/java/core/tools/index.htmlService Archive Wizard - Eclipse Plug-inCode Generator Wizard - Eclipse Plug-in2、安装eclipse插件如果你的eclipse插件安装成功后,会看到如下效果:3、分析axis2-bin文件目录结构下载下来的axis2的依赖库,其中有一个axis2-1.5.3-bin.zip的库文件,目录结构如下:bin文件夹是axis2的常用工具,其中有将wsdl文件转换成客户端调用的wsdl2java工具及将java转换成wsdl文件的工具conf是axis2的配置文件lib运行所要的依赖库repository是发布过的axis服务和文件sample是示例webapp是web文件和jsp页面等4、我们需要将下载下来的axis2-1.5.3-war.zip中的axis2.war这个文件放在我们的tomcat目录下,启动tomcat就会把war文件转成一个可以跑起来的axis2的项目。
Tomcat启动后,在浏览器中输入:http://localhost:8080/axis2/你可以看到二、Axis2的简单WebService示例注意,上面的HelloWorldService是没有package的。
目录一使用Axis和XFire发布Web Service (2)1.1 准备工作 (2)1.1.1 新建工程 (2)1.1.2 axis依赖文件 (3)1.1.3 XFire依赖文件 (3)1.2 Axis发布Web Service (4)1.2.1 传递简单数据类型的Web Service (4)1.2.2 带自定义对象传递的Web Service (8)1.3 XFire发布Web Services (10)1.3.1 传递简单数据类型的Web Service (10)1.3.2传递复杂数据类型的Web Service (12)附录: 1Server的结构 (16)二调用Web Services (17)2.1 准备工作 (17)2.1.1 新建工程 (17)2.1.2 启动Tomcat上发布的1Server服务 (17)2.2 Axis发布的Web Service调用方式 (18)2.2.1 Dynamic Invocation Interface (DII)方式 (18)2.2.2 Dynamic Proxy方式 (19)2.2.3 Stubs方式 (20)2.3调用XFire发布的Web Service (22)2.3.1服务以jar包形式发布的时候直接调用 (23)2.3.2 使用Axis的Client包 (23)2.3.3 使用Xfire的Client包 (24)附录2:2Client目录结构 (31)一使用Axis和XFire发布Web Service 1.1 准备工作Axis主页:/Axis下载:/dist/ws/XFire主页:/XFire下载:/Download去以上站点下载axis最新包和XFire最新包,包内有axis和XFire依赖的其他jar包。
1.1.1 新建工程1.1.2 axis依赖文件1.1.3 XFire依赖文件1.2 Axis发布Web Service1.2.1 传递简单数据类型的Web Service1.把Axis依赖的jar包放入lib文件夹下.2.在web.xml中加入如下:<!-- ****************** axis ws start ****************** --> <listener><listener-class>org.apache.axis.transport.http.AxisHTTPSessionListener </listener-class></listener><servlet><servlet-name>AxisServlet</servlet-name><servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class></servlet><servlet><servlet-name>AdminServlet</servlet-name><servlet-class>org.apache.axis.transport.http.AdminServlet</servlet-class><load-on-startup>100</load-on-startup></servlet><servlet><servlet-name>SOAPMonitorService</servlet-name><servlet-class>org.apache.axis.monitor.SOAPMonitorService</servlet-class><init-param><param-name>SOAPMonitorPort</param-name><param-value>5001</param-value></init-param><load-on-startup>100</load-on-startup></servlet><servlet-mapping><servlet-name>AxisServlet</servlet-name><url-pattern>/servlet/AxisServlet</url-pattern></servlet-mapping><servlet-mapping><servlet-name>AxisServlet</servlet-name><url-pattern>*.jws</url-pattern></servlet-mapping><servlet-mapping><servlet-name>AxisServlet</servlet-name><url-pattern>/services/*</url-pattern></servlet-mapping><servlet-mapping><servlet-name>SOAPMonitorService</servlet-name><url-pattern>/SOAPMonitor</url-pattern></servlet-mapping><!-- uncomment this if you want the admin servlet --><!--<servlet-mapping><servlet-name>AdminServlet</servlet-name><url-pattern>/servlet/AdminServlet</url-pattern></servlet-mapping>--><session-config><!-- Default to 5 minute session timeouts --><session-timeout>5</session-timeout></session-config><!-- currently the W3C havent settled on a media type for WSDL;/TR/2003/WD-wsdl12-20030303/#ietf-draftfor now we go with the basic 'it's XML' response -->3.发布到Tomcat5.0+ 启动Tomcat服务启动的时候若出现下面错误。
Axis2 教程文章分类:Java编程Axis2是一套崭新的WebService引擎,该版本是对Axis1.x重新设计的产物。
Axis2不仅支持SOAP1.1和SOAP1.2,还集成了非常流行的REST WebService,同时还支持Spring、JSON等技术。
这些都将在后面的系列教程中讲解。
在本文中主要介绍了如何使用Axis2开发一个不需要任何配置文件的WebService,并在客户端使用Java和C#调用这个WebService。
一、Axis2的下载和安装读者可以从如下的网址下载Axis2的最新版本:/axis2/在本文使用了目前Axis2的最新版本1.4.1。
读者可以下载如下两个zip包:axis2-1.4.1-bin.zipaxis2-1.4.1-war.zip其中axis2-1.4.1-bin.zip文件中包含了Axis2中所有的jar文件,axis2-1.4.1-war.zip文件用于将WebService发布到Web容器中。
将axis2-1.4.1-war.zip文件解压到相应的目录,将目录中的axis2.war文件放到<Tomcat安装目录>\webapps目录中(本文使用的Tomcat的版本是6.x),并启动Tomcat。
在浏览器地址栏中输入如下的URL:http://localhost:8080/axis2/如果在浏览器中显示出如图1所示的页面,则表示Axis2安装成功。
图1二、编写和发布WebService对于用Java实现的服务程序给人的印象就是需要进行大量的配置,不过这一点在Axis2中将被终结。
在Axis2中不需要进行任何的配置,就可以直接将一个简单的POJO发布成WebService。
其中POJO中所有的public方法将被发布成WebService方法。
下面我们来实现一个简单的POJO,代码如下:public class SimpleService{public String getGreeting(String name){return "你好 " + name;}public int getPrice(){return new java.util.Random().nextInt(1000);}}在SimpleService类中有两个方法,由于这两个方法都是public方法,因此,它们都将作为WebService方法被发布。
【wayfoon】最近公司要求实现一个webservice调用,之前也接触过,但只是看看,没有动手试试,于是现在正式开始学习webservice。
之前参照网上的例子写了一个简单的say hello webservice例子。
传递的对象是string,而且只有一个方法;但实际应用中,需要传递一些复制的对象,比如:数组,集合,对象数组。
由于webservice 是通过xml来交互数据的,而且是不分平台的。
因此,java 中的List等集合类的哦是通过数组来实现的。
学习webservice最好不要从一种语言的角度(java、c#)来对待问题,如果非要看成一中语言,那看成是c语言吧。
简单的hello world 例子见/mlzry0612/articles/185209.html?opt=admin里面有详细的axis+myeclipse5.5安装部署,图文并茂。
不同myeclipse版本有所不同。
在演示例子前,你必须已经安装好了Axis,并且已经知道怎样使用axis,知道通过wsdl生成webservice代码和生成aar发布文件。
不会的话,先学习前面的hello 例子。
下面演示一个比较复杂的例子。
例子实现:输入一个string 返回得到一个对象数组(输入里面所有的元素对象),注意是对象数组。
每个对象对应一个bean 实体。
使用axis的好处是可以根据wsdl自动生成大部分代码。
因此,采用axis开发webservice 的实现关键在于生成wsdl文件的编写。
生成wsdl文件可以采用两种方式:第一种:直接新建wsdl再通过wsdl设计器来设计(也就是hello例子里面将的)如果你对wsdl不是很熟悉,而且,输入或输出的参数都非常复杂,不清楚输入输出的组成结构时,你可以采用第二种方法。
这种方式,可以让你使用你最熟悉的语言来表达你的意思。
以java为例,你可以将对个对象放到List里面来表达你要输出的值,这个在 wsdl里面是另外一种表达方式(没有List)。
利用AXIS开发Webservice(一) ——如何发布自己的webservice先介绍下本人开发环境吧。
JDK 1.4.2 + Myeclipse 6.0(实在经不起诱惑,尝尝鲜)+ Tomcat 5.0.28 + AXIS 1.4。
AXIS 1.4包可以在/axis/找到。
假设所有的环境你已经搭好,并且AXIS包也已经下好了。
OK,Here we go~解压axis-bin-1_4.zip这个包可以看到webapps目录,双击进入把里面的AXIS文件夹拷到%TOMCAT_HOME%\webapps目录下,之后拷贝activation.jar、mail.jar、tools.jar到%TOMCAT_HOME%\webapps\axis\WEB-INF\lib目录下。
启动tomcat,访问http://localhost:8080/axis/happyaxis.jsp 如果访问成功,恭喜你!基本的配置你已经做完了。
PS:此处的%TOMCAT_HOME%指的是Tomcat的安装目录,至于那另外的三个jar包,J2EE 1.4库里就能找的到。
现在来说一下最关键的Webservice的发布。
AXIS提供了两种发布方式,一种是即时发布(Instant Deployment),另外一种是定制发布(Custom Deployment)。
即时发布提供了一种非常简单的webservice的发布方式,但是其中限制太多,因此在实际的开发中定制发布才是首选。
这里也将会以定制发布为重点来介绍。
1.即时发布JWS (Java Web Service) Files - Instant Deployment即时发布提供了一种非常简单发布方式,发布者只要有Java源代码(也就是.java文件),然后把其后缀名改成jws(也就是java web service的缩写)拷贝到%TOMCAT_HOME%\webapps\axis目录下即完成了所有的发布工作。
axis2实现WebService之复合类型数据的传递接着昨天的程序,今天又进了一步,学习了webservice 的复合类型数据的传递,尤其是教程上没有的部分,我自己尝试着写,虽说耗费了一个下午的时间,但是还是非常值的,废话少说,看招!在实际的应用中,不仅需要使用WebService来传递简单类型的数据,有时也需要传递更复杂的数据,这些数据可以被称为复合类型的数据。
数组与类(接口)是比较常用的复合类型。
在Axis2中可以直接使用将WebService方法的参数或返回值类型声明成数组或类(接口)。
但要注意,在定义数组类型时只能使用一维数组,如果想传递多维数组,可以使用分隔符进行分隔,如下面的代码所示:String[] strArray = new String[]{ "自行车,飞机,火箭","中国,美国,德国","超人,蜘蛛侠,钢铁侠" } ;上面的代码可以看作是一个3*3的二维数组。
在传递类的对象实例时,除了直接将数组类型声明成相应的类或接口,也可以将对象实例进行序列化,也就是说,将一个对象实例转换成字节数组进行传递,然后接收方再进行反序列化,还原这个对象实例。
下面的示例代码演示了如何传递数组与类(接口)类型的数据,并演示如何使用字节数组上传图像。
本示例的客户端代码使用Java编写。
要完成这个例子需要如下几步:一、实现服务端代码[java] view plaincopy<spanstyle="font-size:14px;">import java.io.FileOutputStream; import data.DataForm; public class ComplexTypeService { // 上传图像,imageByte参数表示上传图像文件的字节,// length参数表示图像文件的字节长度(该参数值可能小于imageByte的数组长度)public boolean uploadImageWithByte(byte[] imageByte, int length){ FileOutputStream fos = null; try{ // 将上传的图像保存在D盘的test1.jpg文件中fos = newFileOutputStream("d:\\test1.jpg"); // 开始写入图像文件的字节fos.write(imageByte, 0, length); fos.close(); }catch (Exception e) { return false; } finally{ if (fos != null){ try{ fos.close(); }catch (Exception e){ } } } return true; } // 返回一维字符串数组public String[] getArray() { String[] strArray = new String[]{ "自行车", "飞机", "火箭" }; return strArray; } // 返回二维字符串数组public String[] getMDArray() { String[] strArray = new String[]{ "自行车,飞机,火箭","中国,美国,德国", "超人,蜘蛛侠,钢铁侠" } ; return strArray; } // 返回DataForm类的对象实例public DataForm getDataForm() { return newDataForm(); } // 将DataForm类的对象实例序列化,并返回序列化后的字节数组public byte[] getDataFormBytes() throws Exception{ java.io.ByteArrayOutputStream baos = newjava.io.ByteArrayOutputStream();java.io.ObjectOutputStream oos = newjava.io.ObjectOutputStream(baos);oos.writeObject(new DataForm()); return baos.toByteArray(); } } </span>二、实现DataForm类[java] view plaincopy<spanstyle="font-size:14px;">package data; public class DataForm implements java.io.Serializable { private String name = "bill"; private int age = 20; setter…………getter方法} </span>三、发布WebService由于本示例的WebService类使用了一个Java类(DataForm类),因此,在发布WebService之前,需要先将DataForm.class文件复制到<Tomcat安装目录>\webapps\axis2\WEB-INF\classes\data目录中,然后将ComplexTypeService.class文件复制到<Tomcat安装目录>\webapps\axis2\WEB-INF\pojo目录中,最后启动Tomcat (如果Tomcat已经启动,由于增加了一个DataForm类,因此,需要重新启动Tomcat)。
AXIS实现WebService需要修改web.xml文件,配置axis的servlet:<!-- axis webservice --><servlet><servlet-name>axis</servlet-name><servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class><load-on-startup>4</load-on-startup></servlet><!-- axis webservice filter --><servlet-mapping><servlet-name>axis</servlet-name><url-pattern>/axis/*</url-pattern></servlet-mapping>增加了一个wsdd文件server-config.wsdd在WebRoot/WEB-INF下面:<?xml version="1.0" encoding="UTF-8"?><deployment xmlns="/axis/wsdd/"xmlns:java="/axis/wsdd/providers/java"><globalConfiguration><parameter name="adminPassword" value="admin"/><parameter name="sendXsiTypes" value="true"/><parameter name="sendMultiRefs" value="true"/><parameter name="sendXMLDeclaration" value="true"/><parameter name="axis.sendMinimizedElements" value="true"/><requestFlow><handler type="java:org.apache.axis.handlers.JWSHandler"><parameter name="scope" value="session"/></handler><handler type="java:org.apache.axis.handlers.JWSHandler"><parameter name="scope" value="request"/><parameter name="extension" value=".jwr"/></handler></requestFlow></globalConfiguration><handler name="Authenticate"type="java:org.apache.axis.handlers.SimpleAuthenticationHandler"/> <handler name="LocalResponder"type="java:org.apache.axis.transport.local.LocalResponder"/><handler name="URLMapper"type="java:org.apache.axis.handlers.http.URLMapper"/><service name="User" provider="java:RPC"><parameter name="allowedMethods" value="*"/><parameter name="className"value="com.sillycat.core.webservice.impl.JaxRpcUserService"/><beanMappinglanguageSpecificType="java:com.sillycat.core.webservice.model.IUser"qname="ns:IUser" xmlns:ns="urn:BeanService"/></service><transport name="http"><requestFlow><handler type="URLMapper"/><handlertype="java:org.apache.axis.handlers.http.HTTPAuthHandler"/></requestFlow></transport><transport name="local"><responseFlow><handler type="LocalResponder"/></responseFlow></transport></deployment>其中的有些地方需要修改:<service name="User" provider="java:RPC"><parameter name="allowedMethods" value="*"/><parameter name="className"value="com.sillycat.core.webservice.impl.JaxRpcUserService"/><beanMappinglanguageSpecificType="java:com.sillycat.core.webservice.model.IUser"qname="ns:IUser" xmlns:ns="urn:BeanService"/></service>要改成自己的类名和包名webservice设置一个自己的spring配置文件,配置服务端和客户端,applicationContext-webservice.xml:<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN""/dtd/spring-beans.dtd"><beans><!-- webservice axis server --><bean name="/user"class="org.springframework.remoting.httpinvoker.HttpInvokerService Exporter"><property name="service"><ref bean="jaxRpcUserService" /></property><property name="serviceInterface"><value>com.sillycat.core.webservice.IUserManager</value></property></bean><bean name="jaxRpcUserService"class="com.sillycat.core.webservice.impl.JaxRpcUserService"/><!-- webservice axis client --><bean id="userManagerRemote"class="com.sillycat.plugin.webservice.axis.AxisPortProxyFactoryBea n"lazy-init="true"><property name="serviceFactoryClass"><value>org.apache.axis.client.ServiceFactory</value></property><property name="wsdlDocumentUrl"><value>http://localhost/easyLife/axis/User?wsdl</value></property><property name="namespaceUri"><value>http://localhost/easyLife/axis/User</value></property><property name="serviceName"><value>JaxRpcUserServiceService</value></property><property name="portName"><value>User</value></property><property name="serviceInterface"><value>com.sillycat.core.webservice.IUserManager</value></property></bean></beans>配置就到这里结束了。
WebAssembly的应用场景和实现原理WebAssembly,简称Wasm,是一种可以在Web浏览器里运行的二进制格式的代码语言。
它被设计出来的目的是为了让Web前端开发者可以使用更高效、更灵活、更安全的编程语言来开发Web应用,同时,WebAssembly也可以减少Web前端应用的大小和运行时的开销。
WebAssembly是一项新兴的技术,目前已经在许多领域发挥了重要的作用。
WebAssembly的应用场景WebAssembly的应用场景非常广泛,它可以应用于Web浏览器里的各种Web前端应用中,也可以应用于联机游戏、图形处理和计算机视觉等其他领域。
下面就来简单介绍一下WebAssembly的应用场景:1. Web前端开发WebAssembly是一种可以在Web浏览器里运行的代码语言,可以为Web前端开发者提供更高效、更灵活、更安全的编程语言。
Web前端开发者可以用WebAssembly来编写底层的算法和数据结构,进而提高Web前端应用的性能和体验。
2. 联机游戏WebAssembly可以使联机游戏在Web浏览器里实现本地化,因为它可以编译为原生的机器码。
这样,在Web浏览器里玩游戏的用户无需安装插件或下载软件,就可以享受到本地化的游戏体验,同时游戏的运行速度也更快。
3. 图形处理WebAssembly还可以用于图形处理,因为它可以很好地处理音频和视频文件。
这意味着,用WebAssembly来编写图形处理器,可以让Web前端应用的处理速度更快,同时也可以降低Web前端应用的大小。
4. 计算机视觉WebAssembly也可以用于计算机视觉领域。
通过使用WebAssembly,可以实现一些计算密集型的算法,例如语音识别、人脸识别等。
这些功能可以被集成到Web前端应用中,就像普通的JavaScript代码一样。
WebAssembly的实现原理WebAssembly是一种二进制格式的代码语言,它可以编译为原生的机器码。
本文主要介绍使用service方式实现Web服务、复杂类型参数或者返回值以及面向消息/文档的服务类型,同时还会简单提及Web服务的会话管理以及安全问题等等。
前段时间我的一篇文章《应用AXIS开始Web服务之旅》介绍了如何通过AXIS 这个项目来实现Web服务的功能。
该文章主要介绍AXIS的结构、如何使用jws文件的方式开发一个简单的Web服务,并用了比较大的篇幅来介绍Web 服务的客户端编程,应该说是使用AXIS开发Web服务的入门篇,本文假设你已经看过《应用AXIS开始Web服务之旅》并对AXIS有一定的基础,在这个基础上我们将要介绍的内容有几个方面包括使用service方式实现Web服务、复杂类型参数或者返回值以及面向消息/文档的服务类型,同时还会简单提及Web服务的会话管理以及安全问题等等。
在开始我们的文章之前,我们还需要搭建一个环境,我们需要一个支持Web服务的web应用程序并假设名字为axis,如何建立请参照《应用AXIS开始Web 服务之旅》文章中的介绍。
使用定制发布编写Web服务使用jws文件的方式编写Web服务具有方便、快捷的优点,它可以很快的将你已有的类发布成Web服务。
但是更多的时候这并不是一个好的主意,因为这种做法引发的问题是我们必须要将已有类的源码发布出来,因为更多的时候我们并不想这样做;另外虽然你可以先用工具开发并调试完毕一个java文件后再改名为jws,但是这多少有些便扭,而且并不是类中的所有方法你都想发布成可通过Web服务来访问的,这时候你就必须将这些方法的修饰符改为不是public 的,这就跟你原有的类不同步,以后的修改将会更加的麻烦。
在这里我把定制发布方式称为service方式,就好像JSP的出现不会使Servlet 失宠的道理一样,有了jws,service 方式还是有它的用武之地,而且是大放异彩。
发布一个service方式的Web服务需要两部分内容:类文件以及Web服务发布描述文件。
下面我们使用一个简单的例子来讲述这个过程。
首先我们需要一个service类,这个类跟普通的类没有任何区别,下面是我们实现一个城市便民服务的类,我们需要将CityService类的两个方法getZip和getTel发布成Web服务,编译该文件并把class文件拷贝到<webapp>/WEB-INF/classes对应目录下。
Package lius.axis.demo;/*** 该类实现了城市服务,用于发布成Web服务* @author Liudong*/public class CityService {/*** 获取指定城市的邮编* @param city* @return*/public String getZip(String city) {return "510630";}/*** 获取指定城市的长途区号* @param city* @return*/public String getTel(String city) {return "020";}}程序已经完成,下面是发布这个Web服务。
打开<webapp>/WEB-INF/server-config.wsdd 如果这个文件不存在则创建一个新的文件,内容如下:<?xml version="1.0" encoding="UTF-8"?><deployment xmlns="/axis/wsdd/"xmlns:java="/axis/wsdd/providers/java"> <globalConfiguration><parameter name="adminPassword" value="admin"/><parameter name="attachments.implementation"value="org.apache.axis.attachments.AttachmentsImpl"/><parameter name="sendXsiTypes" value="true"/><parameter name="sendMultiRefs" value="true"/><parameter name="sendXMLDeclaration" value="true"/><parameter name="axis.sendMinimizedElements" value="true"/><requestFlow><handler type="java:org.apache.axis.handlers.JWSHandler"><parameter name="scope" value="session"/></handler><handler type="java:org.apache.axis.handlers.JWSHandler"><parameter name="scope" value="request"/><parameter name="extension" value=".jwr"/></handler></requestFlow></globalConfiguration><handler name="LocalResponder"type="java:org.apache.axis.transport.local.LocalResponder"/>< code sample is too wide > <handler name="URLMapper"type="java:org.apache.axis.handlers.http.URLMapper"/><handler name="Authenticate"type="java:org.apache.axis.handlers.SimpleAuthenticationHandler"/> < code sample is too wide > <service name="city" provider="java:RPC"> <!-- 服务类名 --><parameter name="className" value="lius.axis.demo.CityService"/><!-- 允许访问所有方法 --><parameter name="allowedMethods" value="*"/></service><transport name="http"><requestFlow><handler type="URLMapper"/><handlertype="java:org.apache.axis.handlers.http.HTTPAuthHandler"/></requestFlow></transport><transport name="local"><responseFlow><handler type="LocalResponder"/></responseFlow></transport></deployment>其中粗斜体的部分是我们服务的配置信息,启动Tomcat并打开浏览求访问地址:http://localhost:8080/axis/services/city?wsdl ,下面是浏览器显示我们Web服务的WDSL数据。
当然了,这个过程比起jws方式来说是稍微麻烦一点,你可以把它想象成你发布一个servlet一样,创建servlet类然后在web.xml中加入配置信息。
处理复杂类型参数和返回值之前我们做的演示程序都很简单,方法的参数和返回值都是简单类型的数据,但是在实际应用过程中往往没有这么简单。
在使用面向对象的编程语言时,我们会希望数据类型可以是某个对象,比如我们提供一个接口用来发送短信息,那么我们希望接口的参数是一个消息对象,这个消息对象封装了一条信息的所有内容包括发送者、接收者、发送时间、优先级、信息内容等等,如果我们把每个内容都做成一个参数,那这个接口的参数可能会非常的多。
因此封装成对象是很有必要的。
在使用Axis来编写Web服务时对复杂类型数据的处理同样也是非常简单。
Axis 要求复杂类型对象的编写必须符合JavaBean的规范,简单的说就是对象的属性是通过getter/setter方法来访问的。
来看看下面这个简单的例子所输出的WSDL信息有何特殊的地方。
为了简便,我们还是使用jws来编写,需要编写三个文件:sms.jws,Message.java,Response.java。
//文件名:sms.jwsimport lius.axis.demo.*;public class sms{/*** 短信息发送Web服务接口*/public Response send(Message msg) throws Exception{ System.out.println("CONTENT:"+msg.getContent());Response res = new Response();res.setMessage(msg);res.setCode(0);res.setErrorText("");return res;}}//Message.javapackage lius.axis.demo;/*** 欲发送的信息* @author Liudong*/public class Message {private String from;private String to;private String content;private int priority;public String getContent() {return content;}public void setContent(String content) {this.content = content;}public String getFrom() {return from;}public void setFrom(String from) {this.from = from;}public int getPriority() {return priority;}public void setPriority(int priority) {this.priority = priority;}public String getTo() {return to;}public void setTo(String to) {this.to = to;}}//Response.javapackage lius.axis.demo;/*** 信息发送回应,在这里我们做了一个对Message 类的引用 * @author Liudong*/public class Response {private int code;//发送结果代码private String errorText;private Message message;//发送的原始信息public int getCode() {return code;}public void setCode(int code) {this.code = code;}public String getErrorText() {return errorText;}public void setErrorText(String errorText) {this.errorText = errorText;}public Message getMessage() {return message;}public void setMessage(Message message) {this.message = message;}}编译Message.java和Response.java并将编译后的类文件拷贝到axis/WEB-INF/classes对应包的目录下,sms.jws拷贝到axis目录,访问http://localhost:8080/axis/sms.jws?wsdl即可看到WSDL信息,这些信息与之前不同的在于下面列出的内容(注意粗斜体部分内容):<wsdl:types><schema targetNamespace="http://demo.axis.lius"xmlns="/2001/XMLSchema"><import namespace="/soap/encoding/" /> <complexType name="Message"><sequence><element name="content" nillable="true" type="xsd:string" /> <element name="from" nillable="true" type="xsd:string" /><element name="priority" type="xsd:int" /><element name="to" nillable="true" type="xsd:string" /></sequence></complexType><complexType name="Response"><sequence><element name="code" type="xsd:int" /><element name="errorText" nillable="true" type="xsd:string" /> <element name="message" nillable="true" type="tns1:Message" /> </sequence></complexType></schema></wsdl:types>这里定义了两个类型Message和Response,就是我们接口的参数类型以及返回值的类型。