[SoapRMI] xpp potential cleanup/reset problem
CHEN,SHIH-CHANG (HP-NewJersey,ex2)
shih-chang_chen_at_hp.com
Mon, 29 Jul 2002 07:50:05 -0700
This message is in MIME format. Since your mail reader does not understand
this format, some or all of this message may not be legible.
------_=_NextPart_000_01C2370F.3A05A200
Content-Type: text/plain;
charset="iso-8859-2"
> what is the parser state (getEventType()) just before last next()?
0 (start_document): nost
1, 2, 3 or 4: sometime ?
> did you make sure that only one thread at any time is accessing
> parser instance. the easiest approach is to use pool of parser
> instances that are reused to handle requests (typically each request
> gets its own parser instance and not shared with other thread).
I also suspect my ide (eclipse) or servlet engine(Tomcat404) has
threading problems. But a servlet instance is supposed to run in
one thread. And Servlent container will take care of servlet instance
pooling. In my case, a parser instance is cached in a servlet instance.
I will using pooling if I cannot solve this problem. Attachment
is my servlet for server-side. In client-side, I use WebLoad5 to simulate
concurrent
10 http clients.(http://www.radview.com/products/WebLOAD.asp)
thansk,
-chen
------_=_NextPart_000_01C2370F.3A05A200
Content-Type: application/octet-stream;
name="EchoServlet.java"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment;
filename="EchoServlet.java"
import javax.servlet.http.HttpServlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.Writer;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;
/**
* @author schen
*
* To change this generated comment edit the template variable =
"typecomment":
* Window>Preferences>Java>Templates.
* To enable and disable the creation of type comments go to
* Window>Preferences>Java>Code Generation.
*/
public class EchoServlet extends HttpServlet {
=09
private XmlPullParserFactory pullfactory;
//reset does not work correctly
private XmlPullParser xpp;
public void init() throws ServletException {
try {
pullfactory =3D XmlPullParserFactory.newInstance();
=
pullfactory.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, true);
xpp =3D pullfactory.newPullParser();
} catch (XmlPullParserException e) {
e.printStackTrace( System.out );
throw new ServletException( e.getMessage() );
}
}
=09
private void pullEcho( InputStream in, Writer writer )
throws IOException,XmlPullParserException=20
{ =20
//XmlPullParser xpp =3D pullfactory.newPullParser(); =20
xpp.setInput ( new InputStreamReader ( in ) ); =20
int eventType =3D xpp.getEventType();
do {
if(eventType =3D=3D xpp.START_DOCUMENT) {
writer.write( "<?xml version=3D'1.0' =
encoding=3D'UTF-8'?>" );
} else if(eventType =3D=3D xpp.END_DOCUMENT) {
writer.flush();
//break;
} else if(eventType =3D=3D xpp.START_TAG) {
writer.write( "<" + xpp.getName() );
for (int i =3D 0; i < xpp.getAttributeCount(); i++) {
writer.write( " " );
writer.write(=20
xpp.getAttributeName( i ) + "=3D\"" +=20
xpp.getAttributeValue( i ) + "\"");
}
writer.write( ">" );
} else if(eventType =3D=3D xpp.END_TAG) {
writer.write( "<" + xpp.getName() + ">" );
} else if(eventType =3D=3D xpp.TEXT) {
int holderForStartAndLength[] =3D new int[2];
char ch[] =3D xpp.getTextCharacters(holderForStartAndLength);
int start =3D holderForStartAndLength[0];
int length =3D holderForStartAndLength[1];
for (int i =3D start; i < start + length; i++) {
switch (ch[i]) {
case '\\':
writer.write( "\\\\");
break;
case '"':
writer.write( "\\\"");
break;
case '\n':
writer.write( "\\n");
break;
case '\r':
writer.write( "\\r");
break;
case '\t':
writer.write( "\\t");
break;
default:
writer.write( ch[i]);
break;
}
}
}
writer.flush();
try {
eventType =3D xpp.next();
} catch (XmlPullParserException e) {
System.err.println( "---- eventType: " + eventType + " " + =
e.getMessage());
//e.printStackTrace( System.out );
throw e;
}
} while (eventType !=3D xpp.END_DOCUMENT);
}
=09
public void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException
{
InputStream in =3D req.getInputStream();
try {
pullEcho( in, res.getWriter() );
} catch (XmlPullParserException e) {
//e.printStackTrace( System.out );
throw new IOException( e.getMessage() );
}//
=09
}
/**
* @see javax.servlet.http.HttpServlet#doGet(HttpServletRequest, =
HttpServletResponse)
*/
protected void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException=20
{
res.getWriter().write( "This is a EchoServlet" );
}
}
------_=_NextPart_000_01C2370F.3A05A200--