新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> Web服务(Web Services,WS), 语义Web服务(Semantic Web Services, SWS)讨论区: WSDL, SOAP, UDDI, DAML-S, OWL-S, SWSF, SWSL, WSMO, WSML,BPEL, BPEL4WS, WSFL, WS-*,REST, PSL, Pi-calculus(Pi演算), Petri-net,WSRF,
    [返回] 中文XML论坛 - 专业的XML技术讨论区W3CHINA.ORG讨论区 - Web新技术讨论『 Web Services & Semantic Web Services 』 → Axis开发详解 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 8687 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: Axis开发详解 举报  打印  推荐  IE收藏夹 
       本主题类别: Web Services    
     wanggou 帅哥哟,离线,有人找我吗?
      
      
      威望:1
      等级:计算机学士学位(版主)
      文章:229
      积分:2047
      门派:XML.ORG.CN
      注册:2005/10/20

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给wanggou发送一个短消息 把wanggou加入好友 查看wanggou的个人资料 搜索wanggou在『 Web Services & Semantic Web Services 』的所有贴子 引用回复这个贴子 回复这个贴子 查看wanggou的博客楼主
    发贴心情 Axis开发详解

    一、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);
            }
        }
    }


       收藏   分享  
    顶(0)
      




    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2008/12/15 13:38:00
     
     lixiaoming 帅哥哟,离线,有人找我吗?
      
      
      等级:大二期末(数据结构考了98分!)
      文章:78
      积分:409
      门派:XML.ORG.CN
      注册:2008/12/8

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给lixiaoming发送一个短消息 把lixiaoming加入好友 查看lixiaoming的个人资料 搜索lixiaoming在『 Web Services & Semantic Web Services 』的所有贴子 引用回复这个贴子 回复这个贴子 查看lixiaoming的博客2
    发贴心情 
    很详细,不错,能不能在原程序中接着加入uddi,构成一个完整的web service 架构
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2008/12/16 9:19:00
     
     jasonzhang123 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:5
      积分:85
      门派:XML.ORG.CN
      注册:2006/12/27

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给jasonzhang123发送一个短消息 把jasonzhang123加入好友 查看jasonzhang123的个人资料 搜索jasonzhang123在『 Web Services & Semantic Web Services 』的所有贴子 引用回复这个贴子 回复这个贴子 查看jasonzhang123的博客3
    发贴心情 
    写得不错,能不能再接再厉把Axis2的步骤写写呢?
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2009/1/20 22:27:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 Web Services & Semantic Web Services 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2025/8/13 11:28:14

    本主题贴数3,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    78.125ms