Yuhong Qian

Greenhorn
+ Follow
since Jan 18, 2010
Merit badge: grant badges
For More
Cows and Likes
Cows
Total received
In last 30 days
0
Forums and Threads

Recent posts by Yuhong Qian

Hi all,

I am developing a Client/Server java application, where CSMessage is sent through socket.
CSMessage has some data like String type and HashMap<String, String> type.

the Client send message:

private ObjectInputStream in;
private ObjectOutputStream out;

out = new ObjectOutputStream(socket.getOutputStream());
in = new ObjectInputStream(socket.getInputStream());

try
{
out.writeObject(message);
out.flush();

} catch (IOException e)
{
//...
}


and the following is the code snippet of the Server side:


in = new ObjectInputStream(socket.getInputStream());
out = new ObjectOutputStream(socket.getOutputStream());

CSMessage fromClient = null;

try
{
fromClient = (CSMessage) in.readObject();

} catch (ClassNotFoundException e)
{
//.....
}
catch (IOException e)
{
//.... }
}

this code works fine for more than a year untill recently exception occurred intermittently:

Exception in thread "Thread-72" java.lang.IllegalStateException: unread block data
at java.io.ObjectInputStream$BlockDataInputStream.setBlockDataMode(ObjectInputStream.java:2393)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1378)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1963)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1887)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1770)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1346)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:368)
at com.ictbox.acc.toolbarserver.AgentbarServerRequestHandler.handleRequest(AgentbarServerRequestHandler.java:1430)
at com.ictbox.acc.toolbarserver.RequestThread.run(RequestThread.java:189)

sometimes we got another alternative exception :

Exception in thread "Thread-58" java.lang.ClassCastException: cannot assign instance of com.ictbox.acc.utils.msg.CSMessage to field com.ictbox.acc.utils.msg.CSMessage.command of type java.lang.String in instance of com.ictbox.acc.utils.msg.CSMessage
at java.io.ObjectStreamClass$FieldReflector.setObjFieldValues(ObjectStreamClass.java:2056)
at java.io.ObjectStreamClass.setObjFieldValues(ObjectStreamClass.java:1229)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1969)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1887)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1770)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1346)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:368)
at com.ictbox.acc.toolbarserver.AgentbarServerRequestHandler.handleRequest(AgentbarServerRequestHandler.java:1311)
at com.ictbox.acc.toolbarserver.RequestThread.run(RequestThread.java:189)

or

Exception in thread "Thread-26" java.lang.ClassCastException: java.lang.String cannot be cast to java.io.ObjectStreamClass
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1507)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1749)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1346)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1963)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1887)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1770)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1346)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:368)
at com.ictbox.acc.toolbarserver.AgentbarServerRequestHandler.handleRequest(AgentbarServerRequestHandler.java:1326)
at com.ictbox.acc.toolbarserver.RequestThread.run(RequestThread.java:189)

When this happen, the only way to make the system to work is to kill the process and restart it, that's bad!

How to solve it? Any ideas are highly apprieciated.

yhqian99

Hi all,

I am using Embedded Tomcat7, servlet and jsp work very well separately, for example, http://localhost:8091/index.jsp or http://localhost:8091/hello work fine.

but when I use servlet to forward request to JSP, it can not get dispather for the jsp and throws java.lang.NullPointerException.

here is my code snippets:

tomcat.setBaseDir(".");
tomcat.setPort(port); //defaults to 8080 if not set.
File docBase = new File(".");
Context ctxt = tomcat.addContext("/", docBase.getAbsolutePath());
/**
the home page
* http://192.168.1.32:8091/
*/
try
{
/*
jsp files are located at /webapps/manage
*/
tomcat.addWebapp("", docBase.getAbsolutePath()+"/webapps/manage");
}
catch (ServletException e)
{
e.printStackTrace();
}
/**
* HelloServlet prints a message
* http://192.168.1.32:8091/hello
*/
Tomcat.addServlet(ctxt, "hello", new HelloServlet("Hello World!"));
ctxt.addServletMapping("/hello", "hello");

/**
* TestingServlet forward request to index.jsp
* http://192.168.1.32:8091/test
*/
TestingServlet testingServlet = new TestingServlet();
Tomcat.addServlet(ctxt, "test", testingServlet);
ctxt.addServletMapping("/test/*", "test");


the TestingServlet :

String forward = "/index.jsp";
RequestDispatcher dispatcher = this.getServletContext().getRequestDispatcher(forward);
dispatcher.forward(request, response);

the result throws java.lang.NullPointerException at dispatcher.forward(request, response);

I checked and found the dispatcher is null, it seems that the JSP is not at the same context as Servlet.

How to solve this problem?


yhqian




12 years ago
hi,

I am using HTTPClient to access the url ( See the above) , I have been
facing an Intermittent problem with the following exception. Is it a problem with the HTTPClient or a problem with the Embbedded Tomcat?

Fatal transport error: Stream closed
java.io.IOException: Stream closed
at java.io.BufferedInputStream.getBufIfOpen(BufferedInputStream.java:162)
at java.io.BufferedInputStream.read(BufferedInputStream.java:258)
at org.apache.commons.httpclient.HttpParser.readRawLine(HttpParser.java:78)
at org.apache.commons.httpclient.HttpParser.readLine(HttpParser.java:106)
at org.apache.commons.httpclient.HttpConnection.readLine(HttpConnection.java:1116)
at org.apache.commons.httpclient.HttpMethodBase.readStatusLine(HttpMethodBase.java:1973)
at org.apache.commons.httpclient.HttpMethodBase.readResponse(HttpMethodBase.java:1735)
at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:1098)
at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:398)
at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171)
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397)
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:323)
at ictbox.agi.HttpClientOp.getAgentServlet(HttpClientOp.java:97)
at AutoDialerAgi.service(AutoDialerAgi.java:104)
at org.asteriskjava.fastagi.internal.AgiConnectionHandler.runScript(AgiConnectionHandler.java:144)
at org.asteriskjava.fastagi.internal.AgiConnectionHandler.run(AgiConnectionHandler.java:116)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:636)

Lucy
12 years ago
Hi all,

I am using Embedded Tomcat 7 in my java application. The request url to Embedded Tomcat is http://localhost:8091/GetAgentServlet?groupId=1. It works fine if the request is submitted one by one, but excpetion occurred when multiple requests (above 4, for example) are submited simultaneously.

How to solve this problem? Is there any way to configure the concurrent thread number or something?
Any help are highly appreciated.

Fatal transport error: Stream closed
java.io.IOException: Stream closed
at java.io.BufferedInputStream.getBufIfOpen(BufferedInputStream.java:162)
at java.io.BufferedInputStream.read(BufferedInputStream.java:258)
at org.apache.commons.httpclient.HttpParser.readRawLine(HttpParser.java:78)
at org.apache.commons.httpclient.HttpParser.readLine(HttpParser.java:106)
at org.apache.commons.httpclient.HttpConnection.readLine(HttpConnection.java:1116)
at org.apache.commons.httpclient.HttpMethodBase.readStatusLine(HttpMethodBase.java:1973)
at org.apache.commons.httpclient.HttpMethodBase.readResponse(HttpMethodBase.java:1735)
at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:1098)
at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:398)
at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171)
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397)
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:323)
at ictbox.agi.HttpClientOp.getAgentServlet(HttpClientOp.java:97)
at AutoDialerAgi.service(AutoDialerAgi.java:104)
at org.asteriskjava.fastagi.internal.AgiConnectionHandler.runScript(AgiConnectionHandler.java:144)
at org.asteriskjava.fastagi.internal.AgiConnectionHandler.run(AgiConnectionHandler.java:116)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:636)



Lucy
12 years ago
Hi all,

I am transfering my web application from servlet to struts1.2. In one of my servlet init() method I created a thread to do some work on the background, and I need to keep the same thing in struts appliaction. How can I do this? does struts provide a init() method like servlet does.


Thanks

Yhqian99


15 years ago