我一直在用java开发web服务。我在Java(自上而下)之前构建了wsd。问题是,我创建了一些类来请求MySql数据库中的数据。在SOAPImpl的方法中,我创建了一个类为Usuario的Object,但当我使用SOAP UI测试服务时,它显示了一个NullPointerException。
这是代码
DataBase.java
package negocio;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class DataBase
{
private String conexion;
private String user;
private String pass;
Connection conexionBase;
Statement estado;
DataBase()
{
this.conexion = "jdbc:mysql://localhost/agua";
this.user = "1234";
this.pass = "1234";
this.preparaDB();
}
public void preparaDB()
{
try {
Class.forName("com.mysql.jdbc.Driver");
}
catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try
{
this.conexionBase = DriverManager.getConnection (conexion, user, pass);
estado = conexionBase.createStatement();
}
catch(SQLException e)
{
System.out.println(e.toString());
}
}
public Statement getEstado()
{
return estado;
}
}
Usuario.java
package negocio;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class Usuario extends DataBase{
private String clave;
private String nombre;
private String paterno;
private String materno;
public Usuario()
{
super();
}
public Usuario(String clave)
{
super();
cargaUsuarioClave(clave);
}
public void cargaUsuarioClave(String clave)
{
String query = "SELECT * FROM usuario WHERE numeroCliente = '" + clave + "'";
try
{
ResultSet resultado = this.getEstado().executeQuery(query);
while(resultado.next())
{
this.clave = resultado.getString("numeroCliente");
this.nombre = resultado.getString("nombre");
this.paterno = resultado.getString("paterno");
}
}
catch(SQLException e)
{
System.out.println(e.toString());
}
}
public String getClave()
{
return this.clave;
}
public String getNombre()
{
return this.nombre;
}
public String getPaterno()
{
return this.paterno;
}
public String getMaterno()
{
return this.materno;
}
}
AguaSaneamientoSOAPImpl.java
/**
* AguaSaneamientoSOAPImpl.java
*
* This file was auto-generated from WSDL
* by the Apache Axis 1.4 Apr 22, 2006 (06:55:48 PDT) WSDL2Java emitter.
*/
package org.example.www.AguaSaneamiento;
import java.rmi.RemoteException;
import negocio.Usuario;
public class AguaSaneamientoSOAPImpl implements org.example.www.AguaSaneamiento.AguaSaneamiento_PortType{
public org.example.www.AguaSaneamiento.ConsultarServicioPropiedadResponse consultarServicioPropiedad(org.example.www.AguaSaneamiento.ConsultarServicioPropiedadRequest parameters) throws java.rmi.RemoteException
{
return null;
}
public org.example.www.AguaSaneamiento.ConsultaServicioUsuarioResponse consultaServicioUsuario(org.example.www.AguaSaneamiento.ConsultaServicioUsuarioRequest parameters) throws java.rmi.RemoteException {
return null;
}
public org.example.www.AguaSaneamiento.InfoPagosUsuarioResponse infoPagosUsuario(org.example.www.AguaSaneamiento.InfoPagosUsuarioRequest parameters) throws java.rmi.RemoteException {
return null;
}
public org.example.www.AguaSaneamiento.InfoUsuarioResponse infoUsuario(org.example.www.AguaSaneamiento.InfoUsuarioRequest parameters) throws java.rmi.RemoteException
{
Usuario us = new Usuario("2");
InfoUsuario [] infoUser = new InfoUsuario[1];
infoUser[0] = new InfoUsuario("Enrique", "14 Sur", "345", "6");
InfoUsuarioResponse infoRes = new InfoUsuarioResponse(infoUser);
return infoRes;
}
}
我测试了Usuario类,它可以工作,但是,当我在infoUsuaio方法中调用cargaUsuarioClave时,Web服务返回JavaNullPointException。这是回应。
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<soapenv:Fault>
<faultcode>soapenv:Server.userException</faultcode>
<faultstring>java.lang.NullPointerException</faultstring>
<detail>
<ns1:hostname xmlns:ns1="http://xml.apache.org/axis/">SERVER</ns1:hostname>
</detail>
</soapenv:Fault>
</soapenv:Body>
</soapenv:Envelope>
我不知道会出什么问题。
我已经解决了问题,不是源代码,问题是连接器文件;我需要将tath文件复制到我的项目的lib文件夹中。