crear WS con Apache CXF

En mis nuevas aventuras con java, lo primero fue hacer unos WS con CXF, la verdad no es muy complejo… Para empezar hay que tener algunas cosas en nuestro classpath. Como las librerías de Apache CXF y Spring.

Luego creas un nuevo proyecto Web Dinámico, Uso Eclipse como Ide de Desarrollo. Lo primero es agregar la configuración al archivo Web.xml del proyecto.

hoy 1

Aquí defino la ruta en que mi WS va a funcionar y cual es el patrón de URL que va a usar, como ven hago referencia a otro archivo, llamado bean.xml,  ahí defino el endpoint y la clase que implementa mi servicio

 

hoy 2

 

Luego hago un Dto, que define mis entradas y salidas.

package com.test;
import java.io.Serializable;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
@XmlRootElement(name = "Ejemplo")
@XmlType(propOrder = {"texto"})
public class EjemploDto implements Serializable {
 
 /**
 * 
 */
 private static final long serialVersionUID = -2385107524861075983L;
 private String texto;
 
 @XmlElement(required = true, name = "texto")
 public String getTexto()
 {
 return this.texto;
 }
 
 public void setTexto(String texto)
 {
 this.texto = texto;
 }
 
 
}

Defino que elementos son parte de los XML que se usarán. Luego hago una interface que se usará como contrato.

package com.test;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
@WebService
public interface ITest {
 
 @WebMethod
 public EjemploDto holaMundo(
 @WebParam(name = "Nombre") EjemploDto nombre
 );
}

y luego la clase que implementa.

package com.test;
import javax.jws.WebParam;
import javax.jws.WebService;
@WebService(endpointInterface = "com.test.ITest", serviceName = "WSTest")
public class TestImpl implements ITest {
 
 public EjemploDto holaMundo(
 @WebParam(name = "Nombre") EjemploDto nombre
 )
 {
 nombre.setTexto("hola mundo");
 return nombre;
 }
}

Luego a hacer deploy, en mi caso sobre Jboss y la salida queda así

hoy 3

 

Suerte 🙂

 

 

De vuelta a Java…

A partir de hoy dejo de lado en mundo .net y vuelvo a Java, tengo varios desafíos en Java y particularmente en struts y Spring, así que empezaré a postear cosas de eso.

En particular Spring que es la plataforma que ocupará más mi tiempo ahora. Voy a partir probablemente con el módulo MVC de Spring y de ahí al contenedor de inversión de dependencias.

A ver como me va 🙂

Usando Naming Service en cluster WebLogic

Estaba revisando como utilizar la potencialidad de un cluster en Weblogic y me tope con este código..

Hashtable ht = new Hashtable();
ht.put(Context.INITIAL_CONTEXT_FACTORY,
“weblogic.jndi.WLInitialContextFactory”);
ht.put(Context.PROVIDER_URL, “t3://acmeCluster:7001”);
try {
Context ctx = new InitialContext(ht);
// Do the client’s work
}
catch (NamingException ne) {
// A failure occurred
}
finally {
try {ctx.close();}
catch (Exception e) {
// a failure occurred
}
}

 

revisando un poco de lectura ligera, esto se puede utilizar para distribuir la carga de tu aplicación en los nodos del weblogic, aunque no tengo muy claro como hacerlo aún…  llegue a esto revisando un error en la ejecución de Naming Service en OIM, y ahi descubrí que realmente la aplicación ejecuta sus procesos de forma distribuida en el nodo.

Ejecutar consulta en DB2 con java…termina en ClassNotFoundException

Me ha tocado tener que ejecutar algunas cosas en db2 y la verdad odie el JDBC de DB2,

Partiendo por los jar que hay que importar al proyecto….. la documentación de IBM no me ayudo mucho. primero instalen el cliente db2, con eso tendrán los jar que necesitan.

se necesitan los siguientes

db2java.jar

db2jcc.jar

db2java.zip

db2jcc_license_cu.jar

db2jcc4.jar

Ahora, mi principal problema fue que no me reconocía la clase del JDBC, pero al ejecutar en mi equipo si, esto se debe a que funciona distinto si es window o unix, finalmente quedo así

public ResultSet execute(String strSql) throws SQLException, ClassNotFoundException, ParserConfigurationException, SAXException, IOException
{
             ResultSet rs = null;
            Connection conn = null;
           System.out.println(“CARGANDO CLASE DE CONECION VPI”);
       DataConfig config = this.readConfig();// esta clase la  uso pata leer paremetro a un DTO desde un XML
     //Class.forName(“COM.ibm.db2.jdbc.app.DB2Driver”); PARA WIN

try
{
Class.forName(“com.ibm.db2.jcc.DB2Driver”); //PARA UNIX
System.out.println(“CARGADA..”);
String url = “jdbc:db2://”+config.getServer()+”:”+config.getPort()+”/” +config.getDatabase();
conn = DriverManager.getConnection(url,config.getUser(),config.getPass());
Statement st = conn.createStatement();
rs = st.executeQuery(strSql);
}
catch(Exception ex)
{
System.out.println(“========================”);
ex.printStackTrace();
System.out.println(“========================”);
TisLogger.storage(ex.getMessage());
TisLogger.storage(“Error al obtener resultados desde DB2”);
}
finally
{
//conn.close();
}
return rs;
}

 

Básicamente tuve que cambiar la clase del JDBC segun plataforma, porque me daba un ClassNotFoundException…

 

llamando una URL desde Java

mmm lo que mejor me ha resultado a sido con esto….

URL strUrl = new URL(“http://www.google.cl”);
URLConnection url = strUrl.openConnection();
BufferedReader br = new BufferedReader(new InputStreamReader(url.getInputStream()));
String str =br.readLine();
while (str!=null)
{
str = br.readLine();
System.out.println(str);
}

FTP en Java

Enviar un archivo por FTP en java 🙂

 public class TisFTP {
private String user = “”;
private String pass = “”;
private String server = “”;
private String remotePath = “”;
private String localPath = “”;

/**
* Constructor que puede lee un objeto de configuracion para iniciar el FTP
*
* @param config – objeto de configuración de ftp
*
* ========================================
*/
public TisFTP(TisFtpConfig config)
{
user = config.getUser();
pass = config.getPass();
server = config.getServer();
remotePath = config.getRemotePath();
localPath = config.getLocalPath();
}

/**
* Envia un archivo al FTP destino del Archivo de Interfaz
* ==========================================
*/
public void sendFtpFile() throws TisAdapterException
{
try {
URL url = new URL(“ftp://” + user + “:” + pass + “@” + server + remotePath + “;type=i”);
URLConnection urlc = url.openConnection();
OutputStream os = urlc.getOutputStream();
BufferedReader br = new BufferedReader(new FileReader(localPath));

int c;
while ((c = br.read()) != -1) {
os.write(c);
}
os.flush();
os.close();
br.close();

} catch (Exception ex) {
//TisLogger.storage(ex.toString());
throw new TisAdapterException(ex.toString());
}
}

}