Servlet +xml+xslt => flux rss = problèmes

Servlet +xml+xslt => flux rss = problèmes - Java - Programmation

Marsh Posté le 20-05-2011 à 14:03:45    

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 :
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <rss version="2.0">
  3. <channel>
  4.  <title>Blabla titre</title>
  5.  <link>http://serveurXXX.fr</link>
  6.  <description>Ce flux annonce blabla</description>
  7.  <item>
  8.   <title>Blabla item title</title>
  9.   <link>http://serveurXXX/etc/etc/etc.html</link>
  10.   <description>Bla bla descri item</description>
  11.   <pubDate>Fri, 13 May 2011 16:08:43 GMT</pubDate>
  12.  </item>
  13. </channel>
  14. </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 :
  1. public void doGet(HttpServletRequest request, HttpServletResponse response)
  2.  throws IOException, ServletException{
  3.  String argument =request.getParameter("flux" );
  4.  if (argument==null || argument =="" ){
  5.   //response.setHeader("content-type", "text/xml" );
  6.   //response.setHeader("content-type", "application/rss+xml" );
  7.     response.setContentType("application/rss+xml" );
  8.     response.setCharacterEncoding("UTF-8" );
  9.   PrintWriter out = response.getWriter();
  10.   out.println("<h1>Pas d'argument renseigné</h1>" );
  11.  }else{
  12.   processFluxParam(argument,request,response);
  13.   //test renvoie fic.xml non modif
  14.   //RequestDispatcher dispatch = request.getRequestDispatcher("/html/"+argument+".xml" );
  15.   //dispatch.forward(request, response);
  16.  }
  17. }


 
 
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 :
  1. private void processFluxParam(String Flux,HttpServletRequest request, HttpServletResponse response)
  2.  throws IOException, ServletException{
  3.  String path = getServletContext().getRealPath("" );
  4.  //BufferedReader leDocument = new BufferedReader(new InputStreamReader(new FileInputStream(path+"/html/"+Flux+".xml" ),"UTF-8" ));
  5.  //Source xml = new StreamSource(leDocument);
  6.  //StreamSource xml = new StreamSource(new File(path+"/html/"+Flux+".xml" ));
  7.  StreamSource xml = new StreamSource(new FileInputStream(path+"/html/"+Flux+".xml" ),"UTF-8" );
  8.  PrintWriter out = response.getWriter();
  9.  javax.xml.transform.Transformer t = null;
  10.  try
  11.  {
  12.    TransformerFactory tFactory = TransformerFactory.newInstance();
  13.    Source xslSource = new StreamSource(new File(path+"/WEB-INF/xsl/"+"flux.xsl" ));
  14.    t = tFactory.newTransformer(xslSource);
  15.    //t.setOutputProperty(javax.xml.transform.OutputKeys.OMIT_XML_DECLARATION, "yes" );
  16.    t.setOutputProperty(javax.xml.transform.OutputKeys.ENCODING, "UTF-8" );
  17.    t.transform(xml, new StreamResult(out));
  18.  }
  19.  catch (TransformerConfigurationException e)
  20.  {
  21.   e.printStackTrace();
  22.   throw new ServletException(e);
  23.  }
  24.  catch (TransformerFactoryConfigurationError e)
  25.  {
  26.   e.printStackTrace();
  27.   throw new ServletException(e);
  28.  }
  29.  catch (TransformerException e)
  30.  {
  31.   e.printStackTrace();
  32.   throw new ServletException(e);
  33.  }
  34. }


 
+ la feuille Xsl qui vas bien ( elle ne fait que recopier pour l'instant) flux.xsl

Code :
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  3. <xsl:output method="xml" indent="yes" encoding="UTF-8"/>
  4. <xsl:template match="/">
  5.     <xsl:copy-of select="*"/>
  6. </xsl:template>
  7. </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 (
 
 
http://imageshack.us/m/46/7289/fluxxmlvupaslenavgateur.png
 
ce que j'ai via ma servlet  
 
http://imageshack.us/m/688/2481/vialaservlettransfo.png
 
et le code source de cet affichage :

Code :
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <rss version="2.0">
  3. <channel>
  4.  <title>Blabla titre</title>
  5.  <link>http://serveurXXX.fr</link>
  6.  <description>Ce flux annonce blabla</description>
  7.  <item>
  8.   <title>Blabla item title</title>
  9.   <link>http://serveurXXX/etc/etc/etc.html</link>
  10.   <description>Bla bla descri item</description>
  11.   <pubDate>Fri, 13 May 2011 16:08:43 GMT</pubDate>
  12.  </item>
  13. </channel>
  14. </rss>


Message édité par pegaz86 le 20-05-2011 à 14:05:55
Reply

Marsh Posté le 20-05-2011 à 14:03:45   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed