R,Java和SOAP Web服务

时间:2016-06-26 12:41:20

标签: java r web-services soap wsdl

如何使用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)
}

1 个答案:

答案 0 :(得分:0)

我们需要在libs文件夹中包含Rserve.jar和Rengine.jar。缺少的类存在于jar中。这些jar在路径\ library \ Rserve \ client \ java。

的R包中可用