0

I have a Java application that parses an XML stream from a URL, selects the data that I want, and assembles it in a JSON object. This runs perfectly fine as a Java application, but when I moved it onto a Java servlet, using Tomcat, it will hang at the moment it encounters the declaration of a new JSONObject.JSONObject temp = new JSONObject();If I remove any mention of all JSON objects it will run to completion. I have spent a long time trying to find an answer with no luck. Here is the servlet:

public class Servlet extends javax.servlet.http.HttpServlet {

static ArrayList<String> host_list = new ArrayList<>();
String Host_url = "Sample url";

protected void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {

    doGet(request, response);

}

public void init() throws ServletException
{
    // This function works fine, but logic removed for space
    host_list = ReadFile.get_host_names(file);

}

public void doGet(HttpServletRequest request,
                  HttpServletResponse response)
        throws ServletException, IOException
{
    // At this point this should print info out to the console.
    Host_Gather.gather(Host_url, host_list);

}

public void destroy()
{

}

}

Here is part of the Host_gather class:

//By this point the XML has been parsed into various hashtables

 if(clear_flag == true){
        ArrayList<JSONObject> Auth_list = new ArrayList<>();

        Enumeration<String> e2 = Individual_Auth_table.keys();
        while (e2.hasMoreElements()) {
            System.out.println("Will print this");
            JSONObject t = new JSONObject();  //Hangs here
            String key = e2.nextElement();
            t.put("name", key);
            t.put("color", Individual_Auth_table.get(key));
            System.out.println("Never prints this");
            Auth_list.add(t);

        }
        System.out.println("List:" + Auth_list); //Never prints this

Tomcat Localhost log:

    26-Aug-2015 10:37:36.855 SEVERE [http-apr-8080-exec-9] org.apache.catalina.core.ApplicationContext.log StandardWrapper.Throwable
 java.lang.NoClassDefFoundError: org/json/simple/JSONObject
    at com.first.Host_Gather.gather(Host_Gather.java:299)
    at com.first.Servlet.init(Servlet.java:80)
    at javax.servlet.GenericServlet.init(GenericServlet.java:158)
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1231)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1144)
    at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:817)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:135)
    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:142)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:617)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:668)
    at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2503)
    at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2492)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.ClassNotFoundException: org.json.simple.JSONObject
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1313)
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1164)
    ... 22 more

26-Aug-2015 10:37:36.856 SEVERE [http-apr-8080-exec-9] org.apache.catalina.core.StandardWrapperValve.invoke Allocate exception for servlet Servlet
 java.lang.ClassNotFoundException: org.json.simple.JSONObject
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1313)
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1164)
    at com.first.Host_Gather.gather(Host_Gather.java:299)
    at com.first.Servlet.init(Servlet.java:80)
    at javax.servlet.GenericServlet.init(GenericServlet.java:158)
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1231)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1144)
    at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:817)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:135)
    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:142)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:617)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:668)
    at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2503)
    at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2492)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:745)
Justin_B
  • 17
  • 1
  • 4
  • 1
    Please post piece of code and tell which library you're using for JSON processing – Alex Salauyou Aug 26 '15 at 16:57
  • Does the code compile ? – Olli Zi Aug 26 '15 at 17:23
  • @Olli Zi: Yes the code compiles and runs until it encounters the JSON. If I remove the JSON, it continues past that point and finishes correctly. – Justin_B Aug 26 '15 at 17:29
  • Does your servlet project references the json-API correctly? Take maybe a look in the log directory of your tomcat installation /log. – Olli Zi Aug 26 '15 at 17:31
  • @Olli Zi: I looked at the log,posted above, and it appears it is not referencing json correctly. I have the json-simple-1.1.jar in my project, but that must not work for a servlet? – Justin_B Aug 26 '15 at 17:43
  • Is your json*.jar file is located in the WAR-file? Maybe in a lib directory. Take a look:) Maybe this helps: http://stackoverflow.com/questions/6496560/where-should-i-put-external-jar-files-when-developing-a-web-app – Olli Zi Aug 26 '15 at 17:47
  • 1
    @Olli Zi: Yes, this appears to have been the solution. Thanks for all the help! – Justin_B Aug 26 '15 at 18:10

1 Answers1

0

Servlets are by default compiled at runtime. I suspect that yours is failing to compile on the server. It's likely that the JSONObject.java and its dependencies are not compiled and in your class path on the Tomcat server.

David S.
  • 6,567
  • 1
  • 25
  • 45