综合技术----ICE

最近做项目,遇到个需求:java调用C++接口。对接方提供了一个xx.ice文件。
经过调查资料发现存在ICE这个中间件可以满足不同语言之间不同协议的调用。
ice官网:https://zeroc.com。
按照官网指导,来到了java语言选择页面。
https://doc.zeroc.com/ice/3.7/hello-world-application/writing-an-ice-application-with-java
做了个简单的示例,步骤如下:

1.搭建java web工程

我搭建了一个简单的maven工程(官网是gradle),引入maven包

        <dependency>
            <groupId>com.zeroc</groupId>
            <artifactId>ice</artifactId>
            <version>3.7.6</version>
        </dependency

2.编写xx.ice文件

[["java:package:com.panda.ltz"]]
module rain
{
    interface MyIce
    {
        string sayMyIce(string msg);
    };
};

详见如下图:

3.下载代码转换器

下载地址:https://zeroc.com/downloads/ice/3.7/java#windows
我下载的是java版本,windows平台,详见如下图:

下载成功后是一个ice-3.7.6.msi文件,直接双击安装即可。
采用如下命令查看是否安装成功,命令:slice2java -v

4.将xx.ice文件转换成java代码

打开CMD,进入到xx.ice文件目录,执行代码转换命令:slice2java .\MyIce.ice --output-dir ....\src\main\java
发现生成了java代码,详见如下图:

5.编写服务端代码

public class TestServer {
    public static void main(String[] args) {
        try(com.zeroc.Ice.Communicator communicator = com.zeroc.Ice.Util.initialize(args)) {
            com.zeroc.Ice.ObjectAdapter adapter = communicator.createObjectAdapterWithEndpoints("SimplePrinterAdapter","default -p 10001");
            com.zeroc.Ice.Object object = new MyIceImp();
            adapter.add(object,com.zeroc.Ice.Util.stringToIdentity("SimplePrinter"));
            adapter.activate();
            communicator.waitForShutdown();
        }
    }
}

详见如下图:

6.编写客户端代码

public class TestClient {
    public static void main(String[] args) {
        try(com.zeroc.Ice.Communicator communicator = com.zeroc.Ice.Util.initialize(args)) {
            com.zeroc.Ice.ObjectPrx base = communicator.stringToProxy("SimplePrinter:default -p 10001");
            MyIcePrx myIcePrx = MyIcePrx.checkedCast(base);
            if (myIcePrx == null){
                throw new Error("Invalid proxy");
            }
            myIcePrx.sayMyIce("hello world");
        }
    }
}

详见如下图:

7.启动服务端与客户端


自此结束!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章