zoukankan      html  css  js  c++  java
  • 七、axis调用RMI模式WebService

    和先前写的web service几乎一样,不同的是这里写的WebService要实现接口,而我们实现的接口要继承rmi的Remote接口才行。

    1、RMI接口,很简单的2个方法,继承Remote接口

    代码
    package com.hoo.rmi;

    import java.rmi.Remote;
    /**
    * <b>function:</b>用axis实现RMI调用
    *
    @author hoojo
    * @createDate Dec 16, 2010 16:22:25 PM
    * @file HelloRMI.java
    * @package com.hoo.rmi
    * @project AxisWebService
    * @blog
    http://blog.csdn.net/IBM_hoojo
    * @email hoojo_@126.com
    *
    @version 1.0
    */
    public interface HelloRMI extends Remote {
    public String sayHello(String name);

    public int getAge(int age);
    }

    2、实现上面的接口

    代码
    package com.hoo.rmi.impl;

    import com.hoo.rmi.HelloRMI;

    /**
    * <b>function:</b>实现RMI服务器接口
    *
    @author hoojo
    * @createDate Dec 16, 2010 16:23:15 PM
    * @file HelloRMIImpl.java
    * @package com.hoo.rmi.impl
    * @project AxisWebService
    * @blog
    http://blog.csdn.net/IBM_hoojo
    * @email hoojo_@126.com
    *
    @version 1.0
    */
    public class HelloRMIImpl implements HelloRMI {

    public int getAge(int age) {
    return age + 10;
    }

    public String sayHello(String name) {
    return name + " say: hello rmi WebService !";
    }
    }

    3、定制wsdd发布服务

    代码
    <?xml version="1.0" encoding="UTF-8"?>
    <deployment xmlns="http://xml.apache.org/axis/wsdd/"
    xmlns:java
    ="http://xml.apache.org/axis/wsdd/providers/java">
    <service name="HelloRMI" provider="java:RPC">
    <parameter name="className" value="com.hoo.rmi.impl.HelloRMIImpl" />
    <parameter name="allowedMethods" value="getAge,sayHello" />
    <parameter name="scope" value="request" />
    </service>
    </deployment>

    4、命令行发布服务

    java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient -lhttp://localhost:8080/AxisWebService/services/AdminService deployRMI.wsdd

    在浏览器中输入:

    http://localhost:8080/AxisWebService/servlet/AxisServlet

    即可查看到刚才发布的服务

    5、编写客户端调用代码

    代码
    package com.hoo.client;

    import java.rmi.RemoteException;

    import javax.xml.namespace.QName;
    import javax.xml.rpc.ServiceException;

    import org.apache.axis.client.Call;
    import org.apache.axis.client.Service;
    import com.hoo.rmi.HelloRMI;
    /**
    * <b>function:</b>axis WebService的RMI调用模式
    *
    @author hoojo
    * @createDate Dec 16, 2010 16:28:09 PM
    * @file HelloRMIClient.java
    * @package com.hoo.client
    * @project AxisWebService
    * @blog
    http://blog.csdn.net/IBM_hoojo
    * @email hoojo_@126.com
    *
    @version 1.0
    */
    public class HelloRMIClient {

    public static void main(String[] args) throws ServiceException, RemoteException {
    String url
    = "http://localhost:8080/AxisWebService/services/HelloRMI";
    //axis call调用
    Service service = new Service();
    Call call
    = (Call) service.createCall();
    call.setTargetEndpointAddress(url);
    call.setOperationName(
    new QName(url, "sayHello"));
    String result
    = (String) call.invoke(new Object[] { "jack" });
    System.out.println(result);

    //远程接口模式,只管接口不管实现,这就是面向接口的好处
    HelloRMI rmi = (HelloRMI) service.getPort(url, HelloRMI.class);
    System.out.println(rmi.getAge(
    22));
    }
    }

    HelloRMI rmi = (HelloRMI) service.getPort(url, HelloRMI.class);

    用rmi接口调用的还是比较简单明了,接口中的方法都一目了然。我们也不用操心接口里面的方法是怎么样实现的,更具有面向接口编程、更加透明化。

  • 作者:hoojo
    出处:
    blog:http://blog.csdn.net/IBM_hoojo
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权所有,转载请注明出处 本文出自:
分享道版权所有,欢迎转载,转载请注明出处,谢谢
收藏
关注
评论
查看全文
  • 相关阅读:
    assert的使用
    网络性能测试工具iperf的注意事项
    sskykeygen + sshcopyid避免ssh/scp每次输入密码
    遗留系统维护的思考
    IList(T)转换DataSet
    可扩展性(Extensibility): 构建灵活系统的思考
    页面加一个"数据正在载入,请等待... Loading, please wait..."的提示
    优化JavaScript
    创业与老子的顺其自然
    实用正则表达式匹配和替换
  • 原文地址:https://www.cnblogs.com/hoojo/p/1911382.html
  • Copyright © 2011-2022 走看看