论坛登陆 用户名:  密 码:
设为首页  加入收藏
08年北京名校秋季招生
名牌院校免试入学宽进严出,突破考分限制,名校与你零距离,以下院校按报名先后顺序录取,24小时网上报名覆盖全国
  您现在的位置: 中国教育招生在线 >> IT >> JAVA认证 >> IT正文
详解怎样使用Axis开发Web Service的实例
 作者:佚名     2007-3-14 17:05:56        来源:不详  浏览次数:

 

 

 

 

 

 

 

 

一、Axis安装 1、环境 J2SE SDK 1.3 or 1.4: 我使用 1.4.2 Servlet Container: 我使用的Tomcat 5.0

2、到 http://ws.apache.org/Axis/网站下载Axis安装包

3、解压缩安装包,将Axis_UNZIP_PATH\Axis-version\webapps下的Axis包拷贝到TOMCAT_HOME\webapps\下,以下约定Axis_HOME为该TOMCAT_HOME\webapps\Axis目录

4、启动tomcat,访问http://localhost:8080/Axis 检查安装是否成功

5、以上步骤执行成功,可以开发webservice例子了

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

1、Dynamic Invocation Interface ( DII)

2、Stubs方式

3、Dynamic Proxy方式

二、编写DII(Dynamic Invocation Interface )方式web服务

1.编写服务端程序HelloClient

public class HelloClient
{
    public String getName(String name)
    {
        return "hello "+name;
    }
}

2、将源码拷贝到Axis_HOME下,重命名为 HelloClient.jws

3、访问连接http://localhost:8080/Axis/HelloClient.jws?wsdl,页面显示Axis自动生成的wsdl

4、编写访问服务的客户端 TestHelloClient.java

import org.apache.Axis.client.Call;
import org.apache.Axis.client.Service;
import javax.xml.namespace.QName;
import javax.xml.rpc.ServiceException;
import java.net.MalformedURLException;
import java.rmi.RemoteException;

public class SayHelloClient2
{
    public static void main(String[] args)
	{
        try
		{
  String endpoint =
  "http://localhost:8080/Axis/HelloClient.jws";

    Service service = new Service();
            Call call = null;

            call = (Call) service.createCall();

            call.setOperationName(new QName(
               "http://localhost:8080/Axis/HelloClient.jws", 
			   "getName"));
            call.setTargetEndpointAddress
			(new java.net.URL(endpoint));

            String ret = (String) call.invoke(new Object[] 
			{"zhangsan"});
            System.out.println("return value is " + ret);
        } 
		catch (Exception ex)
		{
       ex.printStackTrace();
        }
    }
}

三、编写Dynamic Proxy方式访问服务

1、编写部署服务端程序,同上边DII方式,本次仍使用上边部署的HelloClient

2、编写代理接口

public interface HelloClientInterface
extends java.rmi.Remote
{
    public String getName(String name)
	throws java.rmi.RemoteException;
}

3、编写并执行客户端程序TestHelloClient.java

import javax.xml.rpc.Service;
import javax.xml.rpc.ServiceFactory;
import java.net.URL;
import javax.xml.namespace.QName;

public class TestHelloClient 
{
    public static void main(String[] args)
	{
        try
        {
            String wsdlUrl = 
			"http://localhost:8080/Axis/HelloClient.jws?wsdl";
            String nameSpaceUri = 
			"http://localhost:8080/Axis/HelloClient.jws";
            String serviceName = "HelloClientService";
            String portName = "HelloClient";

            ServiceFactory serviceFactory = 
			ServiceFactory.newInstance();
            Service afService =
			serviceFactory.createService(new URL(wsdlUrl),
         new QName(nameSpaceUri, serviceName));
            HelloClientInterface proxy = (HelloClientInterface)
        afService.getPort(new QName(
                    nameSpaceUri, portName), 
					HelloClientInterface.class);
            System.out.println
			("return value is "+proxy.getName("john") ) ;
        }catch(Exception ex)
        {
            ex.printStackTrace() ;
        }
    }
}

四、编写wsdd发布web服务,编写stub client访问web服务

1、编写服务端程序server,SayHello.java,编译server.SayHello.java

package server;
public class SayHello
{
    public String getName(String name)
    {
        return "hello "+name;
    }
}
2.编写LogHandler.java
import org.apache.Axis.AxisFault;
import org.apache.Axis.Handler;
import org.apache.Axis.MessageContext;
import org.apache.Axis.handlers.BasicHandler;

import java.util.Date;

public class LogHandler 
extends BasicHandler 
{
 public void invoke
(MessageContext msgContext) 
throws AxisFault
    {
        /** Log an access each time 
		we get invoked.
         */
        try {
            Handler serviceHandler
			= msgContext.getService();

            Integer numAccesses =
  (Integer)serviceHandler.getOption("accesses");
            if (numAccesses == null)
                numAccesses = new Integer(0);
numAccesses = new Integer
(numAccesses.intValue() + 1);
Date date = new Date();
 String result = 
 date + ": service " +
msgContext.getTargetService() +
" accessed " + numAccesses + " time(s).";
serviceHandler.setOption
("accesses", numAccesses);
System.out.println(result);
        } catch (Exception e)
		{
            throw AxisFault.makeFault(e);
        }
    }
}

3、编写wsdd文件

deploy.wsdd
<deployment xmlns=
"http://xml.apache.org/Axis/wsdd/"
  xmlns:java=
			"http://xml.apache.org/Axis/wsdd/providers/java">           
   <handler name="print" type="java:LogHandler"/> 
 <service name="sayhello"
 provider="java:RPC">
   <requestFlow>
     <handler type="print"/>
   </requestFlow>
  <parameter name="className" 
  value="server.SayHello"/>
  <parameter name="allowedMethods"
  value="*"/>  
 </service>
</deployment>

3、将编译后的文件拷贝到Axis_HOME/WEB-INF/classes下,如:D:\tomcat\webapps\Axis\WEB-INF\classes

4、发布服务:

java org.apache.Axis.client.AdminClient deploy.wsdd

5、生成client stub文件

a:方式1

将SayHello.java拷贝到Axis_HOME/下,重命名为SayHello.jws,

执行下面的命令生存client stub

java org.apache.Axis.wsdl.WSDL2Java 
-p client  http://localhost:8080
/Axis/services/SayHello.jws?wsdl

b:方式2

执行如下命令生成SayHello.wsdl

java org.apache.Axis.wsdl.Java2WSDL
-oSayHello.wsdl -lhttp://localhost:8080
/Axis/services/SayHello -nsayhello server.SayHello

执行如下命令生成client stub

java org.apache.Axis.wsdl.WSDL2Java 
SayHello.wsdl  -p client

生成的stub client文件列表为:

1.SayHello.java

2.SayHelloService.java。

3.SayHelloServiceLocator.java

4.SayHelloSoapBindingStub.java

6、编写客户端程序,编译并执行

public class SayHelloClient
{
    public static void main(String[] args)
	{
        try
		{
    SayHelloService service = new client.
       SayHelloServiceLocator();
          client.SayHello_PortType 
		  client = service.getSayHello();
            String retValue=client.getName("zhangsan");
            System.out.println(retValue);
} 
catch (Exception e)
{
 System.err.println
 ("Execution failed. Exception: " + e);
        }
    }
}

(T117)


责任编辑:lss
  相关新闻
怎样学习C语言
CCIE是怎样炼成的—我到北京考试的经历
怎样才能阻止用户打开加密信息?
怎样配置具有SSL保护的FTP服务器
怎样在Java应用程序中监视CPU的使用状况
怎样在Linux下Tomcat与Apache服务器集成
怎样成为优秀的软件模型设计者?
教您怎样在Web应用中动态创建PDF文件
详解怎样使用Axis开发Web Service的实例
Jboss的JDBC数据源配置步骤详解大全
怎样学习C语言
CCIE是怎样炼成的—我到北京考试的经历
Jboss的JDBC数据源配置步骤详解大全
教您怎样部署基于WebSphere的J2EE应用
教您怎样在Web应用中动态创建PDF文件
Tomcat与Java Web开发技术详解连载之一
Tomcat与Java Web开发技术详解连载之二
Tomcat与Java Web开发技术详解连载之三
详解怎样使用Axis开发Web Service的实例
Tomcat与Java Web开发技术详解连载之三
  评论
现在有100人对本文发表评论
查看所有评论
 
推  荐
 
100本成功必读热销书
热门招生
  北京文理研修学院   前进大学
  北京明园大学   北京建设大学
  北京邮电大学世纪学院   北方工商管理学院
  联想软件定向委培班   香港数码动画学院
  青年企业管理研修学院   北京华夏管理学院
热门培训
网络化办公专家培训认证 电子科技大学软件学院
软件测试工程师培训认证 北大青鸟十大授权培训
IT硬件工程师培训认证班 北京环球雅思荷兰预科
JAVA开发工程师培训 潜能时代IT服务管理培训
网络信息化工程师培训 清华大学继续教育学院
论坛精选
 
有些细节是男人也该注意的风度!最容易读错的字
某强人手机里保存的30条短信 中国十大高薪职业
最感人的十大韩剧经典台词 嫁给工程师的N个理由
爆强!只有一句话的鬼故事 转贴教你如何做妖精
 女人一定要記住的話 女人最好别嫁给最爱的男人
城市联盟
 大连 上海 天津 广州 西安 深圳  天津  青岛  大连  福州  沈阳  青海  连云港  南京  吉林  厦门  威海  辽宁  呼和浩特
Copyright © 2006   www.edu999.com   All rights reserved. 中国教育招生在线  版权所有
北京市通信管理局[2004]字第552号函    京ICP证040442号