domingo, octubre 14, 2007

Java ME... HTTPS.... XML.... POST

Hoy me pidieron algo especial... se supone que debia conectar una aplicacion en HTTPS que recibia los parametros por medio de un POST en XML atravez de una interfaz Java ME.. esa cosa para celulares y Palms...

A mi siempre me ha latido intentantar hacer cosas nuevas... asi que me puse manos a la obra y empeze a desarrollar con el poderoso NetBeans... obvio... a manita... por que el VisualMidlet.. siempre me bloquea ciertas partes de codigo que quiero modificar... y eso de borrar los bloqueos.. da flojera...

Lo primero que me causo problema... fue con el certificado HTTPS.... por que los dispositivos mobiles.. no lo tienen asi que lo marcan como invalido... solo las plataformas de java mas recientes.. ya lo traen como valido.. asi que.. no se como volver ese certificado valido... o como saltarme esa excepcion... en fin.. si alguien sabe como.. me avisa... recuerden que es con JavaME.. ahi no hay TrustManager...

Asi que decidi hacer un puente con una aplicacion JSP... para que esta se conectara al servidor... al jefe no le agrado mucho la idea... pero al nadie dar una mejor solucion... tuvimos que implementarla.. y sumar costos al programa..

Todo iba bien.. excepto por que no tenia ni la menor idea de como leer un XML.... me creeran que lo intente hacer con puros substring?? toy loko.... en fin... ya investigue un poquito.. y descubri javax.xml.parsers... una fregadera que decodifca los documentos XML a un sistema de noditos.. ( un nodito es como el pedazo de tu arbol genealogico.. papa.. mama.. hijo... cada uno tiene hijos.. y padres.. ) en fin... pondre un ejemplo por si algun loko como yo anda investigando estas cosas raras..

public String[] categorias(String s) throws Exception{
javax.xml.parsers.DocumentBuilderFactory builder ;
javax.xml.parsers.DocumentBuilder doc ;
org.w3c.dom.Document d;

builder = javax.xml.parsers.DocumentBuilderFactory.newInstance();
doc = builder.newDocumentBuilder();
d = doc.parse(xmlPOSTIS(s));
java.util.LinkedList cat = new java.util.LinkedList();
org.w3c.dom.NodeList lista = d.getElementsByTagName("cardSKU");
for (int i=0;i
String aux =
lista.item(i).getAttributes().getNamedItem("category").getNodeValue();

if (!cat.contains(aux)) {
cat.add(aux);
}
}
String aux[] = new String[cat.size()];
for (int i=0;i
aux[i] = (String)cat.get(i);
}
return aux;
}


La magia empieza a partir de d.getElementsByTag(""); .... todo lo demas son declaraciones... en esa sentencia se buscan los nodos del XML que se llamen como indicamos

Nos regresa NodeList... de ese ya lo recorremos para encontrar cada elemento con su propiedad item(), y a su vez este tiene atibutos que son id y correo... cada uno de estos nodos puede tener hijos.. que seria otra NodeList... y asi sucesivamente...

El valor de los argumentos del nodo se llama getnodeValue()... para id y name.. y para el valor del texto dentro de un nodo... se llama getTextContent()... bueno.. espero haber ayudado a alguien... y espero que alguien me diga que onda con los certificados del HTTPS en java ME

2 comentarios:

Aque dijo...

Hola Daniel, lei lo que contas sobre leer xml con java..no se si lo mio es parecido ,pero estoy como loca porque tengo q enviar parametros a una url via post, a una url https, mi duda es como recibir la respuesta del servidor.Osea yo envio estos datos a una entidad y esta me contesta con un archivo XML. Tenes idea como lo leo? y como grabo los datos que me trae en una tabla? mejor dicho como identificar cada valor..Gracias

Alex Guerra (Xela) dijo...

Aquí tenéis más ejemplos de tratamiento de XML con DOM en Java. Daniel, te puede ser útil usar XPath:

Java y XML: DOM - Ejemplos