现有一个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。

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

  1. linux下java调用matlab程序,linux_java调用windows_matlab程序

    0 说明 本文为研究java和matlab的混合编程,进行了详细的测试和探索,以解决linux环境下java程序调用matlab程序的一个应用. linux端的环境 :(运行java程序并调用wind ...

  2. java httppost wsdl_Java使用HttpUrlConnection调用webService(wsdl)

    首先需要下载工具https://pan.baidu.com/s/1XQ-VubxcPFoqwGm7wierHg 下载成功后解压打开exe程序,在wsdl endpoint中输入你wsdl的地址,点击g ...

  3. linux下启动应用程序,RedHat Linux 9下启动应用程序

    RedHat Linux 9下启动应用程序 发布时间:2005-09-02 14:07:29来源:红联作者:zz123 我安装了一个从互联网上下载的应用程序,一切似乎都正常,但在我键入它的名称后,却总 ...

  4. Linux下Java程序中文乱码问题研究

    Linux下Java程序中文乱码问题研究 摘  要:在一个项目的开发中,我用linux内核源代码和busybox源代码自己编译打造的操作系统mylinux 1.0 ,服务器是我用java语言自己编写的 ...

  5. 怎么用linux设计一个小程序,“Linux”小程序发布一个月后,我们发现了什么

    原标题:"Linux"小程序发布一个月后,我们发现了什么 这一个月来,这个小程序得到了八千多人的使用,一百多位贡献者实际参与了翻译贡献,其中贡献最高的"Datura st ...

  6. kali 运行java_kali linux运行java程序

    我一般是在windows上运行java程序.这次在kali linux上运行java程序.在我们安装的kali linux2.0是自带了OpenJdk.下面是学习啦小编跟大家分享的是kali linu ...

  7. linux下java程序乱码,解决linux下java程序(例如applet)中文乱码问题

    解决linux下java程序(例如applet)中文乱码问题 平台:Mandriva 2006.0 将Windows下的字体文件simsun.ttc拷贝到/usr/share/fonts/zh_CN, ...

  8. linux重启java程序

    这篇文章主要讲解 linux重启java程序 #!/bin/sh jarname='test-1.0' pid=`ps aux | grep $jarname | grep -v grep | awk ...

  9. java Linux icepdf,ICEpdf 6.1.1发布,Java的PDF类库

    ICEpdf 6.1.1发布,Java的PDF类库 发布时间:2016-04-05 09:32:56来源:红联作者:baihuo ICEpdf 6.1.1 发布了.ICEpdf 是一个轻量级的开源 J ...

最新文章

  1. [.NET源码] EF的增删改查
  2. boost::iterator_property_map用法的测试程序
  3. JUC原子类-数组类型(三)
  4. c语言数组指定位置插入和删除_玩转C语言链表,单链表/双向链表的建立/遍历/插入/删除...
  5. nps browser0.95下载地址_飞兔跑腿app下载安装_飞兔跑腿软件最新版免费下载
  6. omnigraffle 画曲线_OmniGraffle使用的10个小技巧
  7. itext生成pdf paragraph 自动换行_reportlab高级制作多格式PDF和python的class和装饰器复习
  8. Perl文件内容对比
  9. var that = this 小坑记
  10. 台达DVP50MC11T与威纶触摸屏ModbusTCP通信
  11. 以pdf转cad为例,所有格式之间任意转换
  12. Allegro中Change铜皮至其他层
  13. [轻笔记]Juliav0.6配置jupyter
  14. “1448万,一条命”:在生命面前,金钱显得太刺眼
  15. 判断标题不为空(包含空格)
  16. c++哈希(哈希表开散列实现)
  17. java监听设计模式(java观察者设计模式)
  18. 大胆冲数学建模勘误表
  19. 怎么卸载脚手架_脚手架施工方案钢丝绳卸载
  20. 【机器学习】一文详解GBDT、Xgboost、Boosting与Bagging之间的区别

热门文章

  1. Python语言基础快速入门
  2. idea中js函数中使用EL表达式报错expression expected以及参数underfined的问题.md
  3. Java基础(7)字符串
  4. 淘宝接口 TopAPi(转)
  5. 计算机组成:中断向量的相关计算
  6. RRDtool简体中文教程
  7. Js 时间间隔计算(间隔天数)
  8. wms、wmts、wfs等地图服务区别
  9. 【Git】Git下载安装与使用(一)
  10. 深入理解QStateMachine与QEventLoop事件循环的联系与区别