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

Reply via email to