lunes, 22 de septiembre de 2014

Consultar WS mediante URLConection

El siguiente método muestra como podemos hacer colsulta de un WS usando la clase URLConection (en caso de que se requiera no usar Axis o Jax-WS para consultar Web Service).

Este ejemplo lo hice con Eclipse, por lo que es posible copiar y pegar en el Ide (debería devolver el resultado).

En esta direccion se encuentra el web se llama Calculator  el método que utilizamos de este WS es el Add.


//funcion que consulta un método de un WS via URLConection

private static Hashtable llamaWs(){

Hashtable resWS = new Hashtable();


//ponemos como resultado 1, esto significa que la consulta tuvo error
resWS.put("resultado""1");


//armamos el mensaje SOAP
String reqXML =

""+
    " "+
    " "+
       " "+
          " 5"+
          " 5"+
       "
"+    "
"+ "
";             

StringBuffer request = new StringBuffer();
request.append(reqXML);

String endPoint = "http://ws1.parasoft.com/glue/calculator";

try{
URL url = new URL(endPoint);
URLConnection connection = url.openConnection();



connection.setConnectTimeout(10000); //timeout
connection.setReadTimeout(10000); //timeout
connection.setDoOutput(true);
connection.addRequestProperty("SOAPAction""");
connection.addRequestProperty("Content-Type""text/xml; charset=utf-8");

OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream());
out.write(request.toString());
out.close();


BufferedReader bReader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String decodedString;

StringBuffer resp = new StringBuffer();
while((decodedString = bReader.readLine()) != null)
{
resp.append(decodedString);
}
bReader.close();

String resXML = resp.toString();


System.out.println("resultado del envio:" + resXML);

}catch(Exception e){
System.out.println(" ERROR :" + e);
}

return resWS;

}

Clase que lee un String XML usando JDOM

A cotinuacion una clase que lee XML, podemos modificarla para que nos sirva con nuestro codigo:

XML:

"<S:Envelope xmlns:S=\"http://schemas.xmlsoap.org/soap/envelope/\">"+
"<S:Body>"+
"<ns2:obtenerPromocionesResponse xmlns:ns2=\"http://facade.doll.aplicaciones.clarochile.cl\">" +
         "<ns2:obtenerPromocionesParamOut>" +
         "            <codigo>1</codigo>" +
         "<promociones>" +
         "         <PromotionIVRTO>" +
         "            <codigoIVR>10010</codigoIVR>" +
         "            <opcion>0</opcion>" +
         "         </PromotionIVRTO>" +
         "         <PromotionIVRTO>" +
         "            <codigoIVR>10020</codigoIVR>" +
         "            <opcion>1</opcion>" +
         "         </PromotionIVRTO>" +
         "         <PromotionIVRTO>" +
         "            <codigoIVR>10030</codigoIVR>" +
         "            <opcion>2</opcion>" +
         "         </PromotionIVRTO>" +
         " </promociones>" +
         "         </ns2:obtenerPromocionesParamOut>" +
         "      </ns2:obtenerPromocionesResponse>" +
         "   </S:Body>" +
         "</S:Envelope>" 

import java.io.IOException;
import java.io.StringReader;

import java.util.Iterator;
import java.util.List;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;

import org.xml.sax.InputSource;

public class ParseaXml {

//constructor
public ParseaXml(){}

//metodo parseador
public void leeXML(String tx){


Document doc = null;
InputSource is = new InputSource(new StringReader(tx));
SAXBuilder builder = new SAXBuilder(false);
boolean flag = false;
try{
doc = builder.build(is);
}catch(JDOMException jdome){
System.out.println(jdome);
}catch(IOException ioe){
System.out.println(ioe);
}catch(Exception e){
System.out.println(e);
}

/**
* Se obtiene el elemento raiz
*/

Element raiz = doc.getRootElement();


List<Element> list = raiz.getChildren();
List<Element> listPromociones = null;

while(list.size()!=0){
list = list.get(0).getChildren();
Iterator<Element> itElem = list.iterator();
for(; itElem.hasNext();){
Element e = itElem.next();
System.out.println(e.getName() + " - " + e.getText());
if(e.getName().equals("promociones")){
listPromociones = e.getChildren();
flag = true;
}
}
}

if (flag){

Iterator<Element> itElem = listPromociones.iterator();

for(; itElem.hasNext();){
Element e = itElem.next();
List<Element> prom = e.getChildren();

System.out.println(prom.get(0).getName() + " - " + prom.get(0).getText());
System.out.println(prom.get(1).getName() + " - " + prom.get(1).getText());
}
}

}
}