AXIS WebService
axis
axis
软件领域
全称:Apache EXtensible Interaction System 阿帕奇可扩展交互系统
Axis本质上就是一个SOAP引擎,提供创建服务器端、客户端和网关SOAP操作的基本框架。Axis目前版本是为Java编写的,不过为C++的版本正在开发中。但Axis并不完全是一个SOAP引擎,它还包括:
是一个独立的SOAP服务器。
是一个嵌入Servlet引擎(例如Tomcat)的服务器。
支持WSDL。
提供转化WSDL为Java类的工具。
提供例子程序。
提供TCP/IP数据包监视工具。
apache ws
Axis是第三代Apache SOAP,从2000年起,SOAP v2开发小组开始讨论如何让Axis更加灵活、可配置,以及能够处理SOAP和来自W3C的各种XML标准。通过不断地讨论和代码编写,Axis目前取得了如下成果:
速度提高。 Axis通过基于事件的SAX对XML文档进行处理,从而在速度和效率上比Apache SOAP有所提高。
灵活性提高。
稳定性提高。
提供面向组件的部署。
提供一个简洁的传输抽象框架。其核心引擎完全于传输方式独立。从而使基于何种协议传输的选择更加灵活。
支持WSDL。包括到处WSDL和客户代理生成等。
Axis支持的功能:
SOAP1.1/1.2引擎。
灵活的配置和部署系统。
支持及时自动生成SOAP服务(JWS)。
支持所有的基本数据类型,为自定义串行操作提供类型映射系统。
JavaBean的自动串行操作,包括将自定义属性类型映射到XML的属性和元素。
RPC和基于消息的SOAP服务提供者。
从部署好的服务自动生成WSDL。
WSDL2Java工具可以从WSDL描述文件中产生相应的客户和服务器端SOAP操作框架。
初步提供安全扩展,能够与Servlet2.2安全集成。
通过HTTP Cookie和与传输无关的SOAP头信息提供会话跟踪。
初步支持带附件的SOAP消息。
在EJB方面提供把EJB作为Web服务的访问途经。
基于Servlet的HTTP传输。
基于JMS的传输。
独立的服务器(但需要HTTP 服务器和Servlet容器支持)。
提供客户端、服务器端相关应用程序的样例。
Axis的运行需要如下组件包
axis.jar
jaxrpc.jar
saaj.jar
commons-logging.jar
commons-discovery.jar
wsdl4j.jar
使用wsdl2Java工具(axis1.4 + j2sdk1.4.2_09):
1. 下载axis:http://apache.etoak.com/ws/axis/1_4/
下载axis-bin-1_4.zip ,解压,拷贝lib下的jar包
需下载activation.jar和mail.jar,否则在生成Java文件和调用的时候会出现异常:- Unable to find required classes (javax.activation.DataHandler and javax.mail.internet.MimeMultipart). Attachment support is disabled.
下载javamail和jaf,解压出mail.jar和activation.jar
http://java.sun.com/products/javamail/downloads/index.html
http://java.sun.com/products/javabeans/glasgow/jaf.html#download
2. wsdl2Java ant脚本
WSDL文件的下载地址参见:http://api.google.com/GoogleSearch.wsdl
打开并保存为GoogleSearch.wsdl到工程axis-1_4工程目录下
——————————————————————–
set JAVA_HOME = C:\j2sdk1.4.2_09
set PATH = %JAVA_HOME%\bin;%JAVA_HOME%\lib;%JAVA_HOME%\jre\lib;
set CLASSPATH = %JAVA_HOME%\lib;%JAVA_HOME%\jre\lib;
set Axis_Lib=E:\ming\workspace\axis-1_4\lib
set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib%
set Output_Path=E:\ming\workspace\axis-1_4\src
set Package=com.google.api
%Java_Cmd% org.apache.axis.wsdl.WSDL2Java -o%Output_Path% -p%Package% GoogleSearch.wsdl
——————————————————————–
解析:
set Axis_Lib=E:\ming\workspace\axis-1_4\lib //Axis jar包存放的文件夹
set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib%
set Output_Path=E:\ming\workspace\axis-1_4\src //eclipse中axis-1.4工程路径
set Package=com.google.api //生成的java文件存放的包
%Java_Cmd% org.apache.axis.wsdl.WSDL2Java -o%Output_Path% -p%Package% GoogleSearch.wsdl //开始将GoogleSearch.wsdl生成为java文件
3. 编写客户端调试
package com.google.api;
import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
public class ClientGoogle {
public static void main(String[] args) throws ServiceException,
RemoteException {
String clientKey = “—————key—————–”;
GoogleSearchServiceLocator service = new GoogleSearchServiceLocator();
GoogleSearchPort_PortType gsp = service.getGoogleSearchPort();
//Google Search API
GoogleSearchResult searchResult = gsp.doGoogleSearch(clientKey,
“www.williamlong.info”, 0, 10, false, “”, false, “”, “latin1″,
“latin1″);
System.out.println(“Google Search Results:”);
System.out.println(“======================”);
ResultElement results[] = searchResult.getResultElements();
for (int counter = 0; counter < results.length; ++counter) {
ResultElement result = results[counter];
String returnResult = “(‘” + result.getTitle() + “‘,’”
+ result.getURL() + “‘,’” + result.getSnippet() + “‘)”;
System.out.println(“Return Result”);
System.out.println(returnResult);
}
//Google CachedPage
byte[] cachedBytes = gsp.doGetCachedPage(clientKey,
“http://www.williamlong.info/”);
System.out.println(“Cached page:”);
System.out.println(“============”);
String cachedString = new String(cachedBytes);
System.out.println(cachedString);
//Google SpellingSuggestion
String suggestion = (String) gsp.doSpellingSuggestion(clientKey,
“williamlong”);
System.out.println(suggestion);
}
}