Your SAX filter is using lots of updateable static variables. This means
it isn't thread-safe. In fact, it probably isn't even serially
re-usable: I don't think drvrCount is ever decremented.
Sorry, but I haven't the time, nor is this the right place, to teach you
about writing servlets.
Michael Kay
Software AG
home: Michael(_dot_)H(_dot_)Kay(_at_)ntlworld(_dot_)com
work: Michael(_dot_)Kay(_at_)softwareag(_dot_)com
-----Original Message-----
From: owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
[mailto:owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com] On Behalf Of
Bruce McDougald
Sent: 09 October 2002 22:30
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: Re: [xsl] SAX Transformation: Servlet returns blank
XSL template
There's a bug in your servlet code, but without seeing the code, I
can't begin to guess what it is.
Sorry, here is my code.
------------------------------------
public class pipeline extends HttpServlet{
public void doGet (HttpServletRequest req,
HttpServletResponse res)
throws ServletException,IOException
{
// Set content type for HTML.
res.setContentType("text/html; charset=UTF-8");
OutputStream os = res.getOutputStream();
try{
TransformerFactory tFactory = TransformerFactory.newInstance();
if (tFactory.getFeature(SAXSource.FEATURE) &&
tFactory.getFeature(SAXResult.FEATURE))
{
XMLReader reader = XMLReaderFactory.createXMLReader();
SAXTransformerFactory saxTFactory =
((SAXTransformerFactory) tFactory);
XMLFilter xmlFilter1 = new SAXParse();
xmlFilter1.setParent(reader);
XMLFilter xmlFilter2 =
saxTFactory.newXMLFilter(new
StreamSource("http://localhost/taymac.nsf/dynitmact.xsl"));
// xmlFilter1 uses the XMLReader as its reader.
xmlFilter2.setParent(xmlFilter1);
// xmlFilter2 outputs SAX events to the serializer.
Serializer serializer = SerializerFactory.getSerializer
(OutputProperties.getDefaultMethodProperties("xml"));
serializer.setOutputStream(os);
xmlFilter2.setContentHandler(serializer.asContentHandler());
xmlFilter2.parse(new
InputSource("http://localhost/cgi-bin/xmlbldr.pl"));
os.flush();
os.close();
}
}catch (Exception e){
e.printStackTrace();
}
}
}
//////////////////////////////////////////////////////////////
public class SAXParse extends XMLFilterImpl
{
String col;
String row;
String drvr;
String root;
String node;
static boolean rootFlag = false;
static boolean drvrFlag = false;
static boolean colFlag = false;
static boolean rowFlag = false;
static int drvrCount = 0;
static int colCount = 0;
static int rowCount = 0;
static int colStart = 85;
static int rowStart = 0;
static int colLimit = 13;
static int rowLimit = 25;
static int drvrLimit = 3;
////////////////////////////////////////////////////////////////////
// Event handlers.
////////////////////////////////////////////////////////////////////
public void startElement (String uri, String name,
String qName, Attributes atts)
throws SAXException
{
boolean printIt = false;
node = qName;
if ( qName.equals( "ITMACT" ) ) {
rootFlag = true;
rowFlag = false;
colFlag = false;
drvrFlag = false;
root = qName;
printIt = true;
}
if ( qName.equals( "DRIVER" ) ) {
drvrCount++;
rowCount=0;
rowFlag = false;
colFlag = false;
if (drvrCount == drvrLimit){
drvrFlag = true;
drvr = qName;
printIt = true;
}else{
drvrFlag = false;
}
}
if ( drvrFlag && qName.equals("DRVRKEY") ) {
printIt = true;
}
if (qName.equals("ROW") && drvrFlag){
rowCount++;
colCount = 0;
colFlag = false;
if ((rowCount >= rowStart) &&
(rowCount <= rowStart + rowLimit)){
rowFlag = true;
row = qName;
printIt = true;
}else{
rowFlag = false;
}
}
if ( qName.equals("ROWKEY") && rowFlag ) {
printIt = true;
}
if (qName.equals("COLUMN") && rowFlag){
colCount++;
if ((colCount >= colStart) &&
(colCount <= colStart + colLimit)){
colFlag = true;
col = qName;
printIt = true;
}else{
colFlag = false;
}
}
if (( (qName.equals("COLKEY")) ||
(qName.equals("CDATA1")) ||
(qName.equals("CDATA2")) ||
(qName.equals("CDATA3")) ) && colFlag ) {
printIt = true;
}
if (printIt){
super.startElement(uri,name,qName,atts);
printIt = false;
}
}
public void endElement (String uri, String name, String qName)
throws SAXException
{
boolean printIt = false;
if ( qName.equals("ITMACT") ) {
printIt = true;
}
if ( drvrFlag && ( (qName.equals("DRIVER"))||
(qName.equals("DRVRKEY")) )) {
printIt = true;
}
if ( ((qName.equals("ROW")) ||
(qName.equals("ROWKEY"))) && rowFlag ) {
printIt = true;
}
if (( (qName.equals("COLUMN")) ||
(qName.equals("COLKEY")) ||
(qName.equals("CDATA1")) ||
(qName.equals("CDATA2")) ||
(qName.equals("CDATA3"))) && colFlag ) {
printIt = true;
}
if (printIt){
super.endElement(uri,name,qName);
printIt = false;
}
}
public void characters (char[] ch, int start, int length)
throws SAXException
{
boolean wFlag = false;
if(drvrFlag && ( node.equals("DRIVER") ||
node.equals("DRVRKEY"))) { wFlag = true;};
if(rowFlag && ( node.equals("ROW") ||
node.equals("ROWKEY"))) {wFlag = true;};
if(colFlag){ wFlag=true; }
if(wFlag) { super.characters (ch, start, length); }
}
}
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list