[ http://issues.apache.org/jira/browse/XALANJ-1821?page=all ]

Brian Minchau updated XALANJ-1821:
----------------------------------

    Version: 2.5
                 (was: Latest Development Code)

> xalan:indent-amount does not work in Translets
> ----------------------------------------------
>
>          Key: XALANJ-1821
>          URL: http://issues.apache.org/jira/browse/XALANJ-1821
>      Project: XalanJ2
>         Type: Bug
>   Components: Serialization
>     Versions: 2.5
>  Environment: Operating System: Other
> Platform: All
>     Reporter: Alick Buckley
>     Assignee: Xalan Developers Mailing List
>     Priority: Minor

>
> 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>
> ==============================================================================

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to