Translate

Mostrando las entradas con la etiqueta CXF. Mostrar todas las entradas
Mostrando las entradas con la etiqueta CXF. Mostrar todas las entradas

lunes, 16 de junio de 2014

Hacer un proyecto con cxf, rest o soap con maven

Si recuerdan el post anterior, sabrán que ahora vamos a hacer un proyecto rest con cxf, pero vamos a usar m2e y jetty con el plugin "run jetty run".

Esto va a ser muy facil, vamos a nuestra queriada IDE eclipse, con los plugines m2e y run jetty run instalados. Y vamos a crear un nuevo proyecto maven:









Y luego clean install:


Y luego a correr el servicio:

Y ahora si ponemos en el browser http://localhost:8080/rest/hello/echo/HolaBlog veremos lo siguiente:
HolaBlog

Y Listo!!

domingo, 15 de junio de 2014

Hacer un proyecto con cxf, rest o soap con maven

Hace muy poco tuve que hacer un proyecto rest con maven y decidí utilizar Apache CXF y la verdad es que quede sorprendido por la facilidad. Y para que vean que no miento, les dejo la receta:

Ingredientes:

  • Abundante maven
  • IDE a gusto (yo voy a utilizar eclipse) 
  • Servidor web Jetty o tomcat, pueden utilizar el plugin de eclipse “run jetty run” si usa jetty. 


Para hacerlo más divertido vamos a hacer el proyecto soap con maven solamente y luego para el proyecto rest vamos a utilizar el plugin m2e de eclipse.

Vamos a hacer un proyecto soap con Apache CXF, para esto nos posicionamos en la carpeta que queremos crear el proyecto y luego ejecutamos:

 $ mvn archetype:generate
[INFO] Scanning for projects...
[INFO]                                                                        
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] >>> maven-archetype-plugin:2.2:generate (default-cli) @ standalone-pom >>>
[INFO]
[INFO] <<< maven-archetype-plugin:2.2:generate (default-cli) @ standalone-pom <<<
[INFO]
[INFO] --- maven-archetype-plugin:2.2:generate (default-cli) @ standalone-pom ---
[INFO] Generating project in Interactive mode
[INFO] No archetype defined. Using maven-archetype-quickstart (org.apache.maven.archetypes:maven-archetype-quickstart:1.0)
Choose archetype:
 …

Ahora debemos elegir el archetype en nuestro caso es :
368: remote -> org.apache.cxf.archetype:cxf-jaxws-javafirst (Creates a project for developing a Web service starting from Java code)

Y luego elegimos la versión (hacer enter si quieren la ultima)
Y luego ingresar el nombre del proyecto, paquete y número de versión:

Define value for property 'groupId': : com.prueba
Define value for property 'artifactId': : soap
Define value for property 'version':  1.0-SNAPSHOT: :
Define value for property 'package':  com.prueba: :
Confirm properties configuration:
groupId: com.prueba
artifactId: soap
version: 1.0-SNAPSHOT
package: com.prueba
Confirm properties configuration:
groupId: com.prueba
artifactId: soap
version: 1.0-SNAPSHOT
package: com.prueba
 Y: : y
[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Archetype: cxf-jaxws-javafirst:3.0.0
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: groupId, Value: com.prueba
[INFO] Parameter: artifactId, Value: soap
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Parameter: package, Value: com.prueba
[INFO] Parameter: packageInPathFormat, Value: com/prueba
[INFO] Parameter: package, Value: com.prueba
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Parameter: groupId, Value: com.prueba
[INFO] Parameter: artifactId, Value: soap
[INFO] project created from Archetype in dir: /home/emanuel/Projects/restVsSoap/soap
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 5:05:03.940s
[INFO] Finished at: Sun Jun 15 18:17:02 ART 2014
[INFO] Final Memory: 14M/207M
[INFO] ------------------------------------------------------------------------
$ cd soap
$ mvn clean install
Al finalizar puedes importarlo a eclipse o cualquier IDE es recomendable utilizar m2e.
Ahora bien el reto era no utilizar IDE, por lo tanto vamos a levantar el tomcat desde maven:
$ mvn tomcat:run

Y Listo!!
Vamos a un browser e ingresamos a http://localhost:8080/soap
Y verán lo siguiente:

Available SOAP services:
HelloWorld
  • sayHi
Endpoint address: http://localhost:8080/soap/HelloWorld
WSDL : {http://prueba.com/}HelloWorldImplService
Target namespace: http://prueba.com/


Available RESTful services:


En el próximo post vamos con REST.

sábado, 28 de septiembre de 2013

Getting Started Apache CXF Web Service



Quiero compartir una guía para utilizar Apache CXF, el framework de apache para hacer web service. Que lo disfruten!

Dejo link:
http://www.attuneuniversity.com/ebook/getting-started-with-apache-cxf-web-service.pdf

jueves, 8 de marzo de 2012

Apache ServiceMix







Apache ServiceMix es un flexible ESB open source, que integra funcionalidad de diversos productos de Apache como Apache ActiveMQ, Camel, CXF, ODE y Karaf. Provee el funcionamiento de un ESB integrado a una herramienta OSGI.

Las características de Apache ServiceMix son:


  • Mensajería segura gracias a Apache ActiveMQ
  • Mensajería, enrrutamiento y patrones de integración para Empresas con Apache Camel
  • ServiceMix NMR incluye eventos ricos, mensajería y auditoría lo que permite una integración con bajo acoplamiento.
  • Completo WS-BPEL con Apache ODE.
  • Basado en OSGI con la utilización Apache Karaf.


Además es licencia Apache 2.


Dejo Link:

http://servicemix.apache.org/

viernes, 7 de octubre de 2011

Apache TomEE Certifico Web Profile Compatible

Apache sorprende con un nuevo producto, Apache TomEE (se pronuncia Tommy y es la union de TomCat y Java EE)

La idea es tener un Web Profile basado en Tomcat que no influya en este proyecto y basado en productos de apache. Veamos los productos que lo conforman:
 

CDIApache OpenWebBeans
EJBApache OpenEJB
JavamailApache Geronimo JavaMail
JPAApache OpenJPA
JSFApache MyFaces
JSPApache Tomcat
JSTLApache Tomcat
JTAApache Geronimo Transaction
ServletApache Tomcat


Además viene una versión plus que trae los siguientes servicios: 


ConnectorApache Geronimo Connector
JMSApache ActiveMQ
Web ServicesApache CXF






Dejo Links:
http://www.infoq.com/news/2011/10/apache-tomee
http://openejb.apache.org/3.0/apache-tomee.html

sábado, 2 de julio de 2011

Rest con CXF

Apache CXF es un framework open source, que nos permite construir servicios web tanto soap como rest. Su principal característica es que esta integrado total mente con spring.

Lo que vamos a hacer es exponer un bean de spring con cxf usando Rest y json.

Primero debemos agregar los siguientes jars, es bueno usar maven por lo tanto dejo la entrada del pom:

  


org.apache.cxf
cxf-rt-frontend-jaxws
${cxf.version}



org.apache.cxf
cxf-rt-transports-http
${cxf.version}




org.apache.cxf
cxf-rt-transports-http-jetty
${cxf.version}



org.apache.cxf
cxf-bundle-jaxrs

${cxf.version}


org.eclipse.jetty
jetty-server









org.codehaus.jackson
jackson-mapper-asl
${jackson.version}



org.codehaus.jackson
jackson-jaxrs
${jackson.version}



org.codehaus.jackson
jackson-xc
${jackson.version}




Las versiones de los framework pueden buscarlas en mvnrepository.com. En el caso de cxf depende también la versión de spring, con spring 2.5 se usa hasta 2.3.5; si queres usar versiones mas nuevas deberás usar spring 3.

Luego debemos agregar la siguiente entrada al web.xml:

 
CXFServlet
CXF Servlet

org.apache.cxf.transport.servlet.CXFServlet

1



CXFServlet
/rest/*



Ojo que tienen que levantar spring en el web.xml, si ya lo hacen esta todo bien, si no deben agregar la siguiente linea en el web.xml:


contextConfigLocation
/WEB-INF/applicationContext-hibernate.x
ml


...

context

org.springframework.web.context.ContextLoaderServlet

1




Luego de esto vamos a escribir nuestro bean, yo no voy a hacer una interfaz para este bean pero es bueno que si pueden la hagan.

package org.assembly.post;

import javax.ws.rs.GET;
import javax.ws.rs.Path;


/**
* @author emanuel
*/
@Path("/posts")
public class PostsRest {

@GET
public String getPosts() {
return "posts";
}


}



Este bean tiene un método que solo devuelve un string. Ahora vamos a definir el bean en el applicationContext.xml de sprint y además configurar el servicio REST:























Se deben incluir estos archivos de cxf para que funcione el framework estos archivos son del framework, así que no hay problema por eso.

Como vemos primero se define el servicio Rest y luego se define el bean.

Si vamos a la url http://localhost:8080//rest/posts nos devolverá el string "post".

Y no iba a usar Json? Si si, para un cachito. Ahora vamos a devolver un objeto por json.Para esto vamos a usar un framework llamado Jackson.

Vamos a modificar nuestro bean para uqe tenga como provider Jackson :

  



























Luego modificamos nuestra clase para tener métodos donde podamos devolver json:

package org.assembly.nornas.web.rest.post;

import java.util.List;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;

import org.assembly.dto.post.PostDTO;
import org.assembly.nornas.service.post.PostService;


/**
*
*
* @author emanuel
*/
@Path("/posts")
public class PostsRest {

private PostService postService;

public void setPostService(PostService postService) {
this.postService = postService;
}

@GET
@Path("/{blogId}/{from}")
@Produces("application/json")
public PostDTO findPostsPublishedByBlogId(@PathParam("blogId") Long blogId, @PathParam("from") Integer from) {
PostDTO post = new Post(1,"hola Mundo","Este es mi Hola Mundo");
return post;
}

@GET
@Produces("application/json")
@Path("/test")
public List< String> test() {
List< String> strings = new ArrayList< String>();
strings.add("hola");
strings.add("mundo");
return strings;
}

}



PostDTO esta anotado con anotaciones de jaxb para generar el objeto json correctamente:

@XmlRootElement(name="post")
public class PostDTO implements Serializable {

private static final long serialVersionUID = -6319037835355763839L;
@XmlElement(name="id")
private Long id;
@XmlElement(name="title")
private String title;
@XmlElement(name="content")
private String content;

//geters y seters
}


Ojo Jaxb necesita el constructor por defecto.

Luego vamos a la URL http://localhost:8080//rest/posts/1/0 por ejemplo.

Si vamos al método test http://localhost:8080//rest/test nos devolverá lo siguiente:

["hola","mundo"]


Y listo!!

Dejo Links:

http://cxf.apache.org/docs/jax-rs.html

jueves, 24 de marzo de 2011

¿Cómo se desarrolla sobre una arquitectura SOA?

El desarrollo sobre una arquitectura SOA debe siempre tener en cuenta las funcionalidades desarrolladas y debe consumir estos servicios y exponer las nuevas funcionalidades. Por lo tanto es importante tener un registro actualizado donde se registran los servicios desarrollados y si la empresa cuenta con sistemas heredados con servicios expuestos se debe realizar un relevamiento de los servicios desarrollados y reflejarlos en el registro. Que el registro esté actualizado y sea visual para todos los desarrolladores es vital para que no exista comportamiento replicado.

El desarrollador esta obligado a pensar los servicios de forma atómica y desacoplada. Un servicio nunca debe depender de una implementación sino de una interfaz que describe a dicha dependencia, agregando más complejidad a la tarea de diseñar pero disminuyendo el esfuerzo de mantenimiento ante un cambio. Promoviendo el desacoplamiento y la mantenibilidad.

El estilo arquitectónico SOA no es intrusivo, no nos obliga a utilizar una forma propia de SOA para desarrollo, ni un Paradigma de programación, ni un lenguaje, ni plataforma. Pero si nos obliga a no repetir funcionalidad publicada y publicar los servicios de tal forma sean útiles a otros sistemas. Por ejemplo podríamos programar con POO y publicar la funcionalidad por medio de servicios o utilizar el patrón facade. En este esquema los servicios van a seguir la arquitectura SOA, dando la libertad de diseñar nuestros objetos independientes de la arquitectura SOA. Lo más recomendado es utilizar una arquitectura en Capas sumado a la arquitectura SOA.

Una arquitectura en capas nos permite separar de forma lógica las incumbencias generales en capas. El objetivo de separar las incumbencias en capas, es el desacoplamiento. De esta forma podríamos cambiar ciertas capas si necesidad de modificar las demás.

Sumado a la arquitectura SOA con la arquitectura en Capas, aprovechamos lo mejor de los dos mundos.
En la actualidad existen gran cantidad de framework que nos permiten desarrollar servicios web (CXF, Spring WS, Apache AXIS 1 y 2, Metro, etc.) y a la vez existen muchas formas de exponer estos servicios REST, SOAP, Mensajería, etc. y también existen diferentes formatos de datos JSON, SOAP, RSS, ATOM, etc. Todas estas tecnologías pueden conformar mis sistemas lo cual dificulta la comunicación ya que diferentes aplicaciones hablan diferentes idiomas.

Dada esta problemática surgió del mercado un estándar llamado Service Component Architecture (SCA), que propone una forma de desarrollo SOA. Basándose en el concepto de componentes promueve que un componente publica servicios que le permiten hablar idiomas diferentes (más usados) y entender la mayoría de los formatos de datos.

También a raíz de la diversidad de tecnologías para exponer servicios nace el ESB, que como dijimos anteriormente es un adaptador de diferentes “lenguajes”. Por lo tanto podríamos decidir utilizar un framework para exponer servicios y un ESB con su adaptador, o desarrollar con SCA. Dependiendo de los requerimientos se debe realizar una elección.


sábado, 4 de septiembre de 2010

FUSE


FUSE es una comunidad que promueve el uso de productos Apache para el uso de SOA. La idea es crear una comunidad Open Source de uso de SOA, de esta forma poder compartir experiencias, conocimiento, etc.

Dejo el link: http://fusesource.com/

martes, 21 de julio de 2009

Liks de Web services

Mis próximas lecturas sobre web services van a ser las siguientes:

Primero infoq (hace bastante) saco una comparativa sobre web services open source en java este es el link:

http://www.infoq.com/articles/os-ws-stacks-background

Comparativa entre cxf, axis 2, Metro, Spring WS; ventajas y desventajas de cada uno de los frameworks.

Segundo; cortito y al pie una lista de buenas prácticas a la hora de desarrollar web services; dejo el link:

http://jcesarperez.blogspot.com/2009/06/buenas-practicas-para-desarrollar.html

Muy buena info a la hora de desarrollar web services.



miércoles, 15 de julio de 2009

Apache Camel

Encontre estos tutoriales de apache camel: http://www.tecsisa.com/index.igw?item=1631

Muy bueno!!!


Apache Camel es una implementación de los patrones para integración empresarial descritos en el libro Enterprise Integration Patterns de Gregor Hohpe y Bobby Woolf hecha en Spring.
Estos patrones de diseño permiten integrar sistemas heterogéneos usando sistemas de Mensajería. Actualmente Apache Camel soporta un gran número de transportes de mensajería, como JMS, ActiveMQ, CXF Bus, JBI e incluso HTTP simple.