"Ante los anuncios de recortes de plantel de la firma de Redmond (Microsoft) un congresal republicano solicitó despedir a los empleados extranjeros que tengan visas temporarias" (http://www.lanacion.com.ar/nota.asp?nota_id=1093865)
En el país de las oportunidades, parece que el Tío Sam no quiere ver cristalizadas las ilusiones de los extranjeros.
Si no naciste en suelo estadounidense, no sirve.
¡Qué suerte que los Estados Unidos bregan contra los regímenes discriminadores y autoritarios del mundo!
¿No será que están tan ocupados liberando a los afganos a los iraquíes, a los pakistaníes (y la lista sigue) que no se dieron cuenta de liberarse ellos mismos?
jueves, 29 de enero de 2009
martes, 27 de enero de 2009
Boludo
- Hola Lucas.
- Hola Alvaro.
- ¿Tienes que hacer algo la próxima semana?
- La verdad es que no, estoy al pedo.
- Perfecto, necesito que me hagas un trabajo de 20 páginas de Teoría y Práctica de la Democracia para el miércoles. Es fácil, ya sabes, los griegos, Roma, Schumpeter, Huntington, Michels.
- Ehhh, bueno, este, si, no sé, en fin..
- Muchas gracias. Sabía que me ibas a ayudar. Un abrazo.
(nota mental: nunca decirle a Alvaro que no tenés nada que hacer)
jueves, 22 de enero de 2009
Guarismo
1. m. Cada uno de los signos o cifras arábigas que expresan una cantidad.
2. Cantidad expresada por medio de dos o más cifras.
"Fecha incorrecta en el salvado por guarismos".
La piedra que tengo encima quedó evidenciada esta mañana cuando desde la página del banco pude comprobar que había rebotado el cheque.
¿Puede ser que en el departamento de administración de una empresa no sepan llenar un cheque?
¿Puedo tener tanta mala leche que esta gente justo se equivoque en un cheque y que justo ése sea el mío?
¡Qué piedra! ¡La puta madre! ¡Qué piedra!
2. Cantidad expresada por medio de dos o más cifras.
"Fecha incorrecta en el salvado por guarismos".
La piedra que tengo encima quedó evidenciada esta mañana cuando desde la página del banco pude comprobar que había rebotado el cheque.
¿Puede ser que en el departamento de administración de una empresa no sepan llenar un cheque?
¿Puedo tener tanta mala leche que esta gente justo se equivoque en un cheque y que justo ése sea el mío?
¡Qué piedra! ¡La puta madre! ¡Qué piedra!
Etiquetas:
cheque,
liquidación
lunes, 19 de enero de 2009
Mi viaje a Guatemala
Esutve diez días en Tierras Mayas.
En la Tierra de los Mayas encontré también que los que descienden de estos son el 65% de la población.
En SU tierra, los descendientes de los Mayas reclaman suelo para trabajar.
Los mestizos odian a los indígenas porque estos últimos no pagan impuestos y usan la escuela y la salud públicas.
Los indígenas odian a los mestizos porque comen todos los días y tienen dinero para pagar impuestos mientras ellos apenas subsisten.
A veces da la impresión de que los ricos y las grandes empresas son los únicos que tienen las cosas claras, están unidos y se llevan todo. Los pobres, sin embargo, peleamos entre nosotros por las migajas.
En la Tierra de los Mayas encontré también que los que descienden de estos son el 65% de la población.
En SU tierra, los descendientes de los Mayas reclaman suelo para trabajar.
Los mestizos odian a los indígenas porque estos últimos no pagan impuestos y usan la escuela y la salud públicas.
Los indígenas odian a los mestizos porque comen todos los días y tienen dinero para pagar impuestos mientras ellos apenas subsisten.
A veces da la impresión de que los ricos y las grandes empresas son los únicos que tienen las cosas claras, están unidos y se llevan todo. Los pobres, sin embargo, peleamos entre nosotros por las migajas.
Etiquetas:
conflicto,
guatemala,
latinoamérica,
viajes
viernes, 16 de enero de 2009
Andrés
Santiago Atitlán, 11 de enero, 12:15.
Me tocan la espalda.
- Ya me gasté el dinero- dice un pequeño.
- ¿En serio? ¿En qué te los gastaste?- contesto con insólito y estúpido tono paternal.
- Una sandía y un ahuacate. Ya almorcé- me cuenta Andrés.
Andrés vive en Santiago. Tiene unos siete años y habla cinco idiomas.
Andrés pide dinero en las calles a los turistas.
Los cinco quetzales que le di aquella mañana se convirtieron en la única comida de su día.
Me tocan la espalda.
- Ya me gasté el dinero- dice un pequeño.
- ¿En serio? ¿En qué te los gastaste?- contesto con insólito y estúpido tono paternal.
- Una sandía y un ahuacate. Ya almorcé- me cuenta Andrés.
Andrés vive en Santiago. Tiene unos siete años y habla cinco idiomas.
Andrés pide dinero en las calles a los turistas.
Los cinco quetzales que le di aquella mañana se convirtieron en la única comida de su día.
Etiquetas:
atitlán,
guatemala,
latinoamérica,
viajes
sábado, 10 de enero de 2009
Ciudad de Guatemala: Indígenas Centroamericanos, Mapa en Relieve y Embajada Invisible de los Estados Unidos
Llegamos el 9 a la tarde tras un viaje de 13 horas. Por tal motivo se nos hizo imposible ver mucho aquel día.
Hoy nos levantamos temprano y aprovechamos la mañana para desayunar y recorrer el museo Popol Vuh (algo así como "Libro de la comunidad") y conocimos bastante del arte y la vida de las culturas precolombinas. Luego paseamos por las zonas 10 y 4, donde encontramos la Torre del Reformador (réplica de la Torre Eiffel).
El Mapa en Relieve fue nuestra primera visita de la tarde. Apreciamos Guatemala en relieve y a escala: muy original.
Luego fuimos a la Plaza Principal donde conocimos el Palacio de Gobierno y la Catedral (aunque no por dentro ya que estaban cerrados). Sin intención participamos de una Marcha Cristiana por la Paz
Algo en común que tenemos todas las republiquetas latinoamericanas (salvo Cuba, único territorio libre de América Latina) son las riquezas naturales y las grandes embajadas de Estados Unidos. Ésta última no puede ser fotografiada.
Hoy nos levantamos temprano y aprovechamos la mañana para desayunar y recorrer el museo Popol Vuh (algo así como "Libro de la comunidad") y conocimos bastante del arte y la vida de las culturas precolombinas. Luego paseamos por las zonas 10 y 4, donde encontramos la Torre del Reformador (réplica de la Torre Eiffel).
El Mapa en Relieve fue nuestra primera visita de la tarde. Apreciamos Guatemala en relieve y a escala: muy original.
Luego fuimos a la Plaza Principal donde conocimos el Palacio de Gobierno y la Catedral (aunque no por dentro ya que estaban cerrados). Sin intención participamos de una Marcha Cristiana por la Paz
Algo en común que tenemos todas las republiquetas latinoamericanas (salvo Cuba, único territorio libre de América Latina) son las riquezas naturales y las grandes embajadas de Estados Unidos. Ésta última no puede ser fotografiada.
Etiquetas:
guatemala,
latinoamérica,
viajes
viernes, 9 de enero de 2009
El Cheque
La.
La liquidación.
La liquidación final.
La liquidación final de mi trabajo anterior.
Ayer encontré el cheque. Me olvidé de cobrarlo. Lleva seis meses vencido.
Qué boludo! No puedo creer que se me haya pasado.
Qué boludo! No puedo creer.
Qué boludo!
Qué.
La liquidación.
La liquidación final.
La liquidación final de mi trabajo anterior.
Ayer encontré el cheque. Me olvidé de cobrarlo. Lleva seis meses vencido.
Qué boludo! No puedo creer que se me haya pasado.
Qué boludo! No puedo creer.
Qué boludo!
Qué.
Etiquetas:
boludo,
cheque,
liquidación
martes, 6 de enero de 2009
Clasificador de Texto (Näive Bayes + Weka): Parte 1
Nota: Esta entrada fue migrada a mi nuevo sitio de Programación Java.
La clasificación de textos puede ser muy útil para varias tareas. Tomemos, por ejemplo, la tarea de distinguir entre distintos sitios de internet cuáles son interesantes para mí o identificar a qué categoría (éstas podrían ser: policiales, deportes, internacionales, etc) pertenece un determinado texto.
Antispam
Para este pequeñíiiiiiiiisimo (y muy simple) ejemplo, vamos a utilizar Näive Bayes (NB) como algoritmo de clasificación por ser uno de los métodos de aprendizaje más fáciles de implementar y uno de los más efectivos para clasificación de textos.
La herramienta para llevar a cabo la clasificación será Weka
Para este caso particular vamos a asumir que hay independencia entre las palabras cosa que NO es cierta. En nuestro caso, este clasificador dará como iguales las frases "no quiero, no quiero, no quiero" y "quiero! quiero! quiero! no! no! no!".
Codificación de ejemplos:
Set de entrenamiento (training-set.csv):
text,class
'hey, buy this from me!',SPAM
'do you want to buy?',SPAM
'I have a party tonight!',NO_SPAM
'today it is a nice weather',NO_SPAM
'you are best',SPAM
'I have a horse',NO_SPAM
'you are my friend',NO_SPAM
'buy, buy, buy',SPAM
'it is spring in the air',NO_SPAM
'do you want to come?',NO_SPAM
Set de pruebas (test-set.csv):
text,class
'you want to buy from me?',?
'usually I run in stairs',?
'buy it now!',?
'buy, buy, buy!',?
'you are the best, buy!',?
'it is spring in the air',?
Filtros:
Abrimos el Weka.
En Filter, presionamos "Choose" y seleccionamos "Miltifilter", ahí mismo, seleccionamos dos filtros más que irán combinados por acción del primero: NominalToString y StringToWordVector.
No voy a explicar mucho este último filtro y lo voy a utilizar con su configuración estándar, pero jueguen con él y prueben distintas cosas.
Den "Apply" para aplicar el filtro.
Clasificación
Una vez hecho esto, vamos a la solapa de "Classify".
Seleccionanos "Naive Bayes" como clasificador (weka -> classifiers -> bayes -> Naive Bayes).
Seleccionamos "Use training set" y "(Nom) class", para que clasifique en función de ese atributo (que es la clase).
100%. Bueno, ya tenemos la primera parte =P.
CONTINUARÁ...
Referencia:
El ejemplo lo saqué de http://www.hakank.org/weka/.
Antispam
Para este pequeñíiiiiiiiisimo (y muy simple) ejemplo, vamos a utilizar Näive Bayes (NB) como algoritmo de clasificación por ser uno de los métodos de aprendizaje más fáciles de implementar y uno de los más efectivos para clasificación de textos.
La herramienta para llevar a cabo la clasificación será Weka
Para este caso particular vamos a asumir que hay independencia entre las palabras cosa que NO es cierta. En nuestro caso, este clasificador dará como iguales las frases "no quiero, no quiero, no quiero" y "quiero! quiero! quiero! no! no! no!".
Codificación de ejemplos:
Set de entrenamiento (training-set.csv):
text,class
'hey, buy this from me!',SPAM
'do you want to buy?',SPAM
'I have a party tonight!',NO_SPAM
'today it is a nice weather',NO_SPAM
'you are best',SPAM
'I have a horse',NO_SPAM
'you are my friend',NO_SPAM
'buy, buy, buy',SPAM
'it is spring in the air',NO_SPAM
'do you want to come?',NO_SPAM
Set de pruebas (test-set.csv):
text,class
'you want to buy from me?',?
'usually I run in stairs',?
'buy it now!',?
'buy, buy, buy!',?
'you are the best, buy!',?
'it is spring in the air',?
Filtros:
Abrimos el Weka.
En Filter, presionamos "Choose" y seleccionamos "Miltifilter", ahí mismo, seleccionamos dos filtros más que irán combinados por acción del primero: NominalToString y StringToWordVector.
No voy a explicar mucho este último filtro y lo voy a utilizar con su configuración estándar, pero jueguen con él y prueben distintas cosas.
Den "Apply" para aplicar el filtro.
Clasificación
Una vez hecho esto, vamos a la solapa de "Classify".
Seleccionanos "Naive Bayes" como clasificador (weka -> classifiers -> bayes -> Naive Bayes).
Seleccionamos "Use training set" y "(Nom) class", para que clasifique en función de ese atributo (que es la clase).
100%. Bueno, ya tenemos la primera parte =P.
CONTINUARÁ...
Referencia:
El ejemplo lo saqué de http://www.hakank.org/weka/.
Etiquetas:
java,
machine learning,
näive bayes,
weka
Snowball Stemmer en Español para Weka
Nota: Esta entrada fue migrada a mi nuevo sitio de Programación Java.
Para utilizar Snowball Stemmer en Español con Weka deben:
a) Bajar el Jar de Snowball (http://www.cs.waikato.ac.nz/~ml/weka/stemmers/snowball.jar).
b) Guardarlo en el directorio raíz del Weka.
c) Agregar el texto en negrita a la siguiente entrada en el archivo RunWeka.ini:
cp=%CLASSPATH%;snowball.jar
Al seleccionar el filtro "StringToWordVector" aparece "Stemmer Chose". Al hacer click sobre el botón "Choose" se despliegan distintas posibilidades entre la que está "Snowball". Editamos la única propiedad que tiene: en el "text box" colocamos "spanish" (sin las comillas).
Cuando uno utiliza Stemmer + Blacklist, el filtro "StringToWordVector" aplica primero el stemming y luego filtra con la lista de palabras prohibidas.
Deben tener en cuenta, entonces, escribir las raíces de las palabras en la blacklist, si se va a utilizar esta modalidad.
Teniendo en cuenta esta restricción, lo que pueden hacer es primero filtrar las palabras de la list negra (por fuera del Weka) y luego aplicar stemmer sin setearle la opción antes mencionada.
Link en inglés: http://weka.sourceforge.net/wekadoc/index.php/en:Stemmers_(3.5.2)
a) Bajar el Jar de Snowball (http://www.cs.waikato.ac.nz/~ml/weka/stemmers/snowball.jar).
b) Guardarlo en el directorio raíz del Weka.
c) Agregar el texto en negrita a la siguiente entrada en el archivo RunWeka.ini:
cp=%CLASSPATH%;snowball.jar
Al seleccionar el filtro "StringToWordVector" aparece "Stemmer Chose". Al hacer click sobre el botón "Choose" se despliegan distintas posibilidades entre la que está "Snowball". Editamos la única propiedad que tiene: en el "text box" colocamos "spanish" (sin las comillas).
Cuando uno utiliza Stemmer + Blacklist, el filtro "StringToWordVector" aplica primero el stemming y luego filtra con la lista de palabras prohibidas.
Deben tener en cuenta, entonces, escribir las raíces de las palabras en la blacklist, si se va a utilizar esta modalidad.
Teniendo en cuenta esta restricción, lo que pueden hacer es primero filtrar las palabras de la list negra (por fuera del Weka) y luego aplicar stemmer sin setearle la opción antes mencionada.
Link en inglés: http://weka.sourceforge.net/wekadoc/index.php/en:Stemmers_(3.5.2)
Pasos para utilizar JBossWS Con Seguridad a Nivel Mensaje
Nota: Esta entrada fue migrada a mi nuevo sitio de Programación Java.
Instalar JBossAS 4.2.3.GA
Para instalar JbossAS 4.2.3.GA:
• Ingresar a http://www.jboss.org/jbossas/downloads/
• Buscar la versión deseada (en nuestro caso, 4.2.3.GA).
• Hacer click en “Download”
• Descomprimir el zip en algún lugar del disco siendo ésa, nuestra carpeta de instalación (desde acá, nos referiremos a la carpeta de instalación de JBoss como JBOSS_HOME)
Instalar JbossWS 3.0.5.GA
La versión 4.2.3.GA de JBoss viene con jbossws-3.0.1.GA.
Para instalar la última versión de JbossWS (al día de hoy, 3.0.5.GA) debemos:
• Ingresar a http://www.jboss.org/jbossws/downloads/
• Descargar la versión deseada (en nuestro caso, native-3.0.5.GA)
• Hacer click en “Download”
• Descomprimir el zip en alguna carpeta temporal
• Copiar el archivo ant.properties.example a ant.properties.
• Modificar el archivo ant.properties con los datos en negrita:
#
# A sample ant properties file
#
# Optional JBoss Home
jboss422.home=@jboss422.home@
jboss423.home=JBOSS_HOME
jboss424.home=@jboss424.home@
jboss500.home=@jboss500.home@
jboss501.home=@jboss501.home@
jboss510.home=@jboss510.home@
# The JBoss server under test. This can be [jboss422|jboss423|jboss424|jboss500|jboss501|jboss510]
jbossws.integration.target=jboss423
# The JBoss settings
jboss.server.instance=all
jboss.bind.address=localhost
# JBoss Repository
#jboss.repository=file:/home/tdiesler/svn/jboss.local.repository
jboss.repository=http://repository.jboss.org
# JBoss JMX invoker authentication
#jmx.authentication.username=admin
#jmx.authentication.password=admin
# Java Compiler options
javac.debug=yes
javac.deprecation=no
javac.fail.onerror=yes
javac.verbose=no
• Parado en el directorio raíz, ejecutar: ant deploy-jboss423
Creando un Proyecto Web Service
En principio, estas indicaciones son para el uso de WTP 2.0.4 (Eclipse plugin). Como, en nuestro entorno, también usamos MyEclipse, voy a tratar de hacerlo lo más genérico posible.
• Crear un proyecto Web (en mi caso, lo nombré test-jbossws).
• Crear la clase example.impl.SampleServiceImpl y la clase example.bean.Person:
package example.impl;
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import org.jboss.ws.annotation.EndpointConfig;
import example.bean.Person;
@WebService
@SOAPBinding ( parameterStyle = SOAPBinding.ParameterStyle.BARE )
public class SampleServiceImpl {
@WebMethod
public Person getPerson(String dni) {
return new Person(dni, "Peter Capusotto", 45);
}
}
package example.bean;
public class Person {
private String dni;
private String name;
private int yearsOld;
public Person(){super();}
public Person(String dni, String name, int yearsOld) {
this.dni = dni;
this.name = name;
this.yearsOld = yearsOld;
}
public String getDni() {
return dni;
}
public void setDni(String dni) {
this.dni = dni;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getYearsOld() {
return yearsOld;
}
public void setYearsOld(int yearsOld) {
this.yearsOld = yearsOld;
}
@Override
public String toString() {
return this.name + " DNI: " + this.dni;
}
}
• Para que el proyecto compile, se deben agregar los siguientes jars:
o %JBOSS_HOME%/server/all/lib/jboss-native-jaxws.jar
o %JBOSS_HOME%/server/all/deploy/jbossws.sar/jboss-native-core.jar
Importante: los jars no deben ser empaquetados en el war.
o MyEclipse: para no exportar los jars
• Pararse sobre el proyecto y dar click derecho
• Propiedades -> MyEclipse ->Web
• Seleccionar el tab “Deployment”
• Tildar “Ignore dependant Java projects…” y destildar el resto.
• Levantar el servidor.
• Ir a algún navegador y ejecutar: http://localhost:8080/test-jbossws?wsdl
• Deberían ver la definición del servicio (un XML).
Creando un Cliente de Web Service
• Crear un proyecto Java. Yo lo nombré test-jbossws-client.
• Dentro del proyecto, ejecutar %JBOSS_HOME%/bin/wsconsume.bat –k –o http://localhost:8080/test-jbossws?wsdl
• Copiar la estructura que se ha creado dentro de “generated” a la carpeta donde tenemos el resto de los fuentes.
• Crear un testcase. Yo lo llamé example.WSTest:
package example;
import javax.xml.ws.Service;
import junit.framework.TestCase;
import example.impl.Person;
import example.impl.SampleServiceImpl;
import example.impl.SampleServiceImplService;
public class WSTest extends TestCase {
public void testWS() {
System.out.println("Starting Test...");
try {
Service service = new SampleServiceImplService();
SampleServiceImpl port = service.getPort(example.impl.SampleServiceImpl.class);
Person person = port.getPerson("27668277");
assertNotNull(person);
assertEquals("27668277",person.getDni());
System.out.printf("Name: %s, DNI: %s, Age: %d\n", person.getName(),person.getDni(),person.getYearsOld());
} catch (Exception e) {
e.printStackTrace();
assertNull(e.getMessage(),e);
} finally {
System.out.println("...The End");
}
}
}
• Agregar los jars:
o %JBOSS_HOME%/client/jaxb-api.jar
o %JBOSS_HOME%/client/jbossall-client.jar
o %JBOSS_HOME%/client/jboss-native-client.jar
o %JBOSS_HOME%/client/jboss-native-jaxws.jar
o Mail.jar
o Xalan.jar
o xercesImpl.jar
• Correr el caso de prueba.
• El test da “verde”.
Agregando Seguridad
Agregando seguridad en el servidor
En la clase que define el Web Service, agregar la annotation @EndpointConfig como muestra el ejemplo:
…
@WebService
@SOAPBinding ( parameterStyle = SOAPBinding.ParameterStyle.BARE )
@EnpointConfig( configName = “Standard WSSecurity Endpoint” )
public class SampleServiceImpl {
…
Dentro de la carpeta WEB-INF se debe agregar el archivo jboss-wsse-server.xml:
C:\workspace-ws\test-jbossws-certificates\wssop.keystore
wssoppwd
C:\workspace-ws\test-jbossws-certificates\wssop.trustore
wssoppwd
Agregando seguridad en el cliente
En la carpeta donde están los fuentes (o bien en la raíz del proyecto) debemos crear la carpeta META-INF con dos archivos: jboss-wsse-client.xml y standard-jaxws-client-config.xml.
standard-jaxws-client-config.xml:
xsi:schemaLocation="urn:jboss:jaxws-config:2.0 jaxws-config_2_0.xsd">
Standard WSSecurity Client
##SOAP11_HTTP
WSSecurityHandlerOutbound
org.jboss.ws.extensions.security.jaxws.WSSecurityHandlerClient
jboss-wsse-client.xml:
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.jboss.com/ws-security/config
http://www.jboss.com/ws-security/schema/jboss-ws-security_1_0.xsd">
C:\workspace-ws\test-jbossws-certificates\user1.keystore
user1pwd
C:\workspace-ws\test-jbossws-certificates\user1.keystore
C:\workspace-ws\test-jbossws-certificates\user1.trustore
user1pwd
alias="user1"/>
Referencias
Instalación JbossWS: http://jbossws.jboss.org/mediawiki/index.php?title=Install_JBossWS
Para instalar JbossAS 4.2.3.GA:
• Ingresar a http://www.jboss.org/jbossas/downloads/
• Buscar la versión deseada (en nuestro caso, 4.2.3.GA).
• Hacer click en “Download”
• Descomprimir el zip en algún lugar del disco siendo ésa, nuestra carpeta de instalación (desde acá, nos referiremos a la carpeta de instalación de JBoss como JBOSS_HOME)
Instalar JbossWS 3.0.5.GA
La versión 4.2.3.GA de JBoss viene con jbossws-3.0.1.GA.
Para instalar la última versión de JbossWS (al día de hoy, 3.0.5.GA) debemos:
• Ingresar a http://www.jboss.org/jbossws/downloads/
• Descargar la versión deseada (en nuestro caso, native-3.0.5.GA)
• Hacer click en “Download”
• Descomprimir el zip en alguna carpeta temporal
• Copiar el archivo ant.properties.example a ant.properties.
• Modificar el archivo ant.properties con los datos en negrita:
#
# A sample ant properties file
#
# Optional JBoss Home
jboss422.home=@jboss422.home@
jboss423.home=JBOSS_HOME
jboss424.home=@jboss424.home@
jboss500.home=@jboss500.home@
jboss501.home=@jboss501.home@
jboss510.home=@jboss510.home@
# The JBoss server under test. This can be [jboss422|jboss423|jboss424|jboss500|jboss501|jboss510]
jbossws.integration.target=jboss423
# The JBoss settings
jboss.server.instance=all
jboss.bind.address=localhost
# JBoss Repository
#jboss.repository=file:/home/tdiesler/svn/jboss.local.repository
jboss.repository=http://repository.jboss.org
# JBoss JMX invoker authentication
#jmx.authentication.username=admin
#jmx.authentication.password=admin
# Java Compiler options
javac.debug=yes
javac.deprecation=no
javac.fail.onerror=yes
javac.verbose=no
• Parado en el directorio raíz, ejecutar: ant deploy-jboss423
Creando un Proyecto Web Service
En principio, estas indicaciones son para el uso de WTP 2.0.4 (Eclipse plugin). Como, en nuestro entorno, también usamos MyEclipse, voy a tratar de hacerlo lo más genérico posible.
• Crear un proyecto Web (en mi caso, lo nombré test-jbossws).
• Crear la clase example.impl.SampleServiceImpl y la clase example.bean.Person:
package example.impl;
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import org.jboss.ws.annotation.EndpointConfig;
import example.bean.Person;
@WebService
@SOAPBinding ( parameterStyle = SOAPBinding.ParameterStyle.BARE )
public class SampleServiceImpl {
@WebMethod
public Person getPerson(String dni) {
return new Person(dni, "Peter Capusotto", 45);
}
}
package example.bean;
public class Person {
private String dni;
private String name;
private int yearsOld;
public Person(){super();}
public Person(String dni, String name, int yearsOld) {
this.dni = dni;
this.name = name;
this.yearsOld = yearsOld;
}
public String getDni() {
return dni;
}
public void setDni(String dni) {
this.dni = dni;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getYearsOld() {
return yearsOld;
}
public void setYearsOld(int yearsOld) {
this.yearsOld = yearsOld;
}
@Override
public String toString() {
return this.name + " DNI: " + this.dni;
}
}
• Para que el proyecto compile, se deben agregar los siguientes jars:
o %JBOSS_HOME%/server/all/lib/jboss-native-jaxws.jar
o %JBOSS_HOME%/server/all/deploy/jbossws.sar/jboss-native-core.jar
Importante: los jars no deben ser empaquetados en el war.
o MyEclipse: para no exportar los jars
• Pararse sobre el proyecto y dar click derecho
• Propiedades -> MyEclipse ->Web
• Seleccionar el tab “Deployment”
• Tildar “Ignore dependant Java projects…” y destildar el resto.
• Levantar el servidor.
• Ir a algún navegador y ejecutar: http://localhost:8080/test-jbossws?wsdl
• Deberían ver la definición del servicio (un XML).
Creando un Cliente de Web Service
• Crear un proyecto Java. Yo lo nombré test-jbossws-client.
• Dentro del proyecto, ejecutar %JBOSS_HOME%/bin/wsconsume.bat –k –o http://localhost:8080/test-jbossws?wsdl
• Copiar la estructura que se ha creado dentro de “generated” a la carpeta donde tenemos el resto de los fuentes.
• Crear un testcase. Yo lo llamé example.WSTest:
package example;
import javax.xml.ws.Service;
import junit.framework.TestCase;
import example.impl.Person;
import example.impl.SampleServiceImpl;
import example.impl.SampleServiceImplService;
public class WSTest extends TestCase {
public void testWS() {
System.out.println("Starting Test...");
try {
Service service = new SampleServiceImplService();
SampleServiceImpl port = service.getPort(example.impl.SampleServiceImpl.class);
Person person = port.getPerson("27668277");
assertNotNull(person);
assertEquals("27668277",person.getDni());
System.out.printf("Name: %s, DNI: %s, Age: %d\n", person.getName(),person.getDni(),person.getYearsOld());
} catch (Exception e) {
e.printStackTrace();
assertNull(e.getMessage(),e);
} finally {
System.out.println("...The End");
}
}
}
• Agregar los jars:
o %JBOSS_HOME%/client/jaxb-api.jar
o %JBOSS_HOME%/client/jbossall-client.jar
o %JBOSS_HOME%/client/jboss-native-client.jar
o %JBOSS_HOME%/client/jboss-native-jaxws.jar
o Mail.jar
o Xalan.jar
o xercesImpl.jar
• Correr el caso de prueba.
• El test da “verde”.
Agregando Seguridad
Agregando seguridad en el servidor
En la clase que define el Web Service, agregar la annotation @EndpointConfig como muestra el ejemplo:
…
@WebService
@SOAPBinding ( parameterStyle = SOAPBinding.ParameterStyle.BARE )
@EnpointConfig( configName = “Standard WSSecurity Endpoint” )
public class SampleServiceImpl {
…
Dentro de la carpeta WEB-INF se debe agregar el archivo jboss-wsse-server.xml:
Agregando seguridad en el cliente
En la carpeta donde están los fuentes (o bien en la raíz del proyecto) debemos crear la carpeta META-INF con dos archivos: jboss-wsse-client.xml y standard-jaxws-client-config.xml.
standard-jaxws-client-config.xml:
jboss-wsse-client.xml:
xsi:schemaLocation="http://www.jboss.com/ws-security/config
http://www.jboss.com/ws-security/schema/jboss-ws-security_1_0.xsd">
Referencias
Instalación JbossWS: http://jbossws.jboss.org/mediawiki/index.php?title=Install_JBossWS
Etiquetas:
java,
jboss,
keystore,
trustore,
web services,
ws security
Suscribirse a:
Entradas (Atom)