最近做項目,遇到個需求: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.啓動服務端與客戶端
自此結束!