如何使用SOAP web服务通过Java公开R函数?我尝试过使用R-Serve从Java调用R函数,它工作得很好。但是我无法从Java代码创建WSDL,因为Java代码使用R-script.I调用R函数。我遇到这个错误,下面是我的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实现了Add {
@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)
}发布于 2016-12-05 19:01:10
我们需要在libs文件夹中包含Rserve.jar和Rengine.jar。缺少的类存在于jar中。jars位于路径\library\Rserve\client\java的R包中。
https://stackoverflow.com/questions/38038597
复制相似问题