Programación General > JSP/Servlets
Problema JSP
laurita_85_:
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<Descripcion> 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">
<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<Descripcion> ret = (Vector<Descripcion>) 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.
shadow_rev:
Pon algo en la sentencia catch, ya que así como lo tienes no te va a arrojar ningún error y no te das cuenta de qué está ocurriendo.
--- Código: Java ---// ...catch(Exception ex) { // Solo espero que hallas declarado el stream out por fuera del bloque try out.println("<pre>" + ex.getMessage() + "</pre>"); // Imprime el error en la salida stderr, que se captura en una consola o en el log del servidor System.err.println(ex.getMessage());}// ... No conozco muy bien la sintaxis de Vector :unsure: , pero espero que esto al menos te ayude a identificar el error.
:suerte:
laurita_85_:
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!
m0skit0:
Parece que el XML lo estás mandando mal. Intenta ver qué función es la que lanza esa excepción. Haz try-catch más pequeños para localizar el problema si hay varias que lancen SAXParseException.
laurita_85_:
El error está en esta linea:
Vector<Descripcion> ret = (Vector<Descripcion>) 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<Descripcion> obtenerObjetivosVector(String sql) throws Exception
{
this.Conectar();
Statement stmt;
ResultSet res = null;
String [] columnas;
Vector<Descripcion> resultados = new Vector<Descripcion>();
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
Navegación
[#] Página Siguiente
Ir a la versión completa