Problema de serialización de matrices JSON

Error de Apache CXF (sucede solo en formatos de respuesta de JSON)

Cuando se solicitan respuestas de listas de hoteles con formato JSON, hay elementos de matriz como HotelSummary y RoomRateDetails que no se serializarán correctamente si contienen solo un hotel o una habitación. En estos casos, las matrices se devolverán como instancias únicas en vez de como una tabla hash. Esto puede provocar problemas con determinados entornos de codificación.

Ejemplo:

Publicado por Apache: http://cxf.apache.org/docs/jax-rs-data-bindings.html

Manejo de problemas de serialización de matrices JSON

Existe un problema reconocido en la comunidad de JSON que se manifiesta en la serialización incorrecta de objetos de lista que contienen solo un valor único. Para solucionarlo, es necesario activar una función 'serializeAsArray' en un JSONProvider, con la opción adicional de especificar los campos individuales que necesitan procesarse según corresponda mediante una propiedad 'arrayKeys'.

Ten en cuenta que 'serializeAsArray' y 'arrayKeys' se pueden combinar para producir las llamadas secuencias de convención natural.

Una solución de ejemplo:

<util:list id="jsonKeys"><value>HotelSummary</value></util:list>

<bean id="jsonProvider" class="org.apache.cxf.jaxrs.provider.JSONProvider">
  <property name="serializeAsArray" value="true" />
  <property name="arrayKeys" ref="jsonKeys" />
</bean>

Tu propio marco de trabajo puede requerir un código diferente. El que se muestra aquí es solo un ejemplo.

Errores irrecuperables o problemas de autenticación con solicitudes de reserva

Con algunas tecnologías, incluidas PHP y Java, los usuarios han tenido problemas en la transferencia de solicitudes de reserva que tenían la forma adecuada si en la solicitud faltaba el valor correcto de content-type.

Si has solucionado el problema y comprobado la estructura de URL de la solicitud de reserva y sigues recibiendo errores irrecuperables, prueba a establecer lo siguiente en los encabezados de HTTP:

Content-type: application/x-www-form-urlencoded Accept: application/xml

Además, recuerda que el uso de &_type=json o &_type=xml solo establece el formato de la respuesta. EAN solo acepta contenido XML. 

Para obtener más información sobre el tipo de contenido, consulta Solicitud de reserva.

Código de conversión manual de Java

Código de ejemplo de conversión manual de 8859-1 a UTF-8.

private static String convertEncoding(String value) {
        if (value != null) {
            try {
                return new String(value.getBytes("8859_1"), "UTF-8");

            } catch (UnsupportedEncodingException e) { 
                LOG.error("Unsupported Encoding.", e);
            }
        }

        return value;
    }

Usuarios de Axis

Error de Axis

En algunas versiones de Axis existe un error conocido que causa que se generen de forma imprecisa archivos de origen que no son correctos por cambiar algunos tipos de datos ("integer" en vez de "int"), entre otros problemas. Estas imprecisiones provocan que no se pueda compilar el archivo de origen o impiden que el archivo de origen se comunique correctamente con los servicios web de EAN.

Puedes corregir los tipos de datos en el archivo de origen ANTES de la compilación. O bien puedes actualizar Axis a una versión posterior en la que se haya corregido el error; para ello, accede a http://ws.apache.org/axis/

Puedes utilizar cualquier versión que funcione como se espera para tu aplicación. No podemos ayudarte con problemas de servidores o aplicaciones de servidores.

Error de Axis 1.4

Existe un error conocido en la versión 1.4 de Axis que crea definiciones susceptibles de adoptar valores nulos (nillable), aunque se especifique "0" para la repetición mínima y "false" para el atributo nillable.

Estas imprecisiones causan errores en las solicitudes y que estas no logren comunicarse con los servicios web de EAN correctamente.

Visita http://ws.apache.org/axis/ para leer recomendaciones sobre la solución de este problema.

Puedes utilizar cualquier versión que funcione como se espera para tu aplicación. No podemos ayudarte con problemas de servidores o aplicaciones de servidores.

Usuarios de .NET

Base de conocimientos de .NET

De forma predeterminada, .NET Framework tiene una conexión máxima igual a 2 en machine.config. Esto limita las llamadas web remotas a dos conexiones por proceso de trabajo a la vez. Si observas que los tiempos de respuesta son largos o se agota el tiempo de espera de las llamadas al servicio web, te recomendamos que compruebes la configuración del servidor a este respecto.

Otros enlaces útiles sobre .NET relacionados con el rendimiento:

Problemas de CS.NET/MS WSDL 2.0 (o versiones superiores)

Hemos recibido informes de afiliados que han tenido problemas a la hora de generar el archivo HotelFunctions.cs para C#. Parece que el problema sucede con WSDL 2.0 o con versiones superiores. WSDL 1.1, y las versiones inferiores, no crean elementos adicionales cuando se genera el archivo de origen.

Según los informes, este procedimiento crea su propio elemento denominado hotelIdSpecified junto con otros elementos nillable y está especificado de forma predeterminada como "false".

  • Esto causa que el ID de hotel se omita en la solicitud (o cualquier otro elemento que genere este elemento "specified") y, por tanto, se produce un error que indica que no se puede resolver el ID de hotel.
  • Debes cambiarlo manualmente en el código a "true" para que C# envíe el ID de hotel (o cualquier otro elemento que cree el elemento especificado), que puede ser obligatorio para recibir los resultados sobre disponibilidad.
  • El elemento hotelIdSpecified (o cualquier otro elemento "specified") no forma parte de los objetos de WSDL o de la solicitud de servicios web y, por tanto, no lo encontrarás en la documentación.
  • No se ha observado este problema con VB.NET ni con MS WSDL 1.1 y no se crea el elemento nuevo cuando se genera el archivo HotelFunctions.vb.

Si tienes más información sobre este problema, ponte en contacto con nosotros para que podamos incluirla o podamos corregir la información actual publicada.

En VS, un reemplazo en el documento mediante expresiones regulares:
buscar:   private bool {.*}FieldSpecified;
sustituir:   private bool \1FieldSpecified = true;