如何使用SOAP Web服务通过Java公开R函数?我尝试过使用R-Serve从Java调用R函数,它工作正常。但是我无法使用R代码调用R函数的Java代码创建WSDL。我面临这个错误,下面是我的Java代码。我正在使用Eclipse插件创建WSDL。
Jun 24, 2016 5:11:39 PM org.apache.axis.transport.http.AxisServletlogException
INFO: Exception:
java.lang.NoClassDefFoundError: org/rosuda/REngine/Rserve/RserveException
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at org.apache.axis.utils.ClassUtils$2.run(ClassUtils.java:177)
at java.security.AccessController.doPrivileged(Native Method)
at org.apache.axis.utils.ClassUtils.loadClass(ClassUtils.java:160)
at org.apache.axis.utils.ClassUtils.forName(ClassUtils.java:142)
at org.apache.axis.utils.cache.ClassCache.lookup(ClassCache.java:85)
at org.apache.axis.providers.java.JavaProvider.getServiceClass(JavaProvider.java:428)
package com.analytics;
import org.rosuda.REngine.REXPMismatchException;
import org.rosuda.REngine.REngineException;
import org.rosuda.REngine.Rserve.RConnection;
import org.rosuda.REngine.Rserve.RserveException;
这是我的Java代码,用于使用Eclipse插件生成WSDL。 公共类Temp实现添加{
@Override
public int add(int x, int y) {
RConnection connection = null;
int sum = 0;
try {
/* Create a connection to Rserve instance running on default port
* 6311
*/
connection = new RConnection();
/* Note four slashes (\\\\) in the path */
connection.eval("source('D:\\\\MyScript.R')"); //attaching R script
sum=connection.parseAndEval("myadd("+x+","+y+")").asInteger(); // call to R function
} catch (RserveException e) {
e.printStackTrace();
} catch (REXPMismatchException e) {
e.printStackTrace();
} catch (REngineException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return sum;
}
}
这是我的R代码,它是从上面给定的Java代码调用的 MyScript.R
Myadd<-function (x, y) {
sum=x+y
return (sum)
}
答案 0 :(得分:0)
我们需要在libs文件夹中包含Rserve.jar和Rengine.jar。缺少的类存在于jar中。这些jar在路径\ library \ Rserve \ client \ java。
的R包中可用