Humor: Cuando el jefe me dice que necesita un resumen ejecutivo de 1 hoja de una oferta de 600 hojas

Publicado en Humor. Leave a Comment »

Cómo hacer una invocación directa de un Web Service directa con Java

Ayer publicábamos este post:

Cómo verificar si un Web Service es correcto

Y bien, ¿qué pasa si el Web Service que tengo que invocar no es correcto pero tengo control sobre él?

Pues en ese caso tendremos que prescindir de la librería que usemos (por ejemplo CXF) y de las utilidades que nos da (WSDL2Java, proxys dinámicos) y nos tocará hacer una invocación a mano del WebService:

La opción más usual es usar las liberías javax.xml.soap e invocar como indican en este post

// Create SOAP Connection
SOAPConnectionFactory soapConnectionFactory =SOAPConnectionFactory.newInstance();
SOAPConnection soapConnection =soapConnectionFactory.createConnection();
//Send SOAP Message to SOAP Server
String url ="http://localhost:8080/axis2/services/Student?wsdl";
SOAPMessage soapResponse =soapConnection.call(createSOAPRequest(), url);

Construyendo a mano el mensaje SOAP:

private static SOAPMessage createSOAPRequest() throws Exception
{
MessageFactory messageFactory =MessageFactory.newInstance();
SOAPMessage soapMessage =messageFactory.createMessage();
SOAPPart soapPart = soapMessage.getSOAPPart();

/*
Construct SOAP Request Message:
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
xmlns:sam="http://samples.axis2.techdive.in">
<soap:Header/>
<soap:Body>
<sam:getStudentName>
<!–Optional:–>
<sam:rollNumber>3</sam:rollNumber>
</sam:getStudentName>
</soap:Body>
</soap:Envelope>
*/

// SOAP Envelope
SOAPEnvelope envelope = soapPart.getEnvelope();
envelope.addNamespaceDeclaration("sam","http://samples.axis2.techdive.in");

// SOAP Body
SOAPBody soapBody = envelope.getBody();
SOAPElement soapBodyElem =soapBody.addChildElement("getStudentName", "sam");
SOAPElement soapBodyElem1 =soapBodyElem.addChildElement("rollNumber", "sam");
soapBodyElem1.addTextNode("3");

soapMessage.saveChanges();

// Check the input
System.out.println("Request SOAP Message = ");
soapMessage.writeTo(System.out);
System.out.println();
return soapMessage;
}

Os podéis encontrar con que la estructura del mensaje SOAP no puede construirse con el SOAPMessage, en estos casos una simple conexión HTTP puede serviros como en este ejemplo:

String responseString = "";

String outputString = "";

String wsURL = "http://www.deeptraining.com/webservices/weather.asmx";

URL url = new URL(wsURL);

URLConnection connection = url.openConnection();

HttpURLConnection httpConn = (HttpURLConnection)connection;

ByteArrayOutputStream bout = new ByteArrayOutputStream();

String xmlInput =

" <soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:web=\"http://litwinconsulting.com/webservices/\">\n" +

" <soapenv:Header/>\n" +

" <soapenv:Body>\n" +

" <web:GetWeather>\n" +

" <!–Optional:–>\n" +

" <web:City>" + city + "</web:City>\n" +

" </web:GetWeather>\n" +

" </soapenv:Body>\n" +

" </soapenv:Envelope>";

byte[] buffer = new byte[xmlInput.length()];

buffer = xmlInput.getBytes();

bout.write(buffer);

byte[] b = bout.toByteArray();

String SOAPAction =

"http://litwinconsulting.com/webservices/GetWeather";

// Set the appropriate HTTP parameters.

httpConn.setRequestProperty("Content-Length",

String.valueOf(b.length));

httpConn.setRequestProperty("Content-Type", "text/xml; charset=utf-8");

httpConn.setRequestProperty("SOAPAction", SOAPAction);

httpConn.setRequestMethod("POST");

httpConn.setDoOutput(true);

httpConn.setDoInput(true);

OutputStream out = httpConn.getOutputStream();

//Write the content of the request to the outputstream of the HTTP Connection.

out.write(b);

out.close();

//Ready with sending the request.

//Read the response.

InputStreamReader isr =

new InputStreamReader(httpConn.getInputStream());

BufferedReader in = new BufferedReader(isr);

//Write the SOAP message response to a String.

while ((responseString = in.readLine()) != null) {

outputString = outputString + responseString;

}

//Parse the String output to a org.w3c.dom.Document and be able to reach every node with the org.w3c.dom API.

Document document = parseXmlFile(outputString);

NodeList nodeLst = document.getElementsByTagName("GetWeatherResult");

String weatherResult = nodeLst.item(0).getTextContent();

System.out.println("Weather: " + weatherResult);

//Write the SOAP message formatted to the console.

String formattedSOAPResponse = formatXML(outputString);

System.out.println(formattedSOAPResponse);

Las 9 cualidades que comparten las personas que caen siempre bien

Gracias a Jose me llegaba este interesantísimo artículo sobre las cualidades que tienen las personas que caen bien.

Os lo recomiendo, aunque sólo sea como ejercicio para autoevaluarnos y ver como de lejos estamos.

Las características son

  • Prestan atención: para empezar hay que cuidar eso de sacar el móvil mientras te están hablando!
  • Se disculpan sin tener por qué o más bien la forma en la que pides las cosas, creando ese contexto de confianza
  • Son maestros del Jiu-Jitsu social je,je! eso de sin revelar nada personal no va conmigo, yo creo que para que el interlocutor se abra contigo tú tienes que hacerlo también, aunque es verdad que hay maestros en esto!!!
  • No mantienen una pose de poder: imprescindible para una relación a largo plazo!
  • No piden nada: cuando hay un interés detrás de un contacto se acaba notando
  • No critican a los demás: difícil verdad? Qué es criticar y qué es contar la verdad?
  • No se quejan: esto sí que es un lema para mí!!!
  • Dejan que los demás sean mejores que ellos: como nos cuesta esta a los informáticos, verdad? Pues a ponerse 🙂
  • Saben despedirse: no parece tan importante pero pensad un momento en el gusto que da cuando alguien se despide con algo sincero y rememorando lo bien que lo habéis pasado, dan ganas de volver a verle, verdad? 😉

Humor:Comprometidos con el proyecto salga como salga!!!

Publicado en Humor. Leave a Comment »

Cómo verificar si un Web Service es correcto

(Gracias Jose Ignacio 🙂 )

Seguro que en alguna ocasión os habéis encontrado con un problema al invocar un Web Service.

Lo primero en ese caso es ver si es un problema de vuestra librería o del Web Service que no cumple con los estándares.

Una forma sencilla es ir a la web http://www.wsdl-analyzer.com/ y subir el WSDL del Servicio en cuestión

Para que os generará un informe de este estilo (ver ejemplo)

Si necesitáis un informe oficial, la mejor forma de verificar donde está el problema es ir a la web de la organización WS-I (Web Services Interoperability Organization, parte de OASIS), que es una organización encargada de certificar la interoperabilidad para Web Services:

Y bajar el programa oficial para verificar el profile correspondiente (por ejemplo WSDL 1.1) de la parte de deliverables: http://www.ws-i.org/deliverables/workinggroup.aspx?wg=testingtools

Este programa os genera un informe completo en XML con los problemas de ese Web Service.

¿Qué es BridgeIT?

BridgeIT es una utilidad que permite a las aplicaciones web HTML5 para dispositivos móviles acceder de forma directa a las capacidades nativas del dispositivo.

Los que conocéis PhoneGap podéis ver las diferencias respecto a este: con PhoneGap tú construyes una aplicación nativa usando Javascript, con BridgeIT construyes una aplicación HTML5 con acceso a capacidades nativas.

Toda esta funcionalidad en BridgeIT está accesible con un API Javascript sencilla: http://bridgeit.mobi/docs/html/#!/api/bridgeit

BridgeIT soporta iOS, Android y Windows Phone, y de forma native desde Javascript permite acceder a estas funcionalidades:

¿Miguel, esto tenemos que probarlo? 😀

Podéis ver un video de su funcionamiento en: http://bridgeit.mobi/video/bridgeIt-demo-video.mp4

Leer más:

Comparing BridgeIt With PhoneGap/Cordova

Humor:Cuando me piden una nueva funcionalidad para un proyecto de hace 10 años

Publicado en Humor. Leave a Comment »
A %d blogueros les gusta esto: