Linux使用Java将C++程序发布为webservice(wsdl)

现有一个c++程序,如图,我们要将此程序发布为webservice。
这里写图片描述
文件夹中的samplebase为可执行文件。
1. 配置环境
由于程序中引用了gdal环境,mpi和tomcat,因此我们首先要在Linux上配置好这些环境。
2. 编译
我们对c++程序进行编译,编译时要确保.cpp和.h以及main.cpp在同一个目录下

mpic++ *.cpp -o samplebase -lgdal

打开终端,进入c++程序所在的目录,输入以上命令即可编译,编译成功后即出现上图所示的samplebase可执行文件。其中-lgdal是引用已配置的gdal库。
3. 运行samplebase
由于本程序使用了mpi环境,因此运行samplebase时需要使用mpirun命令:mpirun -n 进程数 程序路径 参数。本程序是在单个计算机上完成的,没有配置集群环境,因此进程数设为本机的计算机核心数。程序路径即为我们生成的samplebase可执行文件的路径。在终端中输入一下命令即可:

mpirun -n 4 samplebase "/home/admin/work/sampleWebservice/data/geo.tif#/home/admin/work/sampleWebservice/data/evap.tif#/home/admin/work/sampleWebservice/data/slp.tif#/home/admin/work/sampleWebservice/data/rain.tif" "/home/admin/work/sampleWebservice/data/allpoints.csv" "Geology?Boolean#Climate?Gower#Terrain?Gower#Climate?Gower" 0.5 "/home/admin/work/sampleWebservice/result/property" "/home/admin/work/sampleWebservice/result/uncertainty"

在终端命令行中输入以上命令,即可成功运行。说明我们已经成功将C++算法封装为了可执行程序。
至此,我们是将一个c++程序封装为了可执行程序。
~~~~~~~~~~~~~~~~~~~~~~~~~下面进入正题~~~~~~~~~~~~~~~~~~~~~~~~
4. 编写java类并发布webservice
4.1 在eclipse中建立一个Java project
这里写图片描述
这里我们新建了一个Java类,代码如下:

package com.samplebase.solim;
import java.io.IOException; 
public class Csolim {
    public String calcProperty(String environLyrsPath,String samplePath,String attriRules,String threshold,String propertyResultPath, String uncertaintyResultPath) throws InterruptedException  
    {  
        String command="mpirun -n 4 /home/admin/work/sampleWebservice/samplebase/samplebase"+" " +environLyrsPath+" "+  
                samplePath+" "+attriRules+" "+threshold+" "+propertyResultPath +" "+uncertaintyResultPath;    
        Process process;  
        try {  
            process = Runtime.getRuntime().exec(command);  
            process.waitFor();  
            int exitCode = process.exitValue(); 
            if(exitCode == 0)  
                {  
                    //sucess  
                    System.out.println("The process execution sucess!");  
                }  
                else  
                {  
                    //failed  
                    System.out.println("The process execution failure!");  
                }  
        } catch (IOException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }  
        return "success";  
    }  

}

这个Java类的主要作用就是通过Java调用我们已经生成好的c++可执行程序。
4.2 将本java类发布为webservice
右键选择Csolim.java,选择 web services—->create web service,按照如下界面一路next直到finish。
这里写图片描述
成功之后我们便会在eclipse中看到这样的两个项目:WebServiceProject和WebServiceProjectClient,其中在WebServiceProject下正好是我们所需要的wsdl文件。
这里写图片描述
这里写图片描述
右键Csolim.wsdl,选择Web services–>Test with Web Services Exploer。
这里写图片描述
如图所示,在这里我们便看到了我们在Java类中写的calcProperty方法,下面是方法所需的参数。我们在这里输入参数,便可成功调用我们的C++程序。
5. 导出war包
右键点击Java类的工程名“samplebase”,Export—>WAR file,导出War 包,将导出的War 包放到tomcat 的 webapps 目录下,重启 tomcat,这时我们在浏览器中输入以下地址即可访问我们生成的wsdl。

http://localhost:8080/WebServiceProject/services/Csolim?wsdl

这里写图片描述

如果其他机器要使用我们的wsdl的话,需要将localhost改为本机的IP地址。
6. 配置防火墙
此时,别的机器有可能还是无法访问我们的wsdl,因此我们要检查一下我们机器的防火墙设置了。
打开终端,输入:

sudo vim /etc/sysconfig/iptables

对防火墙进行配置,允许tomcat的8080端口通过。加入图中标红的语句即可。
这里写图片描述
输入命令,启动一下防火墙即可

service iptables start

或者,我们换一种方式,直接将防火墙关闭。

sudo service iptables stop

————————————————分割线————————————————————–
我们在步骤4.1中,也可以建立一个dynamic web project,这样在工程名samplebase目录下就会生成我们需要的wsdl。
这里写图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值