Java - NullPointerException al intentar leer fichero XML

   
Vista:

NullPointerException al intentar leer fichero XML

Publicado por jose (8 intervenciones) el 01/08/2017 11:52:49
Buenos dias, estoy aprendiendo java a traves de un libro y he llegado a la parte de leer ficheros XML, esto lo hace a traves de la libreria SAX, quizas hay otros metodos mas actuales para leer XMLs pero es el que viene y lo usa posteriormente para construir un framework. La cuestion es que tengo un XML con sus etiquetas, lo que hace es crear una clase por etiqueta. Se aplica un metodo Singleton para que corra una sola instancia. Al ejecutar el codigo para la lectura del XML me arroja una excepcion de tipo NullPointerException que no se porque es. El codigo del XML, de las clases de cada etiqueta y el de la clase principal que muestra el valor de las etiquetas es el siguiente.


connectionpool.xml
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
<connection-pool>
	<jdbc>
		<connection name="MYSQL"
			usr="root"
			pwd=""
		  	driver="com.mysql.jdbc.Driver"
		  	url="jdbc:mysql://localhost/xdb" />
 
		<connection name="ORACLE"
			usr="scoot"
			pwd="tiger"
		  	driver="jdbc.oracle.Driver.OracleDriver"
		  	url="jdbc:oracle:thin:@1521:ORCL" />
 
	</jdbc>
 
	<pools>
		<pool name="P1"
			  connection="MYSQL"
			  minsize="3"
			  maxsize="8"
			  steep="3" />
 
		<pool name="P2"
			  connection="HSQLDB"
			  minsize="10"
			  maxsize="30"
			  steep="5" />
 
		<pool name="P3"
		      connection="ORACLE"
		      minsize="5"
		      maxsize="10"
		      steep="2" />
 
	</pools>
 
</connection-pool>


ConnectionPoolTag.java
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
public class ConnectionPoolTag extends DefaultHandler
{
	private JDBCTag jdbc;
	private PoolsTag pools;
 
	private static ConnectionPoolTag instancia=null;
 
	public ConnectionPoolTag()
	{
		jdbc=new JDBCTag();
		pools=new PoolsTag();
	}
 
	public String toString()
	{
		String x="";
		x+="-- JDBC --\n";
		x+=jdbc.toString();
		x+="-- POOLes --\n";
		x+=pools.toString();
		return x;
	}
 
	public JDBCTag getJdbc() {
		return jdbc;
	}
 
	public void setJdbc(JDBCTag jdbc) {
		this.jdbc = jdbc;
	}
 
	public PoolsTag getPools() {
		return pools;
	}
 
	public void setPools(PoolsTag pools) {
		this.pools = pools;
	}
 
	public static ConnectionPoolTag getInstancia()
	{
 
		try
		{
		if(instancia==null)
		{
			System.out.println("La instancia es nula");
			SAXParserFactory spf=SAXParserFactory.newInstance();
			SAXParser sp=spf.newSAXParser();
			sp.parse("connectionpool.xml", new ConnectionPoolTag());
		}
		System.out.println("Retorna la instancia");
		return instancia;
		}
		catch(Exception ex)
		{
			ex.printStackTrace();
			throw new RuntimeException(ex);
		}
	}
 
	public void startElement(String uri,String localName,String qName,Attributes attributes)
	{
		if(qName.equals("connection-pool"))
		{
			System.out.println("Creo la instancia");
			instancia=new ConnectionPoolTag();
		}
		if(qName.equals("jdbc"))
		{
			jdbc=new JDBCTag();
			instancia.setJdbc(jdbc);
		}
		if(qName.equals("pools"))
		{
			pools=new PoolsTag();
			instancia.setPools(pools);
		}
		if(qName.equals("connection"))
		{
			ConnectionTag c=new ConnectionTag();
			c.setName(attributes.getValue("name"));
			c.setDriver(attributes.getValue("driver"));
			c.setUrl(attributes.getValue("url"));
			c.setUsr(attributes.getValue("usr"));
			c.setPwd(attributes.getValue("pwd"));
			jdbc.addConnectionTag(c);
		}
 
		if(qName.equals("pool"))
		{
			int min=Integer.parseInt(attributes.getValue("minsize"));
			int max=Integer.parseInt(attributes.getValue("maxsize"));
			int steep=Integer.parseInt(attributes.getValue("steep"));
 
			PoolTag c=new PoolTag();
			c.setName(attributes.getValue("name"));
			c.setMinsize(min);
			c.setMaxsize(max);
			c.setSteep(steep);
			pools.addPoolTag(c);
		}
	}
 
	public void endElement(String uri,String localName, String qName){}
	/*public static void setInstancia(ConnectionPoolTag instancia) {
		ConnectionPoolTag.instancia = instancia;
	}*/
 
}

JDBCTag.java

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
public class JDBCTag
{
	private Hashtable<String, ConnectionTag> connection;
 
	public JDBCTag()
	{
		connection=new Hashtable<String,ConnectionTag>();
	}
 
	public ConnectionTag getConnectionTag(String name)
	{
		return connection.get(name);
	}
 
	public void addConnectionTag(ConnectionTag c)
	{
		connection.put(c.getName(),c);
	}
 
	public String toString()
	{
		String x="";
 
		ConnectionTag aux;
		Enumeration<String> e=connection.keys();
		while(e.hasMoreElements())
		{
			aux=connection.get(e.nextElement());
			x+=aux.toString()+"\n";
		}
		return x;
	}
}

ConnectionTag.java
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
49
50
51
52
53
54
public class ConnectionTag
{
	private String name;
	private String usr;
	private String pwd;
	private String url;
	private String driver;
 
	public String toString()
	{
		return name+" ,"+usr+" ,"+pwd+" ,"+url+" ,"+driver;
	}
 
	public String getName() {
		return name;
	}
 
	public void setName(String name) {
		this.name = name;
	}
 
	public String getUsr() {
		return usr;
	}
 
	public void setUsr(String usr) {
		this.usr = usr;
	}
 
	public String getPwd() {
		return pwd;
	}
 
	public void setPwd(String pwd) {
		this.pwd = pwd;
	}
 
	public String getUrl() {
		return url;
	}
 
	public void setUrl(String url) {
		this.url = url;
	}
 
	public String getDriver() {
		return driver;
	}
 
	public void setDriver(String driver) {
		this.driver = driver;
	}
 
}

PoolsTag.java
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
public class PoolsTag
{
	private Hashtable<String, PoolTag> pool;
 
	public String toString()
	{
		String x="";
 
		PoolTag aux;
		for(Enumeration<String> e=pool.keys();e.hasMoreElements();)
		{
			aux=pool.get(e.nextElement());
			x+=aux+"\n";
		}
 
		return x;
	}
 
	public PoolsTag()
	{
		pool=new Hashtable<String,PoolTag>();
	}
 
	public PoolTag getPoolTag(String name)
	{
		return pool.get(name);
	}
 
	public void addPoolTag(PoolTag c)
	{
		pool.put(c.getName(),c);
	}
}

PoolTag.java
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
public class PoolTag
{
	private String name;
	private int minsize;
	private int maxsize;
	private int steep;
 
	public String toString()
	{
		return name+" ,"+minsize+" ,"+maxsize+" ,"+steep;
	}
 
	public String getName() {
		return name;
	}
 
	public void setName(String name) {
		this.name = name;
	}
 
	public int getMinsize() {
		return minsize;
	}
 
	public void setMinsize(int minsize) {
		this.minsize = minsize;
	}
 
	public int getMaxsize() {
		return maxsize;
	}
 
	public void setMaxsize(int maxsize) {
		this.maxsize = maxsize;
	}
 
	public int getSteep() {
		return steep;
	}
 
	public void setSteep(int steep) {
		this.steep = steep;
	}
 
}

TestAccesoDatosXML.java /* PROGRAMA PRINCIPAL
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
public class TestAccesoDatosXML
{
 
	public static void main(String[] args)
	{
		ConnectionPoolTag cp=ConnectionPoolTag.getInstancia();
 
		// obtengo y muestro los datos de la conexion MYSQL
		ConnectionTag c1=cp.getJdbc().getConnectionTag("MYSQL");  // LA EXCEPCION LA MARCA AQUI
		System.out.println(c1.getUsr());
		System.out.println(c1.getPwd());
		System.out.println(c1.getUrl());
		System.out.println(c1.getDriver());
 
		// obtengo y muestro los datos de la conexion ORACLE
		ConnectionTag c2=cp.getJdbc().getConnectionTag("ORACLE");
		System.out.println(c2.getUsr());
		System.out.println(c2.getPwd());
		System.out.println(c2.getUrl());
		System.out.println(c2.getDriver());
 
		//obtengo y muestro los datos del pool p1
		PoolTag p1=cp.getPools().getPoolTag("P1");
		System.out.println(p1.getMinsize());
		System.out.println(p1.getMaxsize());
		System.out.println(p1.getSteep());
 
		//obtengo y muestro los datos del pool p1
		PoolTag p2=cp.getPools().getPoolTag("P2");
		System.out.println(p2.getMinsize());
		System.out.println(p2.getMaxsize());
		System.out.println(p2.getSteep());
	}
 
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

NullPointerException al intentar leer fichero XML

Publicado por Tom (1244 intervenciones) el 01/08/2017 14:20:49
¿ Quien (o más bien qué) te "arroja" la excepción y dónde ?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

NullPointerException al intentar leer fichero XML

Publicado por jose (8 intervenciones) el 01/08/2017 16:46:26
La excepcion la arroja en el fichero TestAccesoDatosXML.java, es el ultimo en la linea

1
ConnectionTag c1=cp.getJdbc().getConnectionTag("MYSQL"); // LA EXCEPCION LA MARCA AQUI
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

NullPointerException al intentar leer fichero XML

Publicado por jose (8 intervenciones) el 02/08/2017 11:01:12
El error que me marca es el siguiente

Exception in thread "main" java.lang.NullPointerException
at libro1.cap10.TestAccesoDatosXML.main(TestAccesoDatosXML.java:18)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

NullPointerException al intentar leer fichero XML

Publicado por jose (8 intervenciones) el 02/08/2017 12:34:43
Ya esta resuelto, el problema lo tenia en que habia importado otra libreria Attributes, no la libreria Attributes de SAX. Me he dado cuenta porque en eclipse el metodo startElement no me aparecia override.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Revisar política de publicidad