Subject: RE: SAX Transformation: Servlet returns blank XSL template
From: "Michael Kay" <michael.h.kay@xxxxxxxxxxxx>
Date: Thu, 10 Oct 2002 09:16:46 +0100
|
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.H.Kay@xxxxxxxxxxxx
work: Michael.Kay@xxxxxxxxxxxxxx
> -----Original Message-----
> From: owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> [mailto:owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx] On Behalf Of
> Bruce McDougald
> Sent: 09 October 2002 22:30
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: Re: 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
|