kingpub

海内存知己,博客若比邻

 

用Axis for Java进行Web Services开发 (2)

上面的代码可能和原文档中不同,并且在名称空间、函数多态上会给用户造成糊涂。不过别急,我在翻译手册的同时会加入很多解释的代码,如果哪位纯粹看不懂可以通过邮件获取帮助:luopc@edu-edu.com.cn ,邮件主题必须是我提供的文档名称。
通过上面的调用代码,最终生成向服务器请求SOAP信息包,具体XML内容如下:


xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">


Hello!



这里我不再多少,细心的朋友请从代码中找相应的对应信息来进行自己的逻辑理解。至于SOAP协议在我以后的翻译文档中会加入进去。
从上面的代码中我们在调用的时候输入了参数new Object[]{“hello!”}。然后从生成的SOAP请求包中可以看到自动序列化成Hello!。你可以看到参数名称为arg0,类型为xsd:string。其实在Axis客户端我们可以直接通过具体的方法来设置每一个参数名称、类型以及返回值类型。如下代码:
call.addParameter("testParam",
org.apache.axis.Constants.XSD_STRING,
javax.xml.rpc.ParameterMode.IN);
call.setReturnType(org.apache.axis.Constants.XSD_STRING);
加入上面的代码之后生成如下的SOAP信息:


xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">


Hello!



可以作简单的对比。
也许你会疑惑设置参数名称和不设置参数名称有什么区别的疑问。这里作简单的解释:
1. 为什么要call.setReturnType(org.apache.axis.Constants.XSD_STRING)?
上面你可以调用或者可以不调用,但当返回结果中没有标明数据类型时Axis就不知道如何进行数据类型转换。当然如果返回类型你很清楚并且返回应答SOAP的结果中表明了相应的数据类型你便可以不进行上面的函数调用。
2. 为什么要设置参数名称和类型?

好了,下在你知道了如何调用Web Services了,下面告诉你如何写作和发布Web Services。
通过Axis发布Web Services
这里写作一个简单的类,然后一步一步进行发布。希望用户能够从中理出一些思路来。我在其他的关于Web Services的文章中会专门针对Web Services的通用发布方法。虽然Web Services牵涉到很多复杂的知识,但请大家不要感觉到这些操作简单,也许你已经有很多疑问,没关系,记下你的疑问,不断的投试。
public class SayHello {

public String echoString(String hello){
return hello;
}
}
哈哈,这个类是不是太简单了。
一步一步来。
Axis提供两种将Java类发布成Web Services的途径,即即时快速自动发布和通过配置文件进行发布。我们首先从最容易部署的入手。
JWS----即时部署
简单说就是将自己写的Java类源文件按一定的规则Copy到特定的目录下便可自行被Axis部署。具体步骤如下:
? 将上面写的SayHello.java复制到axis目录下。
? 改名为SayHello.jws。
注意:在你写的类中不能有具体包的信息,因为这正是Axis即时部署不支持的。
运行我们前面写的客户端进行测试,运行结果是hello!。
目前你是否有如下的问题?
如果类中用多态的函数将如何处理?
其实很简单,我们知道在每次发出调用请求之前代理程序在后台会直接请求你给的URL,这里是http://localhost:8080/axis/SayHello.jws?wsdl,其实这一请求返回来的是WSDL描述文件,通过具体的描述文件的内容和你输入的参数的类型比较,最终确定发送什么请求。细节上的解释需要用户阅读SOAP的具体内容。我也会提供相应的权威文当翻译的。
Axis的客户端默认就是通过HTTP协议传输吗?
如何将自己定义的类型进行映射?
通过WSDD自定义部署
上面的自动部署相当简单,但当你需要
? 映射自己的类型时
? 不需要暴露源代码时
? 需要自己的路径和包管理时
? 对用户操作Web Services的事件进行相应时
就需要通过WSDD来自定义部署。
前面新特性中提到过,Axis是一个很灵活的可配置系统,但在配置之前你得懂得Axis Web Services描述文档(WSDD)的格式和意义。这里有一个简单的例子(deploy.wsdd):

xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
java:RPC">


很简短的描述就会自定义对特定类以Web Services的形式发布。上面的每一个service项都会意味着开通一个相应的可被WSDL文件引用的服务。其内部描述信息将会描述从请求-处理请求-应答需要的所有核心信息。这里provider=”java:RPC”对应着相应的服务类为org.apache.axis.providers.java.RPCProvider。其实你可以通过多种方式提供相应的服务。在关于Axis的架构文章中将会详细解释这些内容。
上面的各个参数我不再解释,我想大家一看就明白。
下面让我们在上面的简单配置上开始一步一步的进行各种高级配置:
服务存活范围
Axis提供Session、Request和Application三种可选范围配置。具体配置标记为:

...

posted on 2006-06-08 18:06 xiaofeng 阅读(172) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航:
 

导航

统计

常用链接

留言簿(2)

随笔分类

随笔档案

文章分类

文章档案

收藏夹

搜索

最新评论

阅读排行榜

评论排行榜