2015-10-06 4 views
1

Пожалуйста, мне нужна ваша помощь.Ошибка JSP/R: java.lang.NoClassDefFoundError: org/rosuda/JRI/Rengine

У меня есть этот класс Java

package com.stephen.crawler; 

import org.rosuda.JRI.Rengine; 

public class JRI_Interface { 

    Rengine r; 
    String str_globalPath="/home/pavel/workspace/opendata/r_script/"; 

public JRI_Interface (String str_fuente) { 
    r = new Rengine(new String[] { "--no-save" }, false, null); 
    r.eval("source(\""+str_globalPath+str_fuente+"\")"); 
} 

public void exec_RProcedure(String str_procedure) { 
    r.eval(str_procedure); 
} 

public String[] exec_RFunction (String str_procedure) { 

    return r.eval(str_procedure).asStringArray(); 
} 

} 

И это отлично работает, если я исполню:

package com.stephen.crawler; 

public class JRI_Start_1 { 
    public static void main(String[] args) 
    { 


     JRI_Interface j = new JRI_Interface("staticdata.r"); 
     j.exec_RProcedure("loadParametersOD()"); 
     String obj[]=j.exec_RFunction("getLoadedParametersOD()"); 
     System.out.println (obj.length); 

    } 
} 

Однако, когда я выполняю с помощью JSP с Tomcat:

<%@ page language="java" contentType="text/html; charset=UTF-8" 
    pageEncoding="UTF-8" 
%> 
<%@ page import="com.stephen.crawler.*" %> 
<%@ page import="org.rosuda.JRI.*" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>My Title</title> 
</head> 
<% 
JRI_Interface j = new JRI_Interface("staticdata.r"); 
j.exec_RProcedure("loadParametersOD()"); 
String obj[]=j.exec_RFunction("getLoadedParametersOD()"); 
%> 


<body> 

</body> 
</html> 

Я получаю следующее сообщение:

> org.apache.jasper.JasperException: Ha sucedido una excepción al 
> procesar la página JSP /Inicio.jsp en línea 14 
> 
> 11: <title>My Title</title> 
> 12: </head> 
> 13: <% 
> 14: JRI_Interface j = new JRI_Interface("staticdata.r"); 
> 15: j.exec_RProcedure("loadParametersOD()"); 
> 16: String obj[]=j.exec_RFunction("getLoadedParametersOD()"); 
> 17: %> 
> 
> Stacktrace: 
> org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:574) 
> org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:461) 
> org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396) 
> org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340) 
> javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
> org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
> causa raíz 
> 
> javax.servlet.ServletException: java.lang.NoClassDefFoundError: 
> org/rosuda/JRI/Rengine 
> org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:909) 
> org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:838) 
> org.apache.jsp.Inicio_jsp._jspService(Inicio_jsp.java:146) 
> org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
> javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
> org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:438) 
> org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396) 
> org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340) 
> javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
> org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
> causa raíz 
> 
> java.lang.NoClassDefFoundError: org/rosuda/JRI/Rengine 
> com.stephen.crawler.JRI_Interface.<init>(JRI_Interface.java:12) 
> org.apache.jsp.Inicio_jsp._jspService(Inicio_jsp.java:124) 
> org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
> javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
> org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:438) 
> org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396) 
> org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340) 
> javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
> org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
> causa raíz 
> 
> java.lang.ClassNotFoundException: org.rosuda.JRI.Rengine 
> org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1333) 
> org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1167) 
> com.stephen.crawler.JRI_Interface.<init>(JRI_Interface.java:12) 
> org.apache.jsp.Inicio_jsp._jspService(Inicio_jsp.java:124) 
> org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
> javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
> org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:438) 
> org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396) 
> org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340) 
> javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
> org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 

Пропустить что-нибудь ?. Кажется, я все сконфигурировал ....

Большое спасибо.

ответ

0

Для Tomcat 6, все распакованные классы и ресурсы в /WEB-INF/классы каталог ваших веб-приложений, плюс классы и ресурсы в JAR-файлов под /WEB-INF/Lib каталог вашего веб приложения, становятся видимыми для этого веб-приложения, но не для других.

Среда сервера инициализации в следующем порядке:

  • Bootstrap классы вашей виртуальной машины Java
  • Системные классы загрузчика классов (фи, '$ JAVA_HOME/JRE/Библиотека/вн')
  • /WEB-INF/классы вашего веб-приложения
  • /WEB-INF/lib/*.jar вашего веб-приложения
  • Common кл Классы задница погрузчик (если вы не имеете другого выбора) (свойство 'common.loader' в $ CATALINA_BASE/CONF/catalina.properties)

сервлет/webappX/JSP, вероятно, нуждается в класс (ы) или jar (s) в жирном каталоге (каталогах). Ваш сервер выглядит правильно настроенным для Tomcat/jsp, так как он показывает ошибки в вашем коде/config. В вашем коде, который правильно запускает REngine, разрешено использовать командную строку или env CLASSPATH, но это не так просто от Tomcat или другого веб-сервера. Надеюсь, это всего лишь вопрос копирования контейнера REngine, хотя вам, возможно, придется настроить его конфигурацию.

GL

+0

Спасибо. Я сделал все, что вы сказали. Но ничего не происходит. На самом деле каталог WEB-INF/classes не существует. Я должен был создать его. Я скопировал свой класс (JRI_Interface.class с учетом всего пути пакета: com.stephen.crawler) в этот новый каталог и мой .jar (JRIEngine.jar) на WEB-INF/lib, однако в дереве Eclipse (Project Explorer) те каталоги пусты. Ничего не происходит = ( – Lev

Смежные вопросы