Bonjour à tous !!

Ok, ok... ça va surement paraître trivial pour certains, mais je galère pour enregistrement une chaine XML dans un fichier...

Via un script PHP, je génère un document xsl-fo qui est ensuite proposé en téléchargement via les "headers".
J'ai maintenant une application JAVA qui est sensée envoyer une requête à ce script et en récupérer le contenu. Jusqu'ici tout va bien. A l'aide des exemples de la FAQ, j'ai réussi sans difficulté à récupérer le contenu de mon document.

Mon problème maintenant est de pouvoir l'enregistrer en tant que document xml "valide". Le but étant de passer le contenu à la moulinette FOP, j'aimerai pouvoir enregistrer ce fichier en local avant de le traiter. Malheureusement je n'y arrive pas...

J'ai d'abord été confronté à différentes erreurs pour finalement arriver à quelque chose qui me semble assez correct, mais au final ça ne me semble pas du tout optimisé et il reste des problèmes...

Voici tout d'abord mon code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
 
	    // create params for the url
	    String params = URLEncoder.encode("generation", "UTF-8")+
		    "="+URLEncoder.encode("0", "UTF-8");
	    params += "&" + URLEncoder.encode("links", "UTF-8")+
		    "="+URLEncoder.encode("0", "UTF-8");
	    params += "&" + URLEncoder.encode("generatePDF", "UTF-8")+
		    "="+URLEncoder.encode("0", "UTF-8");
 
	    // connection creation
	    URL url = new URL( "http://localhost/Flex/as3/projects/fasa/build002/generator2" );
	    URLConnection conn = url.openConnection();
	    conn.setDoOutput(true);
 
	    // request
	    writer = new OutputStreamWriter(conn.getOutputStream());
	    writer.write( params );
	    writer.flush();
 
	    // answer
	    reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
 
	    // delete possibly existing file
	    File f = new File( "test_catalog.fo" );
	    if( f != null )
	    {
		if( f.exists() )
		    f.delete();
	    }
 
	    // get content of document
	    String ligne;
	    String document = "";
	    int index = 0;
	    while ((ligne = reader.readLine()) != null && index < 1000 ) 
	    {
		//System.out.println( ligne );
		document += ligne + "\n";
		index++;
	    }
 
	    // parse and transform document to save it as XML
	    Result res = new StreamResult( new PrintStream( new FileOutputStream( "test_catalog.fo" ) ) );
	    Source src = new StreamSource( document );
	    TransformerFactory fac = TransformerFactory.newInstance();
	    Transformer trans = fac.newTransformer();
 
	    trans.transform( src, res );
Premièrement, j'ai une boucle qui lit le document ligne après ligne pour l'intégrer dans une variable... Le souci c'est que mon document possède plus de 60'000 lignes... Si je laisse la méthode lire tout le fichier, ça bloque et après plusieurs minutes je n'ai toujours pas de réponse de l'application... J'ai donc limité la lecture aux milles premières lignes pour faire mes tests, mais ça ne règle pas le problème... Ma première question est donc : existe-t-il un moyen plus simple d'obtenir tout le contenu du BufferedReader ? peut-être que je n'utilise pas les bons objets pour arriver à mon but, je ne sais pas...

Deuxièmement, une fois le document récupéré, je le balance au processus de parsing, et la console me renvoie une erreur toute simple :

ERREUR : 'no protocol: ...' avec toute ma chaine XML... J'ai cru comprendre que l'erreur fait référence à un DOCTYPE qui serait manquant, mais je n'arrive pas à comprendre le pourquoi du comment... Dans ma balise fo:root je fais bien référence au xmlns http://www.w3.org/1999/XSL/Format...

Bref, je suis bloqué et j'imagine que c'est pour pas grand chose, mais je ne trouve pas de solutions... Les suggestions sont donc bienvenues


D'avance merci !!