Problema JSP

Tagged:  

Hola buenas tardes, me ha surgido un problema y agradecería mucho una ayuda.

Estoy desarrollando una aplicación web con jsp, los jsp acceden a un servicio web en java que comunica con una base de datos en MySQL. El problema le tengo al llamar a un método del servicio web que devuelve objetos Vector siendo Descripcion una clase con una serie de atributos a los que quiero acceder desde la jsp.
El código de la jsp es el siguiente:

<%@page import="org.apache.axis.client.Call"%> 
<%@page import="org.apache.axis.client.Service"%> 
<%@page import="org.apache.axis.encoding.XMLType"%> 
<%@page import="java.util.Vector"%> 
<%@page import="java.util.ArrayList"%> 
<%@page import="java.util.*"%> 
<%@page import="javax.xml.rpc.ParameterMode"%> 
<%@page import="servidor.Descripcion"%> 
 
<%@page contentType="text/html" pageEncoding="UTF-8"%> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd"> 
 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>JSP Page</title> 
</head> 
<body> 
 
<table> 
<% 
try { 
 
 
String sql="aqui va la sentencia sql"; 
String endpoint="url del servicio web con extensión .jws "; 
Service service = new Service (); 
Call call = (Call) service.createCall (); 
call.setTargetEndpointAddress(new java.net.URL(endpoint)); 
 
call.setOperationName("obtenerBreveDescripcionVector"); 
 
call.addParameter( "sql", XMLType.XSD_STRING, ParameterMode.IN ); 
 
call.setReturnType (XMLType.SOAP_VECTOR); 
Vector<Descripcion> ret = (Vector<Descripcion>) call.invoke (new Object [] {sql}); 
 
for(int i=0; i<ret.size(); i++){ 
 
String id=ret.get(i).getId(); 
String curso = (String)ret.get(i).getCurso(); 
String creditos = ret.get(i).getCreditos(); 
String semestre = ret.get(i).getSemestre(); 
String horas = ret.get(i).getHorasSemana(); 
String horario = ret.get(i).getHorario(); 
String grupo = ret.get(i).getGrupo(); 
String aulaT = ret.get(i).getAulaT(); 
String aulaP = ret.get(i).getAulaP(); 
String profesores = ret.get(i).getProfesores(); 
 
out.println("<tr><td>Curso</td><td>"+curso+"</td></tr><tr><td>Créditos</td><td>"+creditos+"</td></tr><tr><td>Semestre</td><td>"+semestre+"</td></tr><tr><td>Horas/Semana</td><td>"+horas+"</td></tr><tr><td>Horario</td><td>"+horario+"</td></tr><tr><td>Grupo</td><td>"+grupo+"</td></tr><tr><td>Aula de teoría</td><td>"+aulaT+"</td></tr><tr><td>Aula de prácticas</td><td>"+aulaP+"</td></tr><tr><td>Profesores</td><td>"+profesores+"</td></tr>"); 
 
} 
 
catch (Exception ex) { 
// TODO handle custom exceptions here 
} 
%> 
<br> 
<br> 
<br> 
</table> 
</body> 
</html> 

Basicamente la duda que tengo debería estar en las siguientes lineas:

call.setReturnType (XMLType.SOAP_VECTOR);
Vector ret = (Vector) call.invoke (new Object [] {sql});

No se si es correcta la invocación para un Vector de objetos de una clase propia, no me da ningun error simplemente me muestra la jsp en blanco. El acceso del servicio web a la base de datos es correcto, el problema debería estar en este código.

Muchisimas gracias,

Un saludo.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Por lo que veo, el código parece correcto, pero por si acaso deberías mostrar la posible excepción que te lance.

Prueba a cambiar esto:

catch (Exception ex) {
    out.print(ex.getStackTrace());
}

Muchas gracias!!

Había probado a imprimirla peror staba poniendolo mal. Ahora si que me muestra el siguiente error:

; nested exception is:
org.xml.sax.SAXParseException: Premature end of file.

Aún no se a que se puede deber, ¿alguna idea? Seguire investigando xD. Muchisimas gracias por la respuesta!

Es posible que el problema esté en el lado del Web Service. Lo más seguro es que no esté devolviendo nada. ¿Has probado a pasarle el debugger?

El error está en esta linea:

Vector ret = (Vector) call.invoke (new Object [] {sql});

supongo que el problema está al devolver el objeto de mi clase propia Descripcion, el método del servicio web al que estoy llamando es el siguiente:

public Vector obtenerObjetivosVector(String sql) throws Exception
{
this.Conectar();

Statement stmt;
ResultSet res = null;

String [] columnas;
Vector resultados = new Vector();

try
{
stmt = conn.createStatement();

res = stmt.executeQuery(sql);

while(res.next())
{
Descripcion desc = new Descripcion();
String [] columnas= desc.getColumnas();

String dato0 = res.getString(columnas[0]);
desc.setId(dato0);
String dato1 = res.getString(columnas[1]);
desc.setCurso(dato1);
String dato2 = res.getString(columnas[2]);
desc.setCreditos(dato2);
String dato3 = res.getString(columnas[3]);
desc.setSemestre(dato3);
String dato4 = res.getString(columnas[4]);
desc.setHorasSemana(dato4);
String dato5 = res.getString(columnas[5]);
desc.setHorario(dato5);
String dato6 = res.getString(columnas[6]);
desc.setGrupo(dato6);
String dato7 = res.getString(columnas[7]);
desc.setAulaT(dato7);
String dato8 = res.getString(columnas[8]);
desc.setAulaP(dato8);
String dato9 = res.getString(columnas[9]);
desc.setProfesores(dato9);

resultados.add(desc);

}

res.close();
stmt.close();
}
catch (SQLException e)
{
// TODO Auto-generated catch block
}

this.Desconectar();

return resultados;

}

¿Estoy comentiendo algun error al hacer el call.invoke para este tipo de datos?¿Cómo se puede hacer para una clase propia?

Gracias nuevamente

Enviar un comentario nuevo

El contenido de este campo se mantiene privado y no se mostrará públicamente.
  • Las direcciones de las páginas web y las de correo se convierten en enlaces automáticamente.
  • Etiquetas HTML permitidas: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Saltos automáticos de líneas y de párrafos.
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>, <pre>. The supported tag styles are: <foo>, [foo].

Más información sobre opciones de formato

By submitting this form, you accept the Mollom privacy policy.