Bonsoir à tous, j'aurais grandement besoin de conseil, car cela fait plusieurs jours que je tourne en bourrique sur mon problème, et il me faudrait des regards neuf pour soit trouver le souci soit pour m'aider à trouver de nouvelles pistes de test.
Alors tout d'abord le contexte :
J'ai un fichier Xml contenant mon flux Rss (modulo le nom de serveur final pour les <link/> ) que je passe dans une transformation Xslt (pour résoudre ce nom) via une servlet (qui me permet de connaître à l'instant T le nom de serveur)
fichier flux.xml
Code :
- <?xml version="1.0" encoding="utf-8"?>
- <rss version="2.0">
- <channel>
- <title>Blabla titre</title>
- <link>http://serveurXXX.fr</link>
- <description>Ce flux annonce blabla</description>
- <item>
- <title>Blabla item title</title>
- <link>http://serveurXXX/etc/etc/etc.html</link>
- <description>Bla bla descri item</description>
- <pubDate>Fri, 13 May 2011 16:08:43 GMT</pubDate>
- </item>
- </channel>
- </rss>
|
Dans firefox/ie/chrome ce fichier est reconnu comme un flux rss mais les liens n'aboutisse pas (normal)
J'ai donc crée une servlet qui vas faire la résolution de nom de domaine
Code :
- public void doGet(HttpServletRequest request, HttpServletResponse response)
- throws IOException, ServletException{
- String argument =request.getParameter("flux" );
- if (argument==null || argument =="" ){
- //response.setHeader("content-type", "text/xml" );
- //response.setHeader("content-type", "application/rss+xml" );
- response.setContentType("application/rss+xml" );
- response.setCharacterEncoding("UTF-8" );
- PrintWriter out = response.getWriter();
- out.println("<h1>Pas d'argument renseigné</h1>" );
- }else{
- processFluxParam(argument,request,response);
- //test renvoie fic.xml non modif
- //RequestDispatcher dispatch = request.getRequestDispatcher("/html/"+argument+".xml" );
- //dispatch.forward(request, response);
- }
- }
|
Dans un premier temps je me contente de rediriger le flux.xml via la servlet (L18/19 en commentaire dans le doGet)
Nickel, j'ai bien un flux rss à l'écran
Ensuite je passe par avec la fonction processFluxParam
Code :
- private void processFluxParam(String Flux,HttpServletRequest request, HttpServletResponse response)
- throws IOException, ServletException{
- String path = getServletContext().getRealPath("" );
- //BufferedReader leDocument = new BufferedReader(new InputStreamReader(new FileInputStream(path+"/html/"+Flux+".xml" ),"UTF-8" ));
- //Source xml = new StreamSource(leDocument);
- //StreamSource xml = new StreamSource(new File(path+"/html/"+Flux+".xml" ));
- StreamSource xml = new StreamSource(new FileInputStream(path+"/html/"+Flux+".xml" ),"UTF-8" );
- PrintWriter out = response.getWriter();
- javax.xml.transform.Transformer t = null;
- try
- {
- TransformerFactory tFactory = TransformerFactory.newInstance();
- Source xslSource = new StreamSource(new File(path+"/WEB-INF/xsl/"+"flux.xsl" ));
- t = tFactory.newTransformer(xslSource);
- //t.setOutputProperty(javax.xml.transform.OutputKeys.OMIT_XML_DECLARATION, "yes" );
- t.setOutputProperty(javax.xml.transform.OutputKeys.ENCODING, "UTF-8" );
- t.transform(xml, new StreamResult(out));
- }
- catch (TransformerConfigurationException e)
- {
- e.printStackTrace();
- throw new ServletException(e);
- }
- catch (TransformerFactoryConfigurationError e)
- {
- e.printStackTrace();
- throw new ServletException(e);
- }
- catch (TransformerException e)
- {
- e.printStackTrace();
- throw new ServletException(e);
- }
- }
|
+ la feuille Xsl qui vas bien ( elle ne fait que recopier pour l'instant) flux.xsl
Code :
- <?xml version="1.0" encoding="UTF-8"?>
- <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
- <xsl:output method="xml" indent="yes" encoding="UTF-8"/>
- <xsl:template match="/">
- <xsl:copy-of select="*"/>
- </xsl:template>
- </xsl:stylesheet>
|
Et c'est là que ça ce complique pour moi :? : j'ai deux souci
1) J’ai un contenu équilavent à 100% au contenu du fichier flux.xml sauf que je n'ai pas l'affichage d'un flux Rss dans le navigateur sous Firefox/chrome Alors que sous ie 8 Oui c'est bien détecter en flux rss
2) J’ai un problème d'encodage en UTF-8, en effet si je glisse un caractère du style ç/é/° dans mon flux.xml , à l'écran j'ai des ???? et sous IE le contenu n'est plus reconnu comme un flux Rss (Alors qui avec la simple redirection c'est bon aussi pour l'utf8)
=> Pour le 1) je ne vois vraiment pas pourquoi, ce que ma servlet renvoie n'es pas vu comme un flux rss
=> Pour le 2) j'imagine que lorsque je crée mon streamsource xml je passe en Iso ....
Bref c'est là que je bloque.
En tout cas merci d'être arrivé jusqu'au bout de ce pavé, j'espère que j'ai réussi à exposé mon problème. N'hésitez pas a me posé des questions.
En bonus : voici des Screens shoot
Ce que j'ai en consultant le fichier directement via le navigateur (
ce que j'ai via ma servlet
et le code source de cet affichage :
Code :
- <?xml version="1.0" encoding="UTF-8"?>
- <rss version="2.0">
- <channel>
- <title>Blabla titre</title>
- <link>http://serveurXXX.fr</link>
- <description>Ce flux annonce blabla</description>
- <item>
- <title>Blabla item title</title>
- <link>http://serveurXXX/etc/etc/etc.html</link>
- <description>Bla bla descri item</description>
- <pubDate>Fri, 13 May 2011 16:08:43 GMT</pubDate>
- </item>
- </channel>
- </rss>
|
Message édité par pegaz86 le 20-05-2011 à 14:05:55