用Apache axis开发Web服务.docx
《用Apache axis开发Web服务.docx》由会员分享,可在线阅读,更多相关《用Apache axis开发Web服务.docx(12页珍藏版)》请在冰点文库上搜索。
用Apacheaxis开发Web服务
Axis1.x的安装配置以及简单例子
连接地址:
一. 安装和配置
1. axis1.x 主页 http:
//ws.apache.org/axis/
axis1.4 下载地址 http:
//www.apache.org/dist/ws/axis/1_4/axis-bin-1_4.zip
axis1.4 源码下载 http:
//www.apache.org/dist/ws/axis/1_4/axis-src-1_4.zip
2. 解压 axis-bin-1_4.zip 将子目录 webapps 目录下的axis目录 拷贝到 tomcat\webapps下
3. 从 axis-src-1_4\axis-1_4\lib 中拷贝 activation.jar 到tomcat\common\lib 下
从 jdk_home(例如:
"C:
\ProgramFiles\Java\jdk1.5.0")\lib下拷贝tools.jar 到 tomcat\common\lib下
从 下载javamail-1_4.zip 将其中的mail.jar拷贝到tomcat\common\lib 下
从http:
//xml.apache.org/security/dist/java-library/ 下载 xml-security-bin-1_3_0.zip 将其中的lib/xmlsec-1.3.0.jar拷贝到 tomcat/common/lib 下
4. 启动 Tomcat,访问 http:
//127.0.0.1:
8080/axis/ 正常将出现 一个Apache Axis的页面 点击其中的 Validation正常的显示是提示找到了所有
必要组件和可选组件
5. 配置环境变量
AXIS_HOME =Tomcat\webapps\axis
AXIS_LIB=%AXIS_HOME%\lib\WEB-INF\lib
AXISCLASSPATH=.;%AXIS_LIB%\axis.jar;%AXIS_LIB%\commons-discovery-0.2.jar;
%AXIS_LIB%\commons-logging-1.0.4.jar;%AXIS_LIB%\jaxrpc.jar;%AXIS_LIB%\saaj.jar;%AXIS_LIB%\log4j-1.2.8.jar;
%AXIS_LIB%axis-ant.jar; (注意这个)%TomcatHome%\common\lib\activation.jar;.....
也就是lib下所有包的名字,以及步骤3中加入的四个包的名字
另外有个log4j的配置,以后再补
注:
为了减少以后的麻烦 ,tomcat 服务器必须占用端口8080
二.发布服务(两种方式发布,三种方式调用)
A.DII(DynamicInvocationInterface)方式访问web服务
1.编写服务器代码
publicclassHelloWorld
{
publicStringgetName(Stringname)
{
return"hello"+name;
}
}
-显示引用文字-
2.将源码拷贝到Axis_HOME下,重命名为HelloWorld.jws
3.访问连接http:
//localhost:
8080/Axis/HelloWorld.jws?
wsdl,页面显示Axis自动生成的wsdl
4.编写访问服务的客户端代码
importorg.apache.Axis.client.Call;
importorg.apache.Axis.client.Service;
importjavax.xml.namespace.QName;
importjavax.xml.rpc.ServiceException;
import.MalformedURLException;
importjava.rmi.RemoteException;
publicclassSayHelloClient
{
publicstaticvoidmain(String[]args)
{
try
{
Stringendpoint=
"http:
//localhost:
8080/Axis/HelloWorld.jws";
Serviceservice=newService();
Callcall=null;
call=(Call)service.createCall();
call.setOperationName(newQName(
"http:
//localhost:
8080/Axis/HelloWorld.jws",
"getName"));
call.setTargetEndpointAddress
(new.URL(endpoint));
Stringret=(String)call.invoke(newObject[]
{"zhangsan"});
System.out.println("returnvalueis"+ret);
}
catch(Exceptionex)
{
ex.printStackTrace();
}
}
}
B.DynamicProxy方式访问服务
1. 编写部署服务端程序,同上边DII方式,本次仍使用上边部署的HelloWorld
2. 编写代理接口
publicinterfaceHelloWorldInterface extendsjava.rmi.Remote
{
publicStringgetName(Stringname)
throwsjava.rmi.RemoteException;
}
3. 编写并执行客户端程序TestHelloClient.java
importjavax.xml.rpc.Service;
importjavax.xml.rpc.ServiceFactory;
import.URL;
importjavax.xml.namespace.QName;
publicclassTestHelloClient
{
publicstaticvoidmain(String[]args)
{
try
{
StringwsdlUrl=
"http:
//localhost:
8080/Axis/HelloWorld.jws?
wsdl";
StringnameSpaceUri=
"http:
//localhost:
8080/Axis/HelloWorld.jws";
StringserviceName="HelloWorldService";
StringportName="HelloWorld";
ServiceFactoryserviceFactory=
ServiceFactory.newInstance();
ServiceafService=
serviceFactory.createService(newURL(wsdlUrl),
newQName(nameSpaceUri,serviceName));
HelloWorldInterface proxy=(HelloWorldInterface )
afService.getPort(newQName(
nameSpaceUri,portName),
HelloWorldInterface .class);
System.out.println
("returnvalueis"+proxy.getName("john"));
}catch(Exceptionex)
{
ex.printStackTrace();
}
}
}
C.编写wsdd发布web服务,编写stubclient访问web服务
1、编写服务端程序SayHello.java,编译SayHello.java
publicclassSayHello
{
publicStringgetName(Stringname)
{
return"hello"+name;
}
}
2. 编写LogHandler.java
importorg.apache.axis.AxisFault;
importorg.apache.axis.Handler;
importorg.apache.axis.MessageContext;
importorg.apache.axis.handlers.BasicHandler;
importjava.util.Date;
publicclassLogHandlerextendsBasicHandler
{
publicvoidinvoke(MessageContextmsgContext)throwsAxisFault
{
/**Loganaccesseachtime wegetinvoked. */
try{
HandlerserviceHandler =msgContext.getService();
IntegernumAccesses= (Integer)serviceHandler.getOption("accesses");
if(numAccesses==null)
numAccesses=newInteger(0);
numAccesses=newInteger(numAccesses.intValue()+1);
Datedate=newDate();
Stringresult=date+":
service"+msgContext.getTargetService()+"accessed"+numAccesses+"time(s).";
serviceHandler.setOption("accesses",numAccesses);
System.out.println(result);
}catch(Exceptione)
{
throwAxisFault.makeFault(e);
}
}
}
3.编写deploy.wsdd文件
//xml.apache.org/axis/wsdd/"xmlns:
java="http:
//xml.apache.org/axis/wsdd/providers/java">
LogHandler"/>
RPC">
4.将编译后的文件拷贝到Axis_HOME/WEB-INF/classes下,如:
D:
\tomcat\webapps\Axis\WEB-INF\classes
5.发布服务,生成服务配置文件 java-cp%AXISCLASSPATH%org.apache.axis.client.AdminClientdeploy.wsdd正常会输出一个文件server-config.wsdd
6.生成客户端代码
a:
方式1
将SayHello.java拷贝到Axis_HOME/下,重命名为SayHello.jws,
执行下面的命令生存clientstub
java-cp%AXISCLASSPATH%org.apache.axis.wsdl.WSDL2Java-pclient http:
//localhost:
8080/axis/SayHello.jws?
wsdl
这种方式相当于实际上使用了第一种发布方式来生成wsdl文件然后用WSDL2Java 生成客户端stub代码
b:
方式2
这种方式先用SayHello生成一个静态的SayHello.wsdl文件,然后用WSDL2Java 生成对应的客户端stub框架
执行如下命令生成SayHello.wsdl
java-cp%AXISCLASSPATH%org.apache.axis.wsdl.Java2WSDL-oSayHello.wsdl-lhttp:
//localhost:
8080/axis/services/SayHello-nsayhelloSayHello
执行如下命令生成clientstub
java-cp%AXISCLASSPATH%org.apache.axis.wsdl.WSDL2Java SayHello.wsdl -pclient
生成的stubclient文件列表为:
1.SayHello.java
2.SayHelloService.java。
3.SayHelloServiceLocator.java
4.SayHelloSoapBindingStub.java
6、编写客户端程序,编译并执行
publicclassSayHelloClient
{
publicstaticvoidmain(String[]args)
{
try
{
SayHelloServiceservice=newclient.
SayHelloServiceLocator();
client.SayHello_PortType
client=service.getSayHello();
StringretValue=client.getName("Yourname");
System.out.println(retValue);
}
catch(Exceptione)
{
System.err.println
("Executionfailed.Exception:
"+e);
}
}
}
Axis2 的安装配置以及简单例子
一.安装配置
1.axis2的主页 http:
//ws.apache.org/axis2/index.html
axis21.0的下载地址 http:
//ws.apache.org/axis2/download/1_0/download.cgi
2.servlet容器安装(以tomcat5.5为例)
从上面给出的下载地址下载WarDistribution(axis2.war)
放到 tomcat\webapps目录下,在浏览器中输入http:
//localhost:
8080/axis2 正常显示Welcome的页面,(查看tomcat\webapps 可以看到生成一个名为axis2的文件夹)点击Validate 验证安装是否正常
一切正常侯即可使用axis2发布web服务
axis2web管理环境的用户名:
admin密码:
axis2
3.配置开发相关环境变量
需要添加AXIS2_HOME = axis2解压目录
为了随处可以使用axis2提供的代码生成工具,可以在path 环境变量里添加 %AXIS2_HOME%\bin
二.开发服务
axis2通过两种方式来开发一个web服务,一种方式通过使用axis2primary APIs
另一种方式使用wsdl文件来生成web服务的客户端和服务端框架代码
A. 通过axis2primaryAPIs开发webservice
这种方式需要学习axis2对象模型(叫AXIOM)的基础知识,而且可扩展性不如后一种方式。
B.通过wsdl文件开发和测试一个web服务
AXIS2_HOME\samples\wsdl下有wsdl文件的例子,以Axis2SampleDocLit.wsdl为例,简单介绍一下生成框架代码的过程,
1. 在命令行模式里,进入到AXIS2_HOME\samples\wsdl目录
注意:
这个Axis2SampleDocLit.wsdl文件有点问题,需要将里边style="rpc"的地方全部改成style="document"
2. 运行wsdl2java-uri.\Axis2SampleDocLit.wsdl-ss-sd-dxmlbeans-g-oAxis2SampleDocLit-porg.apache.axis2.userguide
这个命令在当前目录生成一个文件夹Axis2SampleDocLit
3. 添加服务:
编辑
Axis2SampleDocLit\src\org\apache\axis2\userguide\Axis2SampleDocLitServiceSkeleton.java 文件
编辑echoString方法为
publicorg.apache.axis2.userguide.xsd.EchoStringReturnDocumentechoString(
org.apache.axis2.userguide.xsd.EchoStringParamDocument param4)
{
Stringname=param4.getEchoStringParam();
StringretStr="Hello"+