I've included below some code for a servlet doX(req,res) method.
What happens when I run the Servlet is the processRequest method loops
infinitely. I think what's causing this is a redirection back to the
servlet causing it to get run again. I have no idea why this would
happen though. The only thing I can think of that would cause a
redirection would be an exception causing the servlet container to
redirect to the error page for that exception, but I'm catching
Throwable so that doesn't seem to make sense.
I'm using Tomcat 3.3, sun jdk 1.3.1, Win2K, xalan 2.1 with the
accompanying xerces.
This is on my critical path so I'd really appreciate any help asap.
Thanks in advance to everyone.
protected void processRequest( HttpServletRequest request,
HttpServletResponse response )
throws ServletException, java.io.IOException
{
HashMap map = new HashMap();
Results results = null;
String key = null;
String val = null;
String dnt = request.getParameter( "dnt" );
if( null == dnt )
{
dnt = "default";
}
PrintWriter out = response.getWriter();
Enumeration enum = request.getParameterNames();
while( enum.hasMoreElements() )
{
key = ( String ) enum.nextElement();
val = request.getParameter( key );
map.put( key, val );
}
SqlHelper helper;
String xmlBody;
//helper = m_sqlManager.executeQuery( dnt, map );
//results = ResultSetToResultsetConverter.convert( helper );
//xmlBody = ResultsToXmlConverter.convert( results );
StringBuffer xmlHeader = new StringBuffer( "" );
File root = new File( getServletContext().getRealPath( "/xml" )
);
File file = new File( root, dnt + ".xml" );
//FileInputStream finStream = new FileInputStream( file );
FileReader reader = new FileReader( file );
int tchar;
while( -1 < ( tchar = reader.read() ) )
{
xmlHeader.append( ( char ) tchar );
}
//char[] xmlbytes = ;
System.out.println( "[ xmlfile ]" + file.getCanonicalPath() );
/*
xmlHeader.append( "<?xml version=\"1.0\" encoding=\"UTF-8\"
?>\n" );
xmlHeader.append( "<!DOCTYPE resultset PUBLIC \" " );
xmlHeader.append( "-//AZURN/Deloitte And Touche - Vantive
Project - DTD Version 1.0//EN\" " );
xmlHeader.append( "\"http://localhost:80/dtds/dntScreen.dtd\">"
);
xmlHeader.append( "<screen name=\"" + dnt + "\" " );
xmlHeader.append( "sid=\"" + request.getSession().getId() + "\"
" );
Object dntUser;
dntUser = request.getParameter( "dntUser" );
if( null != dntUser )
{
response.setHeader( "dntUser", request.getParameter(
"dntUser" ) );
}
else
{
dntUser = request.getAttribute( "dntUser" );
if( null != dntUser )
{
response.setHeader( "dntUser", request.getAttribute(
"dntUser" ).toString() );
}
else
{
dntUser = "Default User";
response.setHeader( "dntUser", dntUser.toString() );
}
}
System.out.println( "[ dntUser ] " + dntUser );
xmlHeader.append( "dtUser=\"" + dntUser + "\">" );
xmlHeader.append( xmlBody );
xmlHeader.append( "</screen>" );
*/
String theXmlString = xmlHeader.toString();
char[] xmlbytes = theXmlString.toCharArray();
CharArrayReader xmlStream = new CharArrayReader( xmlbytes );
Source xmlSource = new StreamSource( xmlStream );
String ua;
ua = request.getHeader( "User-Agent" );
if( ( ua.indexOf( "Mozilla" ) > -1 ) // Netscape & IE
|| ( ua.indexOf( "ICE" ) > -1 ) // ICE browser
|| ( ua.indexOf( "Elaine" ) > -1 ) ) // Palm VII Clipping
{
response.setContentType( "text/html" );
}
else
{
response.setContentType( "text/vnd.wap.wml" );
}
Source xslSource;
StringBuffer xsl = new StringBuffer( "" );
File xslroot = new File( getServletContext().getRealPath(
"/xslt" ) );
File xslfile = new File( xslroot, dnt + ".xslt" );
FileReader xslreader = new FileReader( xslfile );
int xchar;
while( -1 < ( xchar = xslreader.read() ) )
{
xsl.append( ( char ) xchar );
}
//String url = getServletContext().getRealPath( "/" );
//url = url + "xslt/" + dnt + ".xslt" ;
//xslSource = new StreamSource( new File( url ) );
char[] xbytes = xsl.toString().toCharArray();
CharArrayReader creader = new CharArrayReader( xbytes );
xslSource = new StreamSource( creader );
System.out.println( "[ xsltfile ]" + xslfile.getCanonicalPath()
);
try
{
System.out.println( "[ running transform ]" );
TransformerFactory factory =
TransformerFactory.newInstance();
Transformer transformer = factory.newTransformer( xslSource
);
transformer.transform( xmlSource, new StreamResult( out ) );
}
catch( TransformerConfigurationException tce )
{
tce.printStackTrace();
}
catch( TransformerException te )
{
te.printStackTrace();
}
catch( Throwable t )
{
t.printStackTrace();
}
finally
{
try
{
xmlStream.close();
creader.close();
}
catch( Exception ioe )
{
ioe.printStackTrace();
}
}
out.close();
} // processRequest(HttpServletRequest,HttpServletResponse)
Laran Coates
_________________________________________________________
Do You Yahoo!?
Get your free @yahoo.com address at http://mail.yahoo.com