boysna
10-01-2007, 11:08
Ciao a tutti.
Vi spiego subito la situazione: Ho una servlet che crea l'istanza di una classe, poi chiama un metodo su questa istanza. Il metodo restituisce un vettore di una classe Bean da me creata. Si chiama Contenuto questo bean. E fa un ciclo su questo vettore restituendo, tramite out.println, un xml cosi composto:
<root>
<contenuto>
<id>1</id>
<file>file.txt</file>
<testo>appunti</testo>
</contenuto>
</root>
All'interno di root ci sono piu tag contenuto.
Una thread in j2me deve invocare la servlet e mettere in una stringa il contenuto.
Il problema è che legge solo il tag <root> e </root>.
Non riesco acapire perchè. Ecco i codici.
SERVLET:
public class GetXmlContenuti extends HttpServlet{
public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException{
GestioneDB gest = new GestioneDB();
ContenutoSpControl contrContSp=new ContenutoSpControl(gest);
ContenutoControl contContr = new ContenutoControl(gest);
Vector idContenuti = contrContSp.getIdContenuti(req.getParameter("idSp"));
Vector contenuti = contContr.getContenuti(idContenuti);
response.setContentType("text/xml");
PrintWriter out = response.getWriter();
out.println("<root>");
int i=0;
while(i<contenuti.size()){
Contenuto tempCont = (Contenuto)contenuti.elementAt(i);
Utente tempUt = utCont.getUtente(tempCont.getUtenteProprietario());
out.println("<contenuto>");
out.println("<id>" + tempCont.getId() + "</id>");
out.println("<nomeUtente>" + tempUt.getNome() + "</nomeUtente>");
out.println("<cognomeUtente>" + tempUt.getCognome() + "</cognomeUtente>");
out.println("<file>" + tempCont.getFile() + "</file>");
out.println("<testo>" + tempCont.getTesto() + "</testo>");
out.println("</contenuto>");
i++;
}
out.println("</root>");
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException,IOException{
doGet(request,response); }
}
THREAD IN J2ME (metto solo il codice che legge dallaservlet)
import org.kxml2.io.*;
import org.xmlpull.v1.*;
public class ListaContenutiThread extends Thread implements CommandListener{
public void run(){
//Connessione e acquisizione dell'output della servlet
StringBuffer xmlBuffer = new StringBuffer();
HttpConnection connessione = null;
try {
System.out.println("...Richiesta lista dei contenuti in corso...");
String URL= "http://localhost:8080/ContentDelivery/GetXmlContenuti?id=" + idSp;
connessione = (HttpConnection)Connector.open(URL);
InputStream is = connessione.openInputStream();
int ch;
int i=0;
while ((ch = is.read()) != -1) {
xmlBuffer.append( (char)ch );}
is.close();
connessione.close();
String xmlStr = xmlBuffer.toString();
}
Nella stringa xmlStr c'è solo <root></root>.
Laservlet restituisce perfettamente l'output se la chiamo dal browser. Non capisco perchè nella stringa invece non lo ritorna bene.
Vi spiego subito la situazione: Ho una servlet che crea l'istanza di una classe, poi chiama un metodo su questa istanza. Il metodo restituisce un vettore di una classe Bean da me creata. Si chiama Contenuto questo bean. E fa un ciclo su questo vettore restituendo, tramite out.println, un xml cosi composto:
<root>
<contenuto>
<id>1</id>
<file>file.txt</file>
<testo>appunti</testo>
</contenuto>
</root>
All'interno di root ci sono piu tag contenuto.
Una thread in j2me deve invocare la servlet e mettere in una stringa il contenuto.
Il problema è che legge solo il tag <root> e </root>.
Non riesco acapire perchè. Ecco i codici.
SERVLET:
public class GetXmlContenuti extends HttpServlet{
public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException{
GestioneDB gest = new GestioneDB();
ContenutoSpControl contrContSp=new ContenutoSpControl(gest);
ContenutoControl contContr = new ContenutoControl(gest);
Vector idContenuti = contrContSp.getIdContenuti(req.getParameter("idSp"));
Vector contenuti = contContr.getContenuti(idContenuti);
response.setContentType("text/xml");
PrintWriter out = response.getWriter();
out.println("<root>");
int i=0;
while(i<contenuti.size()){
Contenuto tempCont = (Contenuto)contenuti.elementAt(i);
Utente tempUt = utCont.getUtente(tempCont.getUtenteProprietario());
out.println("<contenuto>");
out.println("<id>" + tempCont.getId() + "</id>");
out.println("<nomeUtente>" + tempUt.getNome() + "</nomeUtente>");
out.println("<cognomeUtente>" + tempUt.getCognome() + "</cognomeUtente>");
out.println("<file>" + tempCont.getFile() + "</file>");
out.println("<testo>" + tempCont.getTesto() + "</testo>");
out.println("</contenuto>");
i++;
}
out.println("</root>");
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException,IOException{
doGet(request,response); }
}
THREAD IN J2ME (metto solo il codice che legge dallaservlet)
import org.kxml2.io.*;
import org.xmlpull.v1.*;
public class ListaContenutiThread extends Thread implements CommandListener{
public void run(){
//Connessione e acquisizione dell'output della servlet
StringBuffer xmlBuffer = new StringBuffer();
HttpConnection connessione = null;
try {
System.out.println("...Richiesta lista dei contenuti in corso...");
String URL= "http://localhost:8080/ContentDelivery/GetXmlContenuti?id=" + idSp;
connessione = (HttpConnection)Connector.open(URL);
InputStream is = connessione.openInputStream();
int ch;
int i=0;
while ((ch = is.read()) != -1) {
xmlBuffer.append( (char)ch );}
is.close();
connessione.close();
String xmlStr = xmlBuffer.toString();
}
Nella stringa xmlStr c'è solo <root></root>.
Laservlet restituisce perfettamente l'output se la chiamo dal browser. Non capisco perchè nella stringa invece non lo ritorna bene.