Salut à tous !
Je suis tombé sur un os et j'ai du mal à m'en sortir tout seul ^^'
En quelques mots, en espérant qu'ils vous parlent :
Je développe une applciation web qui, du côté client comme du côté serveur, utilise abondamment XML, et tant qu'à faire XSL. Jusque là je faisais toutes les transformations XSL du côté client à grand coup d'AJAX, dans FireFox comme dans Internet Explorer, et tout allait bien dans le meilleur des monde (*toussote* - sérieusement ça marche bien).
Puis j'ai décidé, pour faire un test de performances, de déléguer la tâche à mon serveur. Côté JavaScript ma classe d'encapsulation est utilisée de la même manière sauf qu'elle contacte le serveur pour faire le boulot, ceci à l'aide d'une servlet qui récupère en URL le chemin vers la feuille XSL à utiliser, et les données (XML) via la méthode POST.
Jusque là rien de bien grave, si ce n'est que Xalan me pond une erreur lors de la transformation, et je ne vois pas pourquoi, et surtout il ne me dit pas grand chose d'éloquant, je ne peux même pas aller dans le code car je n'ai pas de n° de ligne ni rien qui me parle trop... oô
Ce qui m'interpèle aussi c'est que pour une transformation (plutôt courte) ça marche mais pour une autre (plus grosse) ça ne marche pas. Encore une fois, lorsque les transformations sont faites du côté client par AJAX tout fonctionne bien et les feuilles XSL sont plutôt riches.
Voici le code de la méthode service de ma servlet que j'ai appelée TransformXML, suivie de l'erreur affichée dans la console ainsi que le message de l'exception :
/ Merci d'avance à ceux qui pourront m'aider, libre à vous de me poser des questions s'il vous manque un élément d'information.
Cheers !
....public void service(HttpServletRequest p_oRequest, HttpServletResponse p_oResponse) throws ServletException, IOException
....{
........String sStyleSheet = p_oRequest.getParameter("stylesheet");
........PrintWriter oOutput = p_oResponse.getWriter();
........try
........{
............String sData = "";
............int iDataLength = p_oRequest.getContentLength();
............if(iDataLength > 0)
............{
................BufferedReader oReader = p_oRequest.getReader();
................char[] aCharacters = new char[iDataLength];
................oReader.read(aCharacters);
................sData = new String(aCharacters).trim();
............}
............if(!sData.equals(""))
............{
................TransformerFactory oFactory = TransformerFactory.newInstance();
................Source oXMLSource = new StreamSource(new StringReader(sData));
................Source oXSLSource = new StreamSource(new URL(sStyleSheet).openStream());
................p_oResponse.setContentType("text/xml; charset=UTF-8");
................oFactory.setURIResolver(Application.getInstance());
................Transformer oTransformer = oFactory.newTransformer(oXSLSource);
// oTransformer.setOutputProperty("method", "xml");
// oTransformer.setOutputProperty("omit-xml-declaration", "yes");
................StringWriter oWriter = new StringWriter();
................StreamResult oResult = new StreamResult(oWriter);
................oTransformer.transform(oXMLSource, oResult/* new StreamResult(oOutput) */);
................System.out.println("¤¤¤" + oWriter.getBuffer() + "¤¤¤");
................oOutput.print(oWriter.getBuffer());
............}
........}
........catch(Exception oException)
........{
............oOutput.write(oException.getMessage());
............oException.printStackTrace(oOutput);
........}
....}
Exception#printStackTrace() :
ERREUR : 'javax.xml.transform.TransformerException: com.sun.org.apache.xml.internal.utils.URI$MalformedURIException: Query string contains invalid character:
'
Exception#getMessage() :
com.sun.org.apache.xalan.internal.xsltc.TransletException: javax.xml.transform.TransformerException: com.sun.org.apache.xml.internal.utils.URI$MalformedURIException: Query string contains invalid character: javax.xml.transform.TransformerException: com.sun.org.apache.xalan.internal.xsltc.TransletException: javax.xml.transform.TransformerException: com.sun.org.apache.xml.internal.utils.URI$MalformedURIException: Query string contains invalid character: at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(Unknown Source) at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(Unknown Source) at kanopé.application.servlet.TransformXML.service(TransformXML.java:62) at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
[...]
Partager