Hi Brian, Just to add some more info.
We are working on performance enhancement by using compiled translets for XML transformation. We are using Xalan 2.7.0. Currently we are getting transformation failure exception for some requests if the number of concurrent requests is 100. The approach we are following is as follows. 1. Compile the XSL files into .class files using XSLTC API and put in the WEB-INF/classes directory of the web application. 2. For each transformation, construct a transformer factory and set use-classpath attribute to true. 3. Construct a StreamSource object out of the translet name. 4. Construct a transformer object out of the transformer factory by passing the StreamSource object. 5. Call transformer.transform() to perform the transformation. JDK 1.4.2 ships with a default JAXP implementation which conflicts with Xalan 2.7.0. For this we have put the latest built jar files in $JAJA_HOME/jre/endorsed directory. Please let us know if this approach is correct for multiple transformations. FYI, we have also tried with templates i.e. Constructed Templates out of translets and then the transformer. But the problem still persists. The pseudo code is as follows public String transform(Source xmlSource, String transletName){ transformerFactory = TransformerFactory.newInstance(); transformerFactory.setAttribute("use-classpath", Boolean.TRUE); transformer = transformerFactory.newTransformer(new StreamSource( transletName)); transformer.transform(xmlSource, ResultSource); } The stack trace is as follows. ... 15 more ERROR: 'Content is not allowed in prolog.' ERROR: 'org.apache.xml.utils.WrappedRuntimeException: Content is not allowed in prolog.' javax.xml.transform.TransformerException: javax.xml.transform.TransformerExcepti on: org.apache.xml.utils.WrappedRuntimeException: Content is not allowed in prol og. at org.apache.xalan.xsltc.trax.TransformerImpl.transform(TransformerImpl .java:640) at org.apache.xalan.xsltc.trax.TransformerImpl.transform(TransformerImpl .java:301) at com.citibank.rmds.test.RI_TransformServlet_RIS.doGet(RI_TransformServ let_RIS.java:86) at javax.servlet.http.HttpServlet.service(HttpServlet.java:740) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run (ServletStubImpl.java:996) at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubIm pl.java:419) at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubIm pl.java:315) at weblogic.servlet.internal.WebAppServletContext$ServletInvocationActio n.run(WebAppServletContext.java:6452) at weblogic.security.acl.internal.AuthenticatedSubject.doAs(Authenticate dSubject.java:321) at weblogic.security.service.SecurityManager.runAs(SecurityManager.java: 118) at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppSe rvletContext.java:3661) at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestIm pl.java:2630) at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:219) at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:178) Caused by: javax.xml.transform.TransformerException: org.apache.xml.utils.Wrappe dRuntimeException: Content is not allowed in prolog. at org.apache.xalan.xsltc.trax.TransformerImpl.getDOM(TransformerImpl.ja va:484) at org.apache.xalan.xsltc.trax.TransformerImpl.transform(TransformerImpl .java:630) ... 14 more Caused by: org.apache.xml.utils.WrappedRuntimeException: Content is not allowed in prolog. at org.apache.xalan.xsltc.dom.XSLTCDTMManager.getDTM(XSLTCDTMManager.jav a:393) at org.apache.xalan.xsltc.dom.XSLTCDTMManager.getDTM(XSLTCDTMManager.jav a:228) at org.apache.xalan.xsltc.trax.TransformerImpl.getDOM(TransformerImpl.ja va:462) ... 15 more Some times we are also getting ArrayIndexOutOfBoundsException. Please let me know if this is related to usage and if there is any specific usage for using translets in multi threaded environment. Thanks & Regards, Ambika Prasad Das -----Original Message----- From: Ambika Das-IC Sent: Friday, September 01, 2006 11:16 AM To: 'Brian Minchau' Cc: xalan-j-users@xml.apache.org Subject: RE: Problem using compiled translets with Xalan !! Hi Brian, We are using the latest version of Xalan. The HTTP server generates XML data depending on the parameters passed. We have compiled the XSL file into class files and put in WEB-INF/classes folder of our web application. But When we send concurrent requests, some the transformations fail. We are using the following approach for transformation transformerFactory = TransformerFactory.newInstance(); transformerFactory.setAttribute("use-classpath", Boolean.TRUE); transformer = transformerFactory.newTransformer(new StreamSource(transletName)); transformer.transform(xmlSource, resultSource); Thanks & Regards, Ambika Prasad Das -----Original Message----- From: Brian Minchau [mailto:[EMAIL PROTECTED] Sent: Friday, September 01, 2006 10:50 AM To: Ambika Das-IC Cc: xalan-j-users@xml.apache.org Subject: Re: Problem using compiled translets with Xalan !! Importance: Low Ambika, more information is needed. This could be an error totally outside of Xalan, like a bug in an underlying database concurrency (unlikely, but possible). What version of Xalan are you using? The latest published 2.7.0 ? What is the HTTP server doing? Is it running servlets that run an XSLT transformation to generate and return XML? If that is the case what is each servlet keeping a reference to from each invocation to the next? The transformer factory? The compiled transformation? Please provide more information, possibly code fragments or pseudo code, othewise no progress can be made. - Brian - - - - - - - - - - - - - - - - - - - - Brian Minchau, Ph.D. XSLT Development, IBM Toronto (780) 431-2633 e-mail: [EMAIL PROTECTED] <[EMAIL PROTECTED] solutions.com> To 09/01/2006 12:24 <xalan-j-users@xml.apache.org> AM cc Subject Problem using compiled translets with Xalan !! Hi All, We are using compiled translets to transform XML data into XSL. The application makes HTTP URL connection to a remote site which generates XML based on the request. The same is transformed using compiled translets. We have observed that out of 100 concurrent requests, 1 or 2 requests fail due to transformation failure. Does anybody know why this happens? For each request we are creating a transformer factory and a transformer. We have even tested with templates, but the problem still persists. Thanks & Regards, Ambika Prasad Das