Con el objetivo de facilitar busquedas y pruebas de otras soluciones les explico lo siguiente:Dentro de la arquitectura SOA por definición un Servicio web es una tecnología que posee un conjunto de protocolos y estándares definidos para establecer la conexión entre aplicaciones (programadas en diferentes lenguajes), existen varios estándares aplicados a estos servicios uno de ellos es el Lenguaje de definición de Servicios Web (sus siglas en ingles son WSDL) que es el formato en el cual daremos nuestras respuestas.

La solución:

Intentando varias formas encontré este bunble que me funciono a la perfeccion y cumple con mis requerimientos tecnicos, el paquete es BeSimpleSoapBundle (paquete para construir (en Symfony 2) servicios SOAP basados en web services WSDL y se basa en ckWebServicePlugin para Symfony 1.x.)

La instalación de los requerimientos (librerías de BeSimple y Zend):

  • Habilitar las extensiones SOAP en PHP (Para debian sería sudo apt-get install php-soap).
  • Descargar BeSimple\SoapCommonBeSimple\SoapServer y por si necesitan un cliente BeSimple\SoapClient.
  • Descomprimir en la carpeta vendor con los nombres besimple-soapcommonbesimple-soapserverbesimple-soapclient respectivamente .
  • Agregamos las librerías al autoload.php, nos quedaría algo así:

// app/autoload.php
$loader->registerNamespaces(array(
‘BeSimple\\SoapCommon’ => __DIR__.’/../vendor/besimple-soapcommon/src’,
‘BeSimple\\SoapServer’ => __DIR__.’/../vendor/besimple-soapserver/src’,
‘BeSimple\\SoapClient’ => __DIR__.’/../vendor/besimple-soapclient/src’,
// Otros namespaces
));

La instalación del bundle:

  • Descargamos e integramos las librerías Zend\Soap y Zend\Mime (Requeridas solo para la parte del servidor SOAP)
  • Descomprimir en la carpeta vendor/zend-framework/library/Zend (si no existe se crea :S ) con los nombres Soap y Mine respectivamente.
  • Agregamos las librerías al autoload.php, nos quedaría algo así:

// app/autoload.php
$loader->registerNamespaces(array(
‘Zend’ => __DIR__.’/../vendor/zend-framework/library’,
// your other namespaces
));

La instalacion del Bundle/Paquete:

  • Descargamos BeSimpleSoapBundle
  • Descomprimir en la carpeta vendor/bundles/BeSimple/SoapBundle
  • Agregamos las librerías al autoload.php, nos quedaría algo así:

// app/autoload.php
$loader->registerNamespaces(array(
‘BeSimple’ => __DIR__.’/../vendor/bundles’,
// your other namespaces
));

  • Agregamos la clase al AppKernel.php, nos quedaría algo así:

// app/AppKernel.php
public function registerBundles()
{
return array(
// …
new BeSimple\SoapBundle\BeSimpleSoapBundle(),
// …
);
}

La configuración:

  • Incluimos la ruta a nuestro web service en nuestro archivo de rutas routing.yml (por si tienen aplicaciones de desarrollo en un servidor en producción)

# app/config/routing.yml
_besimple_soap:
resource: “@BeSimpleSoapBundle/Resources/config/routing/webservicecontroller.xml”
prefix: /ws

  • Si queremos definimos una ACL en nuestro archivo de seguridad security.yml

 – { path: ^/ws/.*, roles: ROLE_SOAP, requires_channel: https , ip: 10.0.0.1 } # El rol lo cree por políticas de acceso del sistema

  • Configuramos el primer web service en el archivo config.yml

# app/config/config.yml
be_simple_soap:
services:
AplicationService:
namespace: https://LA_URL_DE_TU_SERVICIO/ws/AplicationService
binding: rpc-literal
resource: “@PruebaBundle/Controller/PruebaController.php
resource_type: annotation

La programación de los métodos:

  • En nuestro controlador agregamos los métodos que requiramos

namespace BUDLE\APP\Controller;

use BeSimple\SoapBundle\ServiceDefinition\Annotation as Soap;
use Symfony\Component\DependencyInjection\ContainerAware;

class PruebaController extends ContainerAware
{
/**
* @Soap\Method(“hello”)
* @Soap\Param(“name”, phpType = “string”)
* @Soap\Result(phpType = “string”)
*/
public function helloAction($name)
{
return $this->container->get(‘besimple.soap.response’)->setReturnValue(sprintf(‘Hello %s!’, $name));
}
}

Al final deberán obtener un resultado como el siguiente:

web service con symfony 2
web service con symfony 2
Anuncios