最近做项目,遇到个需求: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.启动服务端与客户端
自此结束!