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 🙂

 

 
Anuncios

Crear Servicio JSonp y consumirlo con Jquery

A veces es necesario utilizar servicios jsonp para evitar problemas de Cross-Domain. Para eso tenemos que hacer una solución Web limpia y agregar un servicio WCF

Luego debo ir al WEB.config y preocuparme de la siguiente configuracion

 

<system.serviceModel>
 <behaviors>
 <endpointBehaviors>
 <behavior name="WsJsonBolsa.ServicioBolsaIframeAspNetAjaxBehavior">
 <enableWebScript />
 </behavior>
 </endpointBehaviors>
 <serviceBehaviors>
 <!-- Al pasar a producción, eliminar debugbehavior-->
 <behavior name="DebugBehavior">
 <serviceDebug includeExceptionDetailInFaults="true"/>
 </behavior>
 </serviceBehaviors>
 </behaviors>
 <bindings>
 <webHttpBinding>
 <binding name="webHttpBindingWithJsonP" crossDomainScriptAccessEnabled="true" />
 </webHttpBinding>
 </bindings>
 <serviceHostingEnvironment 
 multipleSiteBindingsEnabled="true" />
 <services>
 <service name="WsJsonBolsa.ServicioBolsaIframe" behaviorConfiguration="DebugBehavior">
 <endpoint address="" behaviorConfiguration="WsJsonBolsa.ServicioBolsaIframeAspNetAjaxBehavior"
 bindingConfiguration="webHttpBindingWithJsonP"
 binding="webHttpBinding" contract="WsJsonBolsa.ServicioBolsaIframe" />
 </service>
 </services>
 </system.serviceModel>

Una vez agregada la configuración, los servicios deben ser declarados así

 /// <summary>
 /// metodo de pruebas para revisar la visibilidad del servicio
 /// ==========================================================================
 /// </summary>
 /// <returns></returns>
 [OperationContract, WebGet(ResponseFormat=WebMessageFormat.Json)]
 public string pruebaServicio()
 {
 return "hola mundo";
 }

 

Para consumirlo en javascript debes referenciar a Jquery y agregar la ruta del servicio

Con el siguiente codigo llamas e

 var urlServicio = 'http://localhost/ServicioEjemplo.svc';
function obtenerFamilias() {
 var url = urlServicio + /pruebaServicio?callback=0;
 var c = 0;
 var familia;
$.ajax({
 url: url,
 dataType: 'jsonp',
 crossDomain: true,
 success: function (response) {
 alert(d.data);
 },
 error: function (e) {
 consola(e.message);
 }
 });
 }

Así llamas los métodos del servicio en ajax… Lo demás es creatividad personal.

 

suerte

Servicio Odata y como traer datos en CRM 2013

function obtenerEntidadAccount(accountId) {

var oDataURI = Xrm.Page.context.getClientUrl()
+ “/XRMServices/2011/OrganizationData.svc/”
+ “AccountSet(guid'” + accountId + “‘)”
+ “?$select=”
+ “vertis_contactoquerecepcionalafactura,”
+ “vertis_fono,”
+ “vertis_direccionparaelenviodelafactura,”
+ “vertis_emailalcualsedebeenviarlafactura”;
var jSonArray;
$.ajax({
type: “GET”,
contentType: “application/json; charset=utf-8”,
datatype: “json”,
url: oDataURI,
async: false,
beforeSend: function (XMLHttpRequest) {
//Specifying this header ensures that the results will be returned as JSON.
XMLHttpRequest.setRequestHeader(“Accept”, “application/json”);
},
success: function (data, textStatus, XmlHttpRequest) {
jSonArray = data;
},
error: function (XmlHttpRequest, textStatus, errorThrown) {
alert(“Error : Ha ocurrido un error al intentar traer la lista de busqueda de notas.”);
}
});

return jSonArray.d;

}

Consumir un Servicio Web WCF

Para consumir un servicio web, lo primero que se requiere es el WSDL

image1

Con la ruta del WSDL, debemos utilizar un programa del SDK de windows llamado Svcutil.exe. Lo mejor es crear un directorio, donde podamos escribir y ejecutarlo desde ahí, pasando como parámetro el WSDL del servicio

image3

Eso generará dos archivos .

i)     Service1.cs
ii)   Output.config
El archivo Service1.cs es el contrato del servicio y lo debemos agregar a nuestro proyecto. luego hacemos la app cliente que usará el servicio. en ella debemos agregar como referencia web nuevamente el servicio.
image6
Ver que se despliegue correctamente los métodos del servicio.
luego debemos configurar el endpoint del servicio, esto se hace en app.config o web.config según sea el caso
image9
se debe borrar el namespace del servicio
image10

Para utilizar el servicio ahora en el código solo se debe agregar lo siguiente.

Service1Client soap = new Service1Client ();

y ya puedes llamar los métodos del servicio y sus DTO desde el objeto soap.

suerte 🙂

Como crear un Web Service con WCF

Dejo un pequeño tutorial de como trabajar con WCF, en bastante sencillo y para variar visual studio hace casi toda la pega difícil.

Para empezar hay que usar la plantilla de Servicio WCF de visual studio.

image1

Eso te genera varios archivos con código pre generado, pero importan estos dos

 Service1.svc
IService1.cs
En el primero tienes el código del servicio y la interface IService1 que sirve como contrato
El código del archivo Service1.svc es el siguiente
image2
Aquí ya podemos agregar los métodos que nos interesan
public String WelComeMessage(String nombre)

{
   return String.Format(“Hola:” + nombre);
}
Se esta usando el clase String y no el dato nativo. Como ven se usan objetos..
En el IService1.cs hay también bastante código pre generado … ahora agregaremos el método que deseamos publicar a la interface de la siguiente forma
 [OperationContract]
        String WelComeMessage(String name);
Eso deja el código de la siguiente forma…
image5
Luego le damos F5 o play … y veremos esto en nuestro browser
image6
pinchamos el link marcado y veremos lo siguiente..
image7
con eso ya podemos consumir el servicio y podemos probarlo con el SoapUi
Para agregar clases propias o tipos de datos propios (DTO) tenemos que agregar en el archivo IService1.cs
un método que devuelva el tipo de datos que queremos, de la siguiente forma

[DataContract]
public class CompositeType
{
bool boolValue = true;
string stringValue = “Hello “;
EjemploDTO ejemplo = new EjemploDTO();

[DataMember]
public bool BoolValue
{
get { return boolValue; }
set { boolValue = value; }
}

[DataMember]
public string StringValue
{
get { return stringValue; }
set { stringValue = value; }
}

[DataMember]
public EjemploDTO Ejemplo
{
get {return ejemplo;}
set {ejemplo = value;}
}
}

saludos…

Llamar un Web Services desde una ETL

Entre las cosas que me ha tocado hacer ultimamente, me toco llamar un Webservice, desde una ETL… bueno la verdad es que no resulto tan complejo… pero se requieren una serie de pasos casi de receta…

lo primero que se requiere es claro el Webservice 🙂

image2

Estes es un código de pruebas….

public class SSISService : System.Web.Services.WebService
{
    [WebMethod]
    public string HolaMundo()
    {
        return "Hola Mundo";
    }
    [WebMethod]
    public int Multiply(int nParam1, int nParam2)
    {
        return nParam1 * nParam2;
    }
}

Luego se hace el package SSIS (SQL Server Information Service)

image3

Eso con el SQL Server Business Intelligence Development Studio, debería estar en el menu del SQL Server. Luego se agrega una Web Service Task.

image4

image5

Luego Editamos la tarea..

image6

Con eso vemos las propiedades..

image7

En httpConnection, agregamos nuestro WSDL del servicio.. si esta publicado… la dirección web del WSDL

image9

en Input, se definen los parámetros del servicio..

image10

Luego deben definirse los parámetros de salida del webservice. en este caso lo enviaremos a un archivo para luego poder hacer un file Connection

image11

El archivo se llamará test.txt

image12

la salida del archivo debe quedar algo así…

<?xml version="1.0" encoding="utf-16"?>
<int>200</int>

En realidad lo más complejo es le map de variables… Espero que ayude

saludos.

El articulo original lo saque de aqui