Desarrollo y Consumo de Servicios Web Buenas Prácticas v26
Desarrollo y Consumo de Servicios Web Buenas Prácticas v26
Desarrollo y Consumo de Servicios Web Buenas Prácticas v26
Ciudadano
Versin 026
Abril de 2017
Desarrollo y consumo de servicios web. Buenas prcticas
ndice........................................................................................................................................ 2
2 / 43
4.4 Definicin de Errores de negocio y SoapFaults....................................................................31
4.4.1 Especificacin Errores de negocio..................................................................................................31
4.4.2 Especificacin Soap Fault...............................................................................................................32
4.4.2.1 faultcode.......................................................................................................................................33
4.4.2.2 faultstring......................................................................................................................................33
4.4.2.3 detail.............................................................................................................................................34
4.4.2.4 Ejemplo de SoapFault..................................................................................................................36
Revisado por
Lista de distribucin
Desarrollo_y_consumo_de_servicios_web_Buenas_prcticas_v26.
Nombre del fichero
odt
4 / 43
Desarrollo y consumo de servicios web. Buenas prcticas
1.4 Objetivos
El presente documento pretende guiar en las buenas prcticas en el desarrollo de servicios web
para permitir orientar la plataforma de servicios SOA de la GVA hacia un entorno de
interoperabilidad real y eficiente.
1.5 Audiencia
Nombre y Apellidos Rol
5 / 43
Desarrollo y consumo de servicios web. Buenas prcticas
Tabla 1: Audiencia
1.6 Glosario
Trmino Definicin
Tabla 2: Glosario
1.7 Referencias
Referencia Ttulo
Tabla 3: Referencias
6 / 43
Desarrollo y consumo de servicios web. Buenas prcticas
Bajo acoplamiento: Es uno de los factores crticos para el xito de la estrategia SOA. El
objetivo del bajo acoplamiento es reducir las dependencias entre los sistemas implicados.
En el caso de los Web services la comunicacin entre consumidores y servicios se realizar
mediante la interfaz del servicio (WSDL), logrando as la independencia entre el servicio a
ejecutar y el consumidor.
Descubrimiento: Todo servicio debe poder ser descubierto de alguna forma para que
pueda ser utilizado, consiguiendo as evitar la creacin accidental de servicios que
proporcionen las mismas funcionalidades.
Si bien SOA no est estrictamente vinculado necesariamente con Servicios Web, estos suman
cada da ms importancia ya que las caractersticas que poseen los convierten en el mecanismo
ideal para cubrir los principios de la orientacin a servicios (SOA).
Bsicamente los Servicios Web son mecanismos de comunicacin que permiten interoperabilidad
entre aplicaciones a travs del uso de estndares abiertos. De esta manera aplicaciones
7 / 43
Desarrollo y consumo de servicios web. Buenas prcticas
La especificacin SCSP define un conjunto de mensajes, basados en XML, definidos por sus
correspondientes esquemas XSD.
El sistema permite que la peticin-respuesta sea sncrona o asncrona y los mensajes van firmados
mediante WS-Security.
Mensajes generales: Son comunes a todos los servicios y estn compuestos por los
siguientes mensajes.
o Peticin (peticion.xsd) con namespace
o Confirmacin (confirmacionPeticion.xsd) con namespace
o Solicitud de Respuesta (solicitudRespuesta.xsd) con namespace
o Respuesta (respuesta.xsd) con namespace
o Soap Fault Atributos (soapfaultatributos.xsd ) con namespace
Mensajes Especficos: Depende de cada certificado administrativo o transmisin de datos.
Lo define el organismo emisor.
o Datos Especficos con namespace
La PAI dispone de todos los esquemas definidos en el ENI.
8 / 43
Desarrollo y consumo de servicios web. Buenas prcticas
9 / 43
Desarrollo y consumo de servicios web. Buenas prcticas
Un Web Service es una parte del software que puede comunicarse con otra aplicacin a travs de
una red usando un juego especfico de protocolos estandarizados- SOAP, UDDI, WSDL.
Entre los principales beneficios que se exponen al hablar de los servicios Web, generalmente se
encuentran aquellos que tienen que ver con granularidad e interoperabilidad, es decir, con la
posibilidad de desarrollar componentes de software totalmente independientes que tienen
funcionalidad propia, pero que son capaces de exponer tal funcionalidad y compartirla con otros
servicios y aplicaciones para lograr crear sistemas ms complejos.
Por otro lado, la visin planteada por este paradigma computacional, donde todo es un servicio,
permite manejar un esquema de integracin universal en el cual se pueden aprovechar todos los
beneficios de cada componente con un nuevo nivel de complejidad y dinamismo.
Los Servicios Web permiten que las organizaciones integren sus diferentes aplicaciones de una
manera eficiente, sin preocuparse por cmo fueron construidas, donde residen, sobre qu sistema
operativo se ejecutan o cmo acceder a ellas.
10 / 43
Desarrollo y consumo de servicios web. Buenas prcticas
catastrales de los inmuebles, que figuran en la base de datos del Catastro, asociados a un titular .
La recomendacin sera exponer ambas funcionalidades como servicios distintos.
Como resumen de este punto, se deben disear servicios web con las responsabilidades bien
repartidas, que sean cohesivos, extensibles, escalables y reutilizables.
11 / 43
Desarrollo y consumo de servicios web. Buenas prcticas
use son: encoded/literal. De las cuatro combinaciones posibles de estos parmetros, la opcin
adecuada para publicar un servicio en el bus de la PAI exige que esta definicin sea:
binding=document use=literal
La razn fundamental para el uso de esta opcin es la ventaja que supone para los desarrolladores
frente a cambios del interfaz del servicio. La simple adicin de un parmetro a la operacin de un
servicio suele redundar en cambios importantes en el cdigo desarrollado en base a un interfaz
rpc/encoded, mientras que dichos cambios pueden ser menores en la evolucin de un servicio
codificado en base a un interfaz document/literal. Esta razn, entre otras, ha concluido finalmente
que el style/operation document/literal se haya convertido en el enfoque de diseo recomendado en
el diseo de webservices.
Mostramos a continuacin un detalle que muestra sobre un determinado wsdl los parmetros sobre
los que hacemos referencia anteriormente.
Los contratos de integracin en el mundo SOAP (los wsdl) nos dicen claramente cmo debe ser un
el cuerpo (body), qu operaciones debe tener un servicio, como se deben conformar las peticiones,
etc. Pero nunca dicen nada acerca de cmo deben ser los headers, la propia especificacin SOAP
tampoco lo define, sino que las deja a expensas de las definiciones del usuario.
Cuando alguien manda una peticin con el parmetro de cabecera mustUnderstand=1 lo que est
queriendo decir es que el nodo SOAP al que est mandando la peticin debe obligatoriamente
entender la cabecera marcada por ese parmetro. Si alguno no lo entiende, no puede ignorarlo, y
el servicio web debe devolver un SoapFault informando de ello.
Pongamos un ejemplo para entender su utilidad; Imaginemos que una determinada peticin
exigiera que fuera transaccional, y que slo se hiciera el commit si todas y cada una de las
12 / 43
Desarrollo y consumo de servicios web. Buenas prcticas
solicitudes que viajan en la peticin fueran exitosas. Si un servidor omitiera (no hiciera caso) el
hecho de que el cliente le est informando que debe entender que esa peticin exige
transaccionalidad, podra darse el caso que la aplicacin se quedara en un estado inconsistente.
Por eso en la gran mayora de las ocasiones se omite informar este parmetro, ya que exige que
el nodo al que le estn mandando la peticin entienda y procese toda la cabecera adecuadamente.
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
Esto crea inconsistencia en la validacin de la firma que se hay realizado, provocando un error en
la misma. La forma correcta de los namespaces es:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
13 / 43
Desarrollo y consumo de servicios web. Buenas prcticas
Esquemas:
<xsd:element name="getComunicaciones" type="getComunicaciones"/>
<xsd:complexType name="getComunicaciones">
<xsd:sequence>
<xsd:element minOccurs="0" name="data" type="xs:string"/>
</xsd:sequence>
14 / 43
Desarrollo y consumo de servicios web. Buenas prcticas
15 / 43
Desarrollo y consumo de servicios web. Buenas prcticas
Para evitar esta problemtica se debe eludir este tipo de prcticas en los servicios web y realizar la
definicin de esquemas precisos para cada uno de los elementos que van a viajar en la peticin, a
continuacin vemos una aproximacin de cmo deberan ser las peticiones y los esquemas bien
estructurados.
Peticin:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:urn="urn:es:gva:comunicaciones:v3:ComunicacionesWS">
<soapenv:Header/>
<soapenv:Body>
<urn:getComunicaciones>
<urn:peticion>
<urn:codigoEntidad>GV</urn:codigoEntidad>
<urn:fechaFin>2016-02-16T17:30:04.347+01:00</urn:fechaFin>
<urn:paginacion>
<urn:tamanyoPagina>2</urn:tamanyoPagina>
<urn:numeroPagina>1</urn:numeroPagina>
</urn:paginacion>
</urn:peticion>
</urn:getComunicaciones>
</soapenv:Body>
</soapenv:Envelope>
Extracto de esquema:
<xs:complexType name="consultaComunicacionesRequest">
<xs:sequence>
<xs:element name="codigoEntidad" type="types:typeCodigoEntidad" />
<xs:element name="numeroComunicacion" type="types:typeNumeroComunicacion"
minOccurs="0" />
<xs:element name="numeroIdentificacion" type="types:typeNumeroIdentificacion"
minOccurs="0" />
<xs:element name="fechaInicio" type="xs:dateTime"
minOccurs="0" nillable="true" />
<xs:element name="fechaFin" type="xs:dateTime" minOccurs="0"
nillable="true" />
<xs:element name="acuse" type="xs:boolean" minOccurs="0"
nillable="true" />
<xs:element name="estados" minOccurs="0" nillable="true">
<xs:complexType>
<xs:sequence>
<xs:element name="estado" type="types:typeEstadoComunicacion"
minOccurs="0" nillable="true" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="paginacion" type="tns:paginacion"
minOccurs="0" nillable="true" />
</xs:sequence>
</xs:complexType>
16 / 43
Desarrollo y consumo de servicios web. Buenas prcticas
A la hora de disear el schema XSD, conviene crear tipos y elementos globales (a nivel raz) para
poder reutilizarlos, tanto a nivel de elementos XML como clases del lenguaje de implementacin del
servicio web.
17 / 43
Desarrollo y consumo de servicios web. Buenas prcticas
</xs:schema>
18 / 43
Desarrollo y consumo de servicios web. Buenas prcticas
...
</pet:Emisor>
<pet:Solicitante>
...
</pet:Solicitante>
<pet:Titular>
<pet:TipoDocumentacion>NIF</pet:TipoDocumentacion>
<pet:Documentacion>99999999R</pet:Documentacion>
<pet:Nombre>JUAN</pet:Nombre>
<pet:Apellido1>ESPAOL</pet:Apellido1>
<pet:Apellido2>ESPAOL</pet:Apellido2>
</pet:Titular>
<pet:Transmision>
...
</pet:Transmision>
</pet:DatosGenericos>
</pet:SolicitudTransmision>
</pet:Solicitudes>
</pet:Peticion>
</soapenv:Body>
En el caso de los servicios de verificacin se debe seguir la definicin de espacio de nombres del
protocolo SCSP (Sustitucin de Certificados en Soporte Papel) cuya especificacin est disponible
en el Portal de Administracin electrnica PAE/CTT en la direccin
http://administracionelectronica.gob.es/es/ctt/scsp.
19 / 43
Desarrollo y consumo de servicios web. Buenas prcticas
Por necesidades de los proyectos, los servicios web se encuentran en constante cambio y
evolucin. Las bases y principios de una arquitectura orientada a servicios (SOA) deben asegurar
que los proveedores de servicios puedan:
Liberar una nueva versin de un servicio, despus de que los consumidores del servicio
hayan probado y certificado la nueva versin del servicio.
Liberar una nueva versin de un servicio, sin esperar a que los consumidores adapten la
invocacin al nuevo servicio.
Transformacin
La recomendacin, es que las distintas revisiones de los servicios guarden compatibilidad con
versiones anteriores, para producir el menor nmero de incidencias en el consumo de las nuevas
versiones.
20 / 43
Desarrollo y consumo de servicios web. Buenas prcticas
En el caso de que el servicio tenga que transmitir ficheros asociados al servicio, es interesante
conocer y gestionar las diferentes modalidades de hacerlo. Entre las ms importantes y utilizadas
encontramos MTOM y Base64.
MTOM proporciona una forma ms efectiva y normalizada por W3C de transmitir ficheros, donde en
lugar de proporcionar el contenido en el body codificado en Base64, enva los datos binarios como
adjunto.
A efectos prcticos es recomendable la utilizacin del mtodo de transmisin MTOM siempre que
se deban transmitir adjuntos, salvo cuando el tamao mximo de los ficheros objeto de la
transmisin no superen en ningn caso el tamao de 1MB.
Con el fin de tener una correcta estructuracin de los servicios incorporados a la infraestructura
SOA de la PAI es de vital importancia mantener una correcta taxonoma de servicios, que permita
categorizar dichos servicios a publicar conforme a criterios diferentes que sirvan como base en la
definicin de alertas, monitorizacin, gestin de recursos asociados, etc.
La informacin que normalmente se requiere para categorizar estos servicios hace referencia a
caractersticas relativas:
Semntica e informacin del servicio. En la mayora de los casos esta informacin viene
auto contenida en los wsdl y xsd del servicio, pero en ocasiones, esta informacin se debe
completar con mayor detalle. Por ello se exige un contrato de integracin en el que se
facilite toda la informacin relevante tanto de entrada como de salida para consumir el
servicio y tratar adecuadamente las respuestas que ste proporcione, tanto por el sistema
mediador (bus de interoperabilidad) como por el usuario/consumidor final.
21 / 43
Desarrollo y consumo de servicios web. Buenas prcticas
Dimensionamiento del Sistema. Los recursos a destinar a la hora de exponer los diferentes
servicios, son dependientes en ocasiones, de las caractersticas como los perfiles de trfico,
tamao de las peticiones/respuestas, etc. Es importante detallar el perfil de trfico esperado
en nmero de peticiones por minuto/segundo, nivel de concurrencia mximo, as como si el
trfico es estacionario, peridico, etc. Todas estas caractersticas, ms las que se puedan
considerar de inters por parte de los desarrolladores deben ser incorporadas en el
formulario de alta de proveedor. Con ellas se definen los acuerdos de nivel de servicio a
cumplir entre los diferentes componentes. Puede consultar los formularios de alta de
proveedor en este enlace.
22 / 43
Desarrollo y consumo de servicios web. Buenas prcticas
Los parmetros que se le pueden pasar tienen que ser representados en Strings (en http lo
que viaja es siempre string).
Una sintaxis universal para identificar los recursos. En un sistema REST, cada recurso es
direccionable nicamente a travs de su URI.
El uso de estndares.
El resultado que va a devolver el servicio tendr que ser String, en un formato estndar,
originalmente ese formato era XML, actualmente se suele usar JSON.
API-KEY
Inclusin en la cabecera HTTP del mensaje realizado a la PAI un campo destinado a un cdigo o
token proporcionado por la Plataforma en el momento de la solicitud de alta al servicio.
Este cdigo se compone de 32 caracteres y es nico por cada aplicacin.
x-api-key: [VALOR]
Como ejemplo:
x-api-key: 1345c25df49d43c8153d2e91c8346ba4
Aplicacin
Inclusin en la cabecera HTTP de un campo de usuario con nombre de Aplicacin, que debe
contener la aplicacin de la consulta con el que se ha realizado el alta al servicio.
aplicacion: [VALOR]
Como ejemplo:
aplicacion: TEST_00001
Se han de incluir ambas partes para un consumo correcto del servicio. De esta forma, como
ejemplo del mensaje final:
Accept-Encoding: gzip,deflate
Content-Type: application/json
23 / 43
Desarrollo y consumo de servicios web. Buenas prcticas
Content-Length: 60
Host: innovacion-pre.gva.es
x-api-key: 1345c25df49d43c8153d2e91c8346ba4
aplicacion: TEST_00001
Accept: application/xml
Connection: Keep-Alive
"usuario": "prueba",
"password": "test001"
NOTA: Los servicios en modalidad REST utilizan el protocolo HTTP y sus operaciones, esto no
significa que la conexin tenga que ser en http sin cifrar, es posible securizar la conexin utilizando
https sin afectar al funcionamiento del mismo y con el mismo funcionamiento que normalmente.
Este protocolo (https) es el utilizado por la PAI para la publicacin de servicio REST.
Un ejemplo de inclusin de estas cabeceras en una peticin Post a un servicio Rest desde una
aplicacin Android (java) con API level 21 seria el siguiente:
Existen varias opciones para la publicacin de un determinado servicio en la PAI cuando se desea
un consumo del servicio en estndar REST. Por un lado es posible implementar la conversin de
un servicio SOAP a REST y por otro lado, es posible la publicacin de un servicio de naturaleza
REST como tal.
Los servicios que proporciona el proveedor en estndar SOAP a los cuales se les puede anexar
una fachada de entrada REST mediante un recurso de bus. De esta forma, el consumidor de dicho
24 / 43
Desarrollo y consumo de servicios web. Buenas prcticas
servicio lo utiliza como si de un REST puro se tratase y el bus de la PAI realiza la conversin de la
llamada al servicio final en SOAP.
Esta modalidad requiere realizar un estudio de los path y operaciones http a asignar a cada uno de
los mtodos, as como el formato de los menajes, por tanto se recomienda consultar con la
Plataforma en caso de querer acogerse a esta posibilidad.
25 / 43
Desarrollo y consumo de servicios web. Buenas prcticas
La PAI cuenta con una poltica de autorizacin de firma de mensaje en cabecera SOAP, siguiendo
las especificaciones de WS-Security. A los servicios se les aplica una poltica que exige que las
peticiones vengan firmadas mediante un certificado que pueda validar la ACCV.
Los consumidores de servicios de verificacin de datos de la GVA o servicios instrumentales,
pueden utilizar tanto certificado de Sello de rgano como certificados de aplicacin de la ACCV.
Los consumidores de servicios de verificacin de datos ofrecidos por la Plataforma de
Intermediacin de Datos (PID) a travs de la PAI, estn obligados a utilizar certificados de Sello de
rgano de la ACCV para firmar sus peticiones.
26 / 43
Desarrollo y consumo de servicios web. Buenas prcticas
accesorias. La facilidad e integracin con los IDEs de uso habitual (Eclipse, Netbeans, JDeveloper,
IntelliJ, BlueJ, etc) permite un gil y rpido desarrollo teniendo curvas de aprendizaje con tiempos
muy cortos. En el punto 3 se esbozan directrices generales de orientacin para el desarrollo de
servicios en entornos SOA.
27 / 43
Desarrollo y consumo de servicios web. Buenas prcticas
incorporar una cabecera de mensaje SOAP, en la peticin al servicio web, que incluya el tag
Id_trazabilidad que, permitir hacer el correspondiente seguimiento posterior.
Ejemplo:
<Id_trazabilidad xmlns="http://dgti.gva.es/interoperabilidad">68254ed222d65eeb-CODIGO_CATI-20140130184955000</Id_trazabilidad>
Este tag se compone del nmero de serie del certificado utilizado para firmar la peticin,
CODIGO_CATI que toma el valor del cdigo CATI de la aplicacin y el instante de la peticin
codificado como ao,mes,dia,hora,minuto,segundo,milisegundos (patrn YYYYMMddHHmmssSSS y
formato 24 horas). Estos tres componentes del tag de trazabilidad se han de separar por un carcter
- como se aprecia en el formato de ejemplo mostrado anteriormente, se define adems el
namespace correspondiente "http://dgti.gva.es/interoperabilidad".
En sustitucin de la validacin del certificado que se realiza en el bus instrumental, en este caso,
en el bus de innovacin, la validacin se realiza sobre la IP o rango de IPs consumidora/s del
servicio.
Este tag se compone del CODIGO_CATI que toma el valor del cdigo CATI de la aplicacin y el
instante de la peticin codificado como ao,mes,dia,hora,minuto,segundo,milisegundos (patrn
YYYYMMddHHmmssSSS y formato 24 horas ). Estos componentes del tag de trazabilidad se han de
separar por un carcter - como se aprecia en el formato de ejemplo mostrado anteriormente, se
define adems el namespace correspondiente "http://dgti.gva.es/interoperabilidad".
NOTA: En caso de existir por parte del proveedor del servicio alguna necesidad de utilizar la
primera parte de este Id_trazabilidad con el fin de trasladar algn cdigo que queda vaco en este
mbito, pnganse en contacto con la PAI y se estudiar el caso.
Un ejemplo de cdigo en Java - CXF para incluir esta cabecera sera del estilo:
List<Header> headersList = new ArrayList<Header>();
28 / 43
Desarrollo y consumo de servicios web. Buenas prcticas
<soapenv:Envelope xmlns:sch="http://www.telefonica.es/MI/InterfazSimplificado/schemas"
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:BinarySecurityToken EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-
1.0#Base64Binary" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3" wsu:Id="X509-
DCB9D5EE6640DE7420142131045237816">MIII4DCCBsigAwIBAgIIK9mt3c2fCZgwDQYJKoZIhvcNAQEFBQAwQzETMBEGA1UEAwwKQUNDVkNBLTEyM
DEQMA4GA1UECwwHUEtJQUNDVjENMAsGA1UECgwEQUNDVjELMAkGA1UEBhMCRVMwHhcNMTMxMDA0MTAzNTQxWhcNMTYxMDAzMTAzNTQx
WjCBuTE7MDkGA1UEAwwyRElSRUNDSU9OIEdFTkVSQUwgREUgVEVDTk9MT0dJQVMgREUgTEEgSU5GT1JNQUNJT04xEjAQBgNVBAUTCVM0NjExMDAx
QTEbMBkGA1UECwwSc2VsbG8gZWxlY3Ryw7N.........+
+mD5nYvY4BriImaW+bRJeaR+5xS20uvwM6bo4y929jqeABB9v5FgBwrSh98C6MtEQ/J9Z/iJZwlGRQyoIgt6vtocQat3YOKE03/Gd7rjmrSYsECow4STBKvd4
QRqcp5b5fs8jNt97nrgsdaM+nFSFkHy8pIBecgoDbuG9JLzxJ+XVO2RSvijNb1HX7qUVrkARkxVXdDHm7xMNGSPKl9a5ea0ShWTCDU7ctquc2E5oDK6Tv+bD
f7Z1Z4JBM0T0Vnh75+PDnizmFhSzAvjIGujZigGm2ouzch34MfG0/KpflYaUnldGPbMAP4SGar77COaVwVJ8mrfOeMunpU=</wsse:BinarySecurityToken>
<ds:Signature Id="SIG-DCB9D5EE6640DE7420142131045238020" xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:SignedInfo>
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
<ec:InclusiveNamespaces PrefixList="sch soapenv" xmlns:ec="http://www.w3.org/2001/10/xml-exc-
c14n#"/>
</ds:CanonicalizationMethod>
<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<ds:Reference URI="#id-DCB9D5EE6640DE7420142131045237819">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
<ec:InclusiveNamespaces PrefixList="sch" xmlns:ec="http://www.w3.org/2001/10/xml-
exc-c14n#"/>
</ds:Transform>
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<ds:DigestValue>nXA9tKHn/MaC1V1P/BzI6rY1xAY=</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue>LlnonOkwUP/N6EmDub9J+jPMW/Q03p042Dge6+B8cQ/4S67VtzHbJGab0e4BAMj2nx3fz6wLMP3P
ACiDEG5HlIJjbZvpxlEehWzN8LGZE8wwh/0thtiHzAD5LwCJND5JGXsK7ps10s0EIntCPEr9GpoQ
ZXhoJzzWBdTThI718uQ=</ds:SignatureValue>
<ds:KeyInfo Id="KI-DCB9D5EE6640DE7420142131045237817">
<wsse:SecurityTokenReference wsu:Id="STR-DCB9D5EE6640DE7420142131045237818">
<wsse:Reference URI="#X509-DCB9D5EE6640DE7420142131045237816" ValueType="http://docs.oasis-
open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"/>
</wsse:SecurityTokenReference>
29 / 43
Desarrollo y consumo de servicios web. Buenas prcticas
</ds:KeyInfo>
</ds:Signature>
</wsse:Security>
<Id_trazabilidad xmlns="http://dgti.gva.es/interoperabilidad">68254ED222D65EEB-CODIGO_CATI-
20140130184955000</Id_trazabilidad>
</soapenv:Header>
<soapenv:Body wsu:Id="id-DCB9D5EE6640DE7420142131045237819" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-
wss-wssecurity-utility-1.0.xsd">
<sch:EnviarReq>
<Remitente>PRUEBASGVA</Remitente>
<Destinatarios>
<Para>N_TELF</Para>
</Destinatarios>
<TextoSMS>Hola Mundo</TextoSMS>
<NotificacionEntrega>No</NotificacionEntrega>
</sch:EnviarReq>
</soapenv:Body>
</soapenv:Envelope>
30 / 43
Desarrollo y consumo de servicios web. Buenas prcticas
31 / 43
Desarrollo y consumo de servicios web. Buenas prcticas
Esos cdigos y texto debern estar recogidos en el contrato de integracin del servicio.
Un ejemplo de estos tipos de errores controlados por el servicio final y que deben ser tratados
atendiendo a lo especificado en el contrato de servicio pueden ser a modo de ejemplo algunos
como los que se expone en la siguiente tabla, en la que se recogen errores de negocio tpicos de
diferentes servicios estatales. El siguiente listado de cdigos y descripciones de errores se
devuelve en el nodo DatosEspecificos del esquema de respuesta, concretamente, en los campos
CodigoEstado y LiteralError:
Para las peticiones que devuelven respuestas con errores de negocio, en el nodo Estado del
nodo Retorno" en DatosEspecificos del mensaje de Respuesta se devolver informacin que in-
dica que la peticin es errnea.
32 / 43
Desarrollo y consumo de servicios web. Buenas prcticas
<xs:sequence>
<xs:element name="faultcode" type="xs:QName" />
<xs:element name="faultstring" type="xs:string" />
<xs:element name="faultactor" type="xs:anyURI" minOccurs="0" />
<xs:element name="detail" type="tns:detail" minOccurs="0" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="detail">
<xs:sequence>
<xs:any namespace="##any" minOccurs="0" maxOccurs="unbounded" processContents="lax" />
</xs:sequence>
<xs:anyAttribute namespace="##any" processContents="lax" />
</xs:complexType>
Segn acuerdo y acercndonos a los estndares los valores que tomarn cada uno de estos
elementos ser el siguiente:
4.4.2.1 faultcode
Se debera dejar abierta la especificacin de este elemento, siempre y cuando sea un Xml Qualified
Name correcto, segn especificacin de la W3C. Esto permitir usar los faultcode que se rellenan
automticamente por los motores SOAP. Opcionalmente, si se desea se podra indicar un faultcode
del tipo:
Faultcode = Sender | Client | Receiver | Server [.Subcode]*
Donde Sender o Client, se utilizaran para indicar que el problema proviene del mensaje enviado
por el requirente, y Receiver o Server, para indicar que el problema ha surgido por los procesos del
receptor del mensaje.
33 / 43
Desarrollo y consumo de servicios web. Buenas prcticas
Si el mensaje de error se localizase en la PAI este campo vendra informado como soap-env:PAI.
En cuanto a los proveedores de servicio, se recomienda, la informacin de este campo de forma
que sea detectable el elemento que origina el error.
4.4.2.2 faultstring
Puede tomar cualquier valor de tipo string. El proveedor debe tratar este campo para devolver
errores legibles. Nunca se debe devolver informacin sobre las IPs, URL u otros elementos
sensibles para la seguridad del servicio.
4.4.2.3 detail
Se recomienda que este elemento contenga una estructura/nodo Atributos, en la que se indicar
toda la informacin necesaria para el error, con el fin de mantener una coherencia sintctica con los
errores proporcionados por los servicios expuestos en la Plataforma de Intermediacin de Datos
(PID).
Esquema de nodo Atributos:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema xmlns="http://intermediacion.redsara.es/scsp/esquemas/V3/soapfaultatributos"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://intermediacion.redsara.es/scsp/esquemas/V3/soapfaultatributos"
elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="Atributos">
<xs:complexType>
<xs:all>
<xs:element ref="IdPeticion"/>
<xs:element ref="NumElementos"/>
<xs:element ref="TimeStamp"/>
<xs:element ref="Estado" minOccurs="0"/>
<xs:element ref="CodigoCertificado"/>
</xs:all>
</xs:complexType>
</xs:element>
<xs:element name="CodigoCertificado">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="64"/>
</xs:restriction>
34 / 43
Desarrollo y consumo de servicios web. Buenas prcticas
</xs:simpleType>
</xs:element>
<xs:element name="CodigoEstado">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="4"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="CodigoEstadoSecundario">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="16"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="IdPeticion">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="26"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="LiteralError">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="255"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="LiteralErrorSec">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="255"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="NumElementos">
<xs:simpleType>
<xs:restriction base="xs:int">
<xs:totalDigits value="7"/>
<xs:minInclusive value="0"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="TiempoEstimadoRespuesta">
<xs:simpleType>
<xs:restriction base="xs:int">
35 / 43
Desarrollo y consumo de servicios web. Buenas prcticas
<xs:totalDigits value="4"/>
<xs:minInclusive value="0"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="TimeStamp">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="29"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Estado">
<xs:complexType>
<xs:all>
<xs:element ref="CodigoEstado" minOccurs="0"/>
<xs:element ref="CodigoEstadoSecundario" minOccurs="0"/>
<xs:element ref="LiteralError" minOccurs="0"/>
<xs:element ref="LiteralErrorSec" minOccurs="0"/>
<xs:element ref="TiempoEstimadoRespuesta" minOccurs="0"/>
</xs:all>
</xs:complexType>
</xs:element>
</xs:schema>
Cdigo de
Descripcin del error Cuando se devuelve este error
estado SCSP
Imposible ejecutar el El servicio esta cado y no se pudo cursar la
0101
servicio peticin del cliente.
Este error se produce cuando se solicita la
La peticin no existe en
0204 respuesta asncrona de un idPeticion para el cual
el sistema
no se ha registrado ninguna respuesta correcta
El timestamp de la Se recibe una peticin con un timestamp con
0230 peticin debe ser vlido formato incorrecto o que no es ni de ayer ni de
y de hoy o de ayer hoy.
El certificado o procedimiento utilizados son
Organismo no
0301 incorrectos y no se pudo autorizar el consumo al
autorizado
servicio
0302 Certificado caducado El certificado esta caducado
0303 Certificado revocado El certificado esta revocado
36 / 43
Desarrollo y consumo de servicios web. Buenas prcticas
La firma de la peticin no
0305 Se ha recibido una peticin en la que la firma no
es vlida
es vlida
37 / 43
Desarrollo y consumo de servicios web. Buenas prcticas
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<soapenv:Fault>
<faultcode>env:Server</faultcode>
<faultstring>[0403] Error al obtener el contenido XML del mensaje SOAP </faultstring>
<faultactor>XSPRUW30 </faultactor>
<detail>
<Atributos xmlns="http://intermediacion.redsara.es/scsp/esquemas/V3/soapfaultatributos">
<IdPeticion>CODCERT00001</IdPeticion>
<NumElementos>1</NumElementos>
<TimeStamp>2010-09-20T13:22:35.993+0200</TimeStamp>
<Estado>
<CodigoEstado>0403</CodigoEstado>
<LiteralError>Imposible obtener el contenido XML del mensaje SOAP.</LiteralError>
<CodigoEstadoSecundario>04031</CodigoEstadoSecundario>
<LiteralErrorSec>Imposible obtener el campo atributos del SOAP</LiteralErrorSec>
<TiempoEstimadoRespuesta>0</TiempoEstimadoRespuesta>
</Estado>
<CodigoCertificado>AEAT103I</CodigoCertificado>
</Atributos>
</detail>
</soapenv:Fault>
</soapenv:Body>
</soapenv:Envelope>
38 / 43
Desarrollo y consumo de servicios web. Buenas prcticas
39 / 43
Desarrollo y consumo de servicios web. Buenas prcticas
40 / 43
Desarrollo y consumo de servicios web. Buenas prcticas
Por un lado y ms importante tenemos las clases necesarias para generar un servicio web a raz
de un WSDL y unos XML Schemas ya definido y vlidos.
Por otro lado, tenemos los mdulos destinados a auditora, seguridad y gestin de errores.
Describiendo un poco cada uno de estos ltimos:
41 / 43
Desarrollo y consumo de servicios web. Buenas prcticas
Existen diversas tecnologas en la actualidad para consumir los servicios web. No es captulo de
este documento servir de gua tutorial de desarrollo, sino dar unas pautas de ejemplo. En el
Manual de usuario para el consumo de servicios instrumentales y de verificacin se muestra un
cliente de servicio realizado con Apache CXF 2.7. Concretando las recomendaciones que desde la
PAI se han realizado, se opt por clientes basado en CXF 2.7 por su comodidad en la confeccin
de los Stubs y clases asociadas al consumo de servicios web.
42 / 42