DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT <http://issues.apache.org/bugzilla/show_bug.cgi?id=27620>. ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND INSERTED IN THE BUG DATABASE.
http://issues.apache.org/bugzilla/show_bug.cgi?id=27620 xalan:indent-amount does not work in Translets Summary: xalan:indent-amount does not work in Translets Product: Xerces2-J Version: 2.6.0 Platform: All OS/Version: Other Status: NEW Severity: Minor Priority: Other Component: Serialization AssignedTo: [EMAIL PROTECTED] ReportedBy: [EMAIL PROTECTED] I have been using Xalan 2.4.1 for several years and have been planning to upgrade to 2.5.1, 2.5.2 or 2.6.0 What has delayed the upgrade is that the xalan:indent-amount is no working in translets for releases after 2.4.1. <xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xalan="http://xml.apache.org/xslt"> <xsl:output method="xml" omit-xml-declaration="yes" indent="yes" xalan:indent- amount="2" /> The xalan:indent-amount does not work when the style sheet has been compiled to a translet class. Also the xalan namespaces are not removed, I have to include xalan in the exclude-result-prefixes attribute along with other namespaces. I use the xsltc class to compile a style sheet into a translet class xsltc.compile ( inputStream, className ) Then I deploy the translet I need to call the setIndentAmount to get indenting to work. handler.setIndentAmount ( 2 ) ; The translet is not honouring the xalan:indent-amount attribute on the output. ============================================================================ handler.setIndentAmount commented out <Orders> <SalesOrder SONumber=""> <Customer CustNumber=""> <CustName/> <Street/> <City/> <State/> <PostCode/> </Customer> <OrderDate/> </SalesOrder> </Orders> handler.setIndentAmount ( 2 ) <Orders> <SalesOrder SONumber=""> <Customer CustNumber=""> <CustName/> <Street/> <City/> <State/> <PostCode/> </Customer> <OrderDate/> </SalesOrder> </Orders> xalan removed from exclude-prefix attribute <Orders xmlns:xalan="http://xml.apache.org/xslt"> <SalesOrder SONumber=""> <Customer CustNumber=""> <CustName/> <Street/> <City/> <State/> <PostCode/> </Customer> <OrderDate/> </SalesOrder> </Orders> ============================================================================ import java.io.* ; import java.util.* ; import org.w3c.dom.* ; import org.xml.sax.* ; import org.xml.sax.helpers.* ; import javax.xml.parsers.* ; import javax.xml.transform.* ; import javax.xml.transform.sax.* ; import javax.xml.transform.dom.* ; import javax.xml.transform.stream.* ; import org.apache.xalan.xsltc.dom.SAXImpl ; import org.apache.xalan.xsltc.dom.XSLTCDTMManager ; import org.apache.xml.serializer.SerializationHandler ; import org.apache.xalan.xsltc.runtime.AbstractTranslet ; import org.apache.xalan.xsltc.runtime.output.TransletOutputHandlerFactory ; public final class XMLTest implements ErrorHandler, ErrorListener, EntityResolver { private final static String METHOD = "xml" ; private final static String ENCODING = "UTF-8" ; private final static String EMPTY_STRING = "" ; private final static String SAX_PARSER = "org.apache.xerces.parsers.SAXParser" ; private final static String FEATURE_NAMESPACES = "http://xml.org/sax/features/namespaces" ; private final static String FEATURE_VALIDATION = "http://xml.org/sax/features/validation" ; private final static String FEATURE_VALIDATION_SCHEMA = "http://apache.org/xml/features/validation/schema" ; private final static String FEATURE_VALIDATION_DYNAMIC ="http://apache.org/xml/features/validation/dynamic" ; public final static void main ( String[] args ) throws Exception { XMLTest test = new XMLTest () ; String xmlSource = "<?xml version=\"1.0\" encoding=\"utf-8\"? ><root></root>" ; String result = test.transformTranslet ( xmlSource, "com.lansa.jsm.translet.SendOrder", false ) ; System.out.println ( result ) ; } public final String transformTranslet ( String xmlSource, String className, boolean schemaValidation ) throws Exception { InputSource inputSource = new InputSource ( new StringReader ( xmlSource ) ) ; XMLReader reader = createXMLReader ( schemaValidation ) ; SAXSource saxSource = new SAXSource ( reader, inputSource ) ; Class transletClass = Class.forName ( className ) ; AbstractTranslet translet = (AbstractTranslet)transletClass.newInstance () ; XSLTCDTMManager dtmManager = XSLTCDTMManager.newInstance () ; SAXImpl document = (SAXImpl)dtmManager.getDTM ( saxSource, false, null, true, false, translet.hasIdCall () ) ; String unicodeResult = transformTranslet ( translet, document ) ; document = null ; translet = null ; transletClass = null ; return unicodeResult ; } private final String transformTranslet ( AbstractTranslet translet, SAXImpl document ) throws Exception { ByteArrayOutputStream outputStream = new ByteArrayOutputStream ( 5000 ) ; TransletOutputHandlerFactory factory = TransletOutputHandlerFactory.newInstance () ; factory.setEncoding ( ENCODING ) ; // translet._encoding factory.setOutputMethod ( METHOD ) ; // translet._method factory.setOutputStream ( outputStream ) ; factory.setOutputType ( TransletOutputHandlerFactory.STREAM ) ; SerializationHandler handler = factory.getSerializationHandler () ; handler.setIndentAmount ( 2 ) ; translet.prepassDocument ( document ) ; translet.transform ( document, handler ) ; byte[] byteArray = outputStream.toByteArray () ; String unicodeResult = new String ( byteArray, "UTF-8" ) ; handler = null ; factory = null ; outputStream = null ; return unicodeResult ; } private final XMLReader createXMLReader ( boolean schemaValidation ) throws Exception { XMLReader reader = XMLReaderFactory.createXMLReader ( SAX_PARSER ) ; reader.setFeature ( FEATURE_NAMESPACES, true ) ; reader.setFeature ( FEATURE_VALIDATION, true ) ; if ( schemaValidation ) { reader.setFeature ( FEATURE_VALIDATION_SCHEMA, true ) ; } reader.setFeature ( FEATURE_VALIDATION_DYNAMIC, true ) ; reader.setErrorHandler ( this ) ; reader.setEntityResolver ( this ) ; return reader ; } public final InputSource resolveEntity ( String publicId, String systemId ) { return null ; } public final void warning ( SAXParseException e ) throws SAXParseException { throw e ; } public final void error ( SAXParseException e ) throws SAXParseException { throw e ; } public final void fatalError ( SAXParseException e ) throws SAXParseException { throw e ; } public final void warning ( TransformerException e ) throws TransformerException { throw e ; } public final void error ( TransformerException e ) throws TransformerException { throw e ; } public final void fatalError ( TransformerException e ) throws TransformerException { throw e ; } } ============================================================================== XSL used in test, this was compiled and the class used. <?xml version="1.0" encoding="UTF-8"?> <xsl:transform version="1.0" exclude-result-prefixes="rdml" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:rdml="http://www.lansa.com/2000/XML/Function" xmlns:xalan="http://xml.apache.org/xslt"> <xsl:output method="xml" omit-xml-declaration="yes" indent="yes" xalan:indent- amount="2"/> <xsl:template match="/"> <Orders> <SalesOrder SONumber="{/rdml:function/rdml:fields/rdml:field [EMAIL PROTECTED]'ORDER']/@value}"> <Customer CustNumber="{/rdml:function/rdml:fields/rdml:field [EMAIL PROTECTED]'CUSTNUM']/@value}"> <CustName><xsl:value-of select="/rdml:function/rdml:fields/rdml:[EMAIL PROTECTED]'NAME']/@value"/></CustName> <Street><xsl:value-of select="/rdml:function/rdml:fields/rdml:field [EMAIL PROTECTED]'STREET']/@value"/></Street> <City><xsl:value-of select="/rdml:function/rdml:fields/rdml:field [EMAIL PROTECTED]'CITY']/@value"/></City> <State><xsl:value-of select="/rdml:function/rdml:fields/rdml:field [EMAIL PROTECTED]'STATE']/@value"/></State> <PostCode><xsl:value-of select="/rdml:function/rdml:fields/rdml:[EMAIL PROTECTED]'ZIP']/@value"/></PostCode> </Customer> <OrderDate><xsl:value-of select="/rdml:function/rdml:fields/rdml:field [EMAIL PROTECTED]'ORDDTE']/@value"/></OrderDate> </SalesOrder> </Orders> ============================================================================== --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
