您的位置:首页 > 其它

Axis支持三种web service的部署和开发

2009-03-09 16:24 399 查看
WebService更多是一种标准,而不是一种具体的技术。不同的平台,不同的语言大都提供WebService的开发实现。在Java领域,WebService的一个成熟实现是Axis。

q Axis是Apache的一个开源WebService引擎,它是目前最为成熟的开源WebService引擎之一。

q Apache Axis是符合W3C的SOAP协议的实现。

q 该项目是属于Apache SOAP协议的子项目。

14.6.1.1 Axis的下载

登陆http://www.apache.org/dyn/closer.cgi/ws/axis/1_4站点,Axis的最新版本是1.4,笔者的示例程序都是基于该版本完成。下载到axis-bin-1_4.zip文件,解压缩该文件,发现如下的文件结构:

q docs:存放Axis的说明文档。

q lib:存放Axis的二进制发布包。

q samples:存放利用Axis发布WebService的示例代码。

q webapps:存放安装Axis的基础应用。

q xmls:存放相关配置文档。

q 还有LICENSE等相关说明文档。

14.6.1.2 Axis的安装

安装Axis,首先必须保证系统已经正确安装了Web服务器,笔者使用Tomcat5.0.28。也可使用其他应用服务器,例如WebLogic。webapps下的axis路径全部复制到Tomcat的webapps路径下。然后打开浏览器,输入:http://localhost:8888/axis/。

如果出现如图14.3所示界面表示Axis的基本类库已经安装成功,地址中的8888是笔者的Tomcat的端口。单击如图14.3所示页面的左上方“Validation”链接,出现如图14.4所示界面:





图14.3 Axis安装成功界面 图14.4 Axis校验界面

该页面显示Axis的必需组件还缺少一个没有安装,两个可选组件也没有安装,单击上面的提示链接,分别登陆:

q http://java.sun.com/products/javabeans/glasgow/jaf.html
q http://java.sun.com/products/javamail/
q http://xml.apache.org/security/
依次下载如下三个压缩文件:

q jaf-1_1-fr.zip 下载: https://sdlc1a.sun.com/ECom/EComActionServlet;jsessionid=A45E3E2265BF823B4399BB95F59DD152

q javamail-1_4.zip 下载:

https://sdlc1a.sun.com/ECom/EComActionServlet;jsessionid=503F19F1D96612179D16E4CC7436893F

q xml-security-bin-1_2_1.zip 下载: http://xml.apache.org/security/dist/java-library/

将这三个压缩文件解压缩。

将jaf-1_1-fr.zip压缩包中的activation.jar文件,复制到axis应用的WEB-INF"lib下;

将javamail-1_4.zip压缩包中的mail.jar文件,复制到axis应用的WEB-INF/lib下;

再将xml-security-bin-1_2_1.zip的lib下xmlsec-1.2.1.jar和xalan.jar文件,复制到WEB-INF/lib下。再次校验Axis,看到页面提示全部安装成功。

Axis支持三种web service的部署和开发,分别为:

  1、Dynamic Invocation Interface ( DII)

  2、Dynamic Proxy方式

  3、Stubs方式

[align=left]Dynamic Invocation Interface ( DII)开发方式[/align]

对于前两种Web Service的发布基本一样,客户端的访问也很类似,第一种发布就是直接将.java后缀改为.jws,并将生成的.class文件拷贝到WEB- INF/jwsclasses下面,非常简单,但它也有缺陷,就是不适合程序部署和大型项目开发,而且不支持包(package)的形式.
1. 在Eclipse里新建一个Tomcat Project取名为AxisTest ,将axis-1_4"webapps"axis中几个必须的文件拷贝到你的AxisTest工程文件下,一个是WEB-INF"lib下的所有文件及 mail.jar,activation.jar,xmlsec-1.4.1.jar,xalan.jar,一个是WEB-INF下面的web.xml文件,我们来简单看一下web.xml这个文件

<servlet>

<servlet-name>AxisServlet</servlet-name>

<display-name>Apache-Axis Servlet</display-name>

<servlet-class>

org.apache.axis.transport.http.AxisServlet

</servlet-class>

</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/AxisServlet、*.jws、/services/*这几种映射会引起调用AxisServlet这个类,我们要用的就这几行,其他的可以直接删掉。

2.在WEB-INF/src下面新建一个myService.java文件,如下

public class myService {

public String getusername(String name){

return "Hello "+name+",this is an Axis DII Web Service";

}

}
注意这个java文件是不属于任何package的,如果你要将其放入某个package那么Axis会提示你找不到它生成的class文件从而不能将其转换为wsdl文件。

将myService.java拷贝到AxisTest根目录下,将其后缀改为jws。

启动Tomcat输入http://localhost:8080/AxisTest/myService.jws,
[align=left]3.点击Click to see the WSDL,这时候你会在WEB-INF下面看到Axis会自动生成一个jwsClasses文件夹,jwsClasses下面会有一个myService.class文件[/align]
4.客户端

com.axistest包下新建一个myServiceTestorByjws.java,选中public static void main(),

代码如下:

package com.client;
import java.net.MalformedURLException;

import java.rmi.RemoteException;
import javax.xml.rpc.ParameterMode;

import javax.xml.rpc.ServiceException;
import org.apache.axis.client.Call;

import org.apache.axis.client.Service;

import org.apache.axis.encoding.XMLType;
public class MyServiceClient {

public static void main(String[] args) throws ServiceException, MalformedURLException, RemoteException {

String endpoint="http://localhost:8080/AxisTest/MyService.jws";

String name=" 张三";

Service service = new Service();

Call call = (Call) service.createCall();

call.setTargetEndpointAddress(new java.net.URL(endpoint));

call.addParameter("param1",XMLType.XSD_STRING,ParameterMode.IN);

call.setOperationName( "sayHello" );

call.setReturnType( XMLType.XSD_STRING );

String ret = (String) call.invoke( new Object[] { name } );

System.out.println("返回结果:" + ret);

}
[align=left]}[/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: