java.lang.Исключение ClassNotFoundException: com.eclipsesource.json.JSONObject

#java #jsp #exception #servlets #marketo

#java #jsp #исключение #сервлеты #маркетолог

Вопрос:

Я пытался вызвать класс Java из сервлета, который печатает данные на странице JSP. Класс Java возвращает ответ в формате JSON, и я могу распечатать его в консоли. Я вызвал класс Java в servlet и запустил сервлет через страницу JSP.

Могу ли я напрямую напечатать ответ JSON на странице JSP с помощью Servlet? Если это так, я сталкиваюсь со следующей ошибкой.

PS: Я перепробовал все доступные способы устранения этой ошибки, но у меня ничего не сработало.

 SEVERE: Servlet.service() for servlet [com.serves.getData] in context with path [/Demo] threw exception [Servlet execution threw an exception] with root cause
java.lang.ClassNotFoundException: com.eclipsesource.json.JsonObject
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1308)
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1142)
    at com.tadigital.marketo.servlet.MultipleEmails.getToken(MultipleEmails.java:116)
    at com.tadigital.marketo.servlet.MultipleEmails.getData(MultipleEmails.java:74)
    at com.tadigital.marketo.serves.getData.doGet(getData.java:44)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:522)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1095)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:672)
    at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2500)
    at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2489)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Unknown Source) 
  

Вот мой код

Класс JAVA

 import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.NoSuchElementException;
import java.util.Scanner;

import javax.net.ssl.HttpsURLConnection;

import com.eclipsesource.json.JsonObject;

//the Java sample code on dev.marketo.com uses the minimal-json package
//minimal-json provides easy and fast representations of JSON
//for more information check out https://github.com/ralfstx/minimal-json

public class MultipleEmails {
    public String marketoInstance =  ;//Replace this with the host from Admin Web Services
    public String marketoIdURL = marketoInstance   "/identity"; 
    public String clientId = "";    //Obtain from your Custom Service in Admin>Launchpoint
    public String clientSecret = "";    //Obtain from your Custom Service in Admin>Launchpoint
    public String idEndpoint = marketoIdURL   "/oauth/token?grant_type=client_credentialsamp;client_id="   clientId   "amp;client_secret="   clientSecret;
    public String status; //status filter
    public String offset; //offset returned from preveious 
    public Integer maxreturn; //max 100, default 20
    public JsonObject folder; //JSON of parent folder with two members, ID and type(Folder or Program)
    
    public static void main(String[] args){
        MultipleEmails emails = new MultipleEmails();
        emails.maxreturn = 200;
        emails.folder = new JsonObject()
                            .add("id", 1260)
                            .add("type", "Folder");
        String result = emails.getData();
        System.out.println("Here you go...");
        System.out.println(result);
                }
    
    

    
    public String getData() {
        String data = null;
        try {
            //Assemble the URL
            StringBuilder endpoint = new StringBuilder(marketoInstance   "/rest/asset/v1/emails.json?access_token="   getToken());
            //Append Optional Parameters
            System.out.println(endpoint);
            if (offset != null){
                endpoint.append("amp;offset="   offset);
            }
            if (maxreturn != null){
                endpoint.append("amp;maxreturn="   maxreturn);
            }
            if(status != null){
                endpoint.append("amp;status="   status);
            }
            URL url = new URL(endpoint.toString());
            HttpsURLConnection urlConn = (HttpsURLConnection) url.openConnection();
            urlConn.setRequestMethod("GET");
            urlConn.setRequestProperty("accept", "text/json");
            int responseCode = urlConn.getResponseCode();
            if (responseCode == 200) {
                InputStream inStream = urlConn.getInputStream();
                data = convertStreamToString(inStream);
                
            } else {
                data = "Status:"   responseCode;
            }
        } catch (MalformedURLException e) {
            System.out.println("URL not valid.");
        } catch (IOException e) {
            System.out.println("IOException: "   e.getMessage());
            e.printStackTrace();
        }
        return data;
    }   public String getToken(){
        String token = null;
        try {
            URL url = new URL(idEndpoint);
            HttpsURLConnection urlConn = (HttpsURLConnection) url.openConnection();
            urlConn.setRequestMethod("GET");
            urlConn.setRequestProperty("accept", "application/json");
            int responseCode = urlConn.getResponseCode();
            if (responseCode == 200) {
                InputStream inStream = urlConn.getInputStream();
                Reader reader = new InputStreamReader(inStream);
                JsonObject jsonObject = JsonObject.readFrom(reader);
                token = jsonObject.get("access_token").asString();
            }else {
                throw new IOException("Status: "   responseCode);
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }catch (IOException e) {
            e.printStackTrace();
        }
        return token;
    }
    private String convertStreamToString(InputStream inputStream) {

        try {
            return new Scanner(inputStream).useDelimiter("\A").next();
        } catch (NoSuchElementException e) {
            return "";
        }
    }     
}
  

Этот класс Java возвращает данные JSON в качестве ответа. Я вызываю этот класс в сервлете следующим образом.

 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
        MultipleEmails me = new MultipleEmails();
        String s = me.getData();
        
    HttpSession session = request.getSession();

        session.setAttribute("GETEMAILS", "Get Emails");
    session.setAttribute("DATA", s);

        
        RequestDispatcher rd = request.getRequestDispatcher("index.jsp");
        try {
            rd.forward(request, response);
        } catch (Exception e) {
            System.out.println(e);
        }
            
  

И на странице JSP запрос status2Global = (String).getAttribute(«ДАННЫЕ»); используя это, я печатаю на странице. Но я сталкиваюсь с вышеупомянутым исключением.

Комментарии:

1. Вы использовали неправильный класс, com.eclipsesource.json.JsonObject . Опубликуйте свой сервлет и JSP-код.

2. Отредактировал мой вопрос с помощью кода @ArvindKumarAvinash

3. вы используете библиотеку minimal-json, поэтому она должна передаваться через classpass при запуске вашей программы

4. не могли бы вы, пожалуйста, пояснить @alexander

5. Предположим, вы развертываете свое приложение в каком-либо контейнере сервлетов или сервере приложений. После развертывания в каталоге вашего приложения должен быть подкаталог WEB-INF / lib. В этом подкаталоге должен быть минимальный json jar-файл, поскольку этот подкаталог находится в пути к классу вашего приложения.