Solución de problemas de errores de implementación de la política de validación de mensajes SOAP

Estás viendo la documentación de Apigee y Apigee Hybrid.
Consulta la documentación de Apigee Edge.

InvalidResourceType

Mensaje de error

Si la implementación del proxy de API a través de la IU de Apigee o la API falla, mostrará con este mensaje de error:

Error Deploying Revision revision_number to environment
MessageValidation soap_message_validation_policy: Invalid Resource Type resource_type. It should be xsd or wsdl. Context Revision:revision_number;APIProxy:apiproxy_name;Organization:organization;Environment:environment.

Ejemplo de mensaje de error

Error Deploying Revision 1 to test
MessageValidation SOAP-Message-Validation-1: Invalid Resource Type py.
It should be xsd or wsdl. Context Revision:1;APIProxy:soapmessagevalidation;
Organization:gsc-hipaa;Environment:test.

Captura de pantalla de error de ejemplo

Mensaje de error: Recurso no válido.

Causa

Este error se produce si el elemento <ResourceURL> en la política SOAPMessageValidation se establece como un tipo de recurso que no es compatible con la política. Los tipos de recursos compatibles son xsd y wsdl.

Diagnóstico

  1. Identifica el nombre de la política SOAPMessageValidation y el tipo de recurso no válido que se usa en el elemento <ResourceURL> de la política. Puedes encontrar ambos elementos en el mensaje de error. Por ejemplo, en el siguiente error, el nombre de la política SOAPMessageValidation es SOAP-Message-Validation-1 y el tipo de recurso es py.

    Error Deploying Revision 1 to test
    MessageValidation SOAP-Message-Validation-1: Invalid Resource Type py. It should
    be xsd or wsdl. Context Revision:1;APIProxy:soapmessagevalidation;Organization:gsc-
    hipaa;Environment:test.
    
  2. Examina el XML de la política SOAPMessageValidation con errores. Si el tipo de recurso especificado para el elemento <ResourceURL> coincide con el tipo de recurso no válido identificado en el paso 1, esa es la causa del error.

    Por ejemplo, la siguiente política especifica la URL del recurso como py, que coincide con lo que contiene el mensaje de error:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <MessageValidation async="false" continueOnError="false" enabled="true"
        name="SOAP-Message-Validation-1">
        <DisplayName>SOAP Message Validation-1</DisplayName>
        <Properties/>
        <Element namespace="http://sample.com"> sampleObject</Element>
        <SOAPMessage/>
        <Source>request</Source>
        <ResourceURL>py://Script-1.py</ResourceURL>
    </MessageValidation>
    

    Debido a que el tipo de recurso utilizado en <ResourceURL> no es xsd ni wsdl, la implementación fallará y se mostrará el error anterior.

Solución

Asegúrate de que el tipo de recurso especificado en el elemento <ResourceURL> de la política SOAPMessageValidation esté configurado como xsd o wsdl, y que el archivo de recursos use el formato correcto.

Para corregir la política SOAPMessageValidation de ejemplo que se muestra arriba, puedes modificar el tipo de recurso por xsd o wsdl:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<MessageValidation async="false" continueOnError="false" enabled="true"
name="SOAP-Message-Validation-1">
    <DisplayName>SOAP Message Validation-1</DisplayName>
    <Properties/>
    <Element namespace="http://sample.com"> sampleObject</Element>
    <SOAPMessage/>
    <Source>request</Source>
<ResourceURL>wsdl://SOAP-Message-Validation-1.wsdl</ResourceURL>
</MessageValidation>

ResourceCompileFailed

Mensaje de error

Si la implementación del proxy de API a través de la IU de Apigee o la API falla, mostrará con este mensaje de error:

Error Deploying Revision revision_number to environment
MessageValidation soap_message_validation_policy: Failed to compile resource resource. Context Revision:revision_number;APIProxy:apiproxy_name;Organization:organization;Environment:environment.

Ejemplo de mensaje de error

Error Deploying Revision 1 to test
MessageValidation SOAP-Message-Validation-1: Failed to compile resource SOAP-Message-Validation-1.wsdl. Context Revision:1;APIProxy:soapmessagevalidation;Organization:gsc-hipaa;Environment:test.

Captura de pantalla de error de ejemplo

Mensaje de error: No se pudo compilar el recurso.

Causa

Este error se produce si la secuencia de comandos de recursos a la que se hace referencia en el elemento <ResourceURL> de la política SOAPMessageValidation contiene un error que impide compilar durante la implementación.

Diagnóstico

  1. Identifica el nombre de la política SOAPMessageValidation y la secuencia de comandos del recurso que se usa en la política. Puedes encontrar ambos elementos en el mensaje de error. Por ejemplo, en el siguiente error, el nombre de la política SOAPMessageValidation es SOAP-Message-Validation-1 y la secuencia de comandos del recurso es SOAP-Message-Validation-1.wsdl.

    Error Deploying Revision 1 to test
    MessageValidation SOAP-Message-Validation-1: Failed to compile resource
    SOAP-Message-Validation-1.wsdl. Context
    Revision:1;APIProxy:soapmessagevalidation;Organization:gsc-hipaa;
    Environment:test.
    
  2. Examina el archivo XML de la política de SOAPMessageValidation y verifica que la secuencia de comandos de recursos especificada para el elemento <ResourceURL> coincida con el contenido del mensaje de error.

    Por ejemplo, la siguiente política especifica <ResourceURL> como SOAP-Message-Validation-1.wsdl, que coincide con lo que contiene el mensaje de error:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <MessageValidation async="false" continueOnError="false" enabled="true"
    name="SOAP-Message-Validation-1">
        <DisplayName>SOAP Message Validation-1</DisplayName>
        <Properties/>
        <Element namespace="http://sample.com"> sampleObject</Element>
        <SOAPMessage/>
        <Source>request</Source>
        <ResourceURL>wsdl://SOAP-Message-Validation-1.wsdl</ResourceURL>
    </MessageValidation>
    
  3. Consulta el archivo de secuencia de comandos del recurso identificado en el paso 1 y verifica si hay algún problema potencial que pueda generar errores de compilación.

    Este es un archivo de secuencia de comandos de recurso de ejemplo:

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsd/">
        <wsdl:types>
            <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
                <xs:element name="request" type="xs:string"/>
            </xs:schema>
        </wsdl:types>
    </wsdl:definitions>
    

    Debido a que xmlns:wsdl apunta a una URL no válida, la implementación fallará y se mostrará el error anterior.

Solución

Asegúrate de que la secuencia de comandos de recursos especificada en el elemento <ResourceURL> de la política SOAPMessageValidation no tenga problemas que impidan la compilación.

Si quieres corregir la secuencia de comandos SOAP-Message-Validation-1.wsdl que se muestra arriba, puedes modificar xmlns:wsdl para que apunte a una URL válida:

<?xml version="1.0" encoding="ISO-8859-1"?>
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
    <wsdl:types>
        <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
            <xs:element name="request" type="xs:string"/>
        </xs:schema>
    </wsdl:types>
</wsdl:definitions>

RootElementNameUnspecified

Mensaje de error

Guardar el proxy de API a través de la IU o la API de Apigee falla con este mensaje de error:

Error Saving Revision revision_number
MessageValidation soap_message_validation_policy:
RootElement name is not specified.

Ejemplo de mensaje de error

Error Saving Revision 2
MessageValidation SOAP-Message-Validation-1: RootElement name is not specified.

Captura de pantalla de error de ejemplo

El nombre de RootElement no especificó el mensaje de error.

Causa

Este error se produce si el elemento <Element> en la política SOAPMessageValidation no contiene el nombre del elemento raíz.

Diagnóstico

  1. Identifica el nombre de la política SOAPMessageValidation en la que se produjo el error. Por ejemplo, en el siguiente error, el nombre de la política SOAPMessageValidation es SOAP-Message-Validation-1:

    Error Saving Revision 2
    MessageValidation SOAP-Message-Validation-1: RootElement name is not specified.
    
  2. Examina el XML de la política SOAPMessageValidation con errores. Si el nombre del elemento raíz que se usa para la validación no se especifica en el elemento <Element>, esa es la causa del error.

    Por ejemplo, la siguiente política no especifica el nombre del elemento raíz:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <MessageValidation async="false" continueOnError="false" enabled="true"
    name="SOAP-Message-Validation-1">
        <DisplayName>SOAP Message Validation-1</DisplayName>
        <Properties/>
        <Element namespace="http://schemas.xmlsoap.org/soap/prices"/>
        <SOAPMessage/>
        <Source>request</Source>
        <ResourceURL>xsd://Script-1.xsd</ResourceURL>
    </MessageValidation>
    

    Debido a que no se especifica el nombre del elemento raíz, la implementación fallará y se mostrará el error que aparece arriba.

Solución

Asegúrate de que el elemento <Element> de la política SOAPMessageValidation contenga el elemento raíz correcto.

Para corregir la política SOAPMessageValidation anterior, puedes modificar el <Element> y agregar un elemento raíz válido, como se muestra a continuación:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<MessageValidation async="false" continueOnError="false" enabled="true"
name="SOAP-Message-Validation-1">
    <DisplayName>SOAP Message Validation-1</DisplayName>
    <Properties/>
    <Element namespace="http://schemas.xmlsoap.org/soap/prices">GetPriceResponse</Element>
    <SOAPMessage/>
    <Source>request</Source>
    <ResourceURL>xsd://Script-1.xsd</ResourceURL>
</MessageValidation>

InvalidRootElementName

Mensaje de error

Guardar el proxy de API a través de la IU o la API de Apigee falla con este mensaje de error:

Error Saving Revision revision_number
MessageValidation soap_message_validation_policy: RootElement name root_element_name is invalid.

Ejemplo de mensaje de error

Error Saving Revision 2
MessageValidation SOAP-Message-Validation-1: RootElement name 1GetPriceResponse
is invalid.

Captura de pantalla de error de ejemplo

El nombre de elemento RootElement 1GetPriceResponse es un mensaje de error no válido.

Causa

Este error ocurre si el elemento <Element> en la política SOAPMessageValidation contiene un nombre de elemento raíz que no cumple con las reglas XML para otorgar nombres válidos a elementos.

Diagnóstico

  1. Identifica el nombre de la política SOAPMessageValidation en la que se produjo el error. Por ejemplo, en el siguiente error, el nombre de la política SOAPMessageValidation es SOAP-Message-Validation-1:

    Error Saving Revision 2
    MessageValidation SOAP-Message-Validation-1: RootElement name 1GetPriceResponse
    is invalid.
    
  2. Examina el XML de la política SOAPMessageValidation con errores. Si el nombre del elemento raíz especificado en el elemento <Element> no coincide con los criterios de nombre válido del elemento XML, esa es la causa del error.

    Por ejemplo, la siguiente política tiene un nombre de elemento raíz que comienza con un número, lo que no es válido. Un nombre de elemento que contenga espacios tampoco sería válido.

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <MessageValidation async="false" continueOnError="false" enabled="true"
    name="SOAP-Message-Validation-1">
        <DisplayName>SOAP Message Validation-1</DisplayName>
        <Properties/>
         <Element namespace="http://schemas.xmlsoap.org/soap/prices">1GetPriceResponse</Element>
        <SOAPMessage/>
        <Source>request</Source>
        <ResourceURL>xsd://Script-1.xsd</ResourceURL>
    </MessageValidation>
    

Solución

Asegúrate de que el elemento <Element> de la política SOAPMessageValidation contenga un nombre de elemento raíz válido.

Para corregir la política SOAPMessageValidation anterior, puedes modificar el elemento <Element> a fin de que contenga un nombre de elemento raíz válido, como se muestra a continuación:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<MessageValidation async="false" continueOnError="false" enabled="true" name="SOAP-Message-Validation-1">
    <DisplayName>SOAP Message Validation-1</DisplayName>
    <Properties/>
    <Element namespace="http://schemas.xmlsoap.org/soap/prices">GetPriceResponse</Element>
    <SOAPMessage/>
    <Source>request</Source>
    <ResourceURL>xsd://Script-1.xsd</ResourceURL>
</MessageValidation>

NoElements

Mensaje de error

La implementación del proxy de API a través de la IU o la API de Apigee falla con este mensaje de error:

Error Deploying Revision revision_number
Resource "resource_url" has no element definitions.

Ejemplo de mensaje de error

Error Deploying Revision 2 to test
Resource "xsd://Script-1.xsd" has no element definitions.

Captura de pantalla de error de ejemplo

Mensaje de error: El recurso no tiene definiciones de elementos.

Causa

Este error ocurre si el archivo de recursos especificado en el elemento <Resource> de la política SOAPMessageValidation no contiene ningún elemento que se pueda usar para la validación.

Diagnóstico

  1. Identifica las definiciones de elementos faltantes del archivo de recursos en el mensaje de error. Por ejemplo, en el siguiente error, el archivo de recursos utilizado es xsd://Script-1.xsd:

    Error Deploying Revision 2 to test
    Resource "xsd://Script-1.xsd" has no element definitions.
    
  2. Examina el archivo de recursos identificado en el paso 1. Si no hay elementos definidos, esa es la causa del error.

    Por ejemplo, el siguiente archivo de recursos Script-1.xsd no contiene ningún elemento:

    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    </xsd:schema>
    

    Dado que el archivo de recursos no tiene ningún elemento, la implementación fallará y mostrará el error anterior.

Solución

Asegúrate de que el archivo de recursos utilizado en la política SOAPMessageValidation contenga las definiciones de elementos relevantes.

A fin de corregir el archivo de recursos de ejemplo que se muestra arriba, puedes modificar el archivo xsd para agregar el siguiente contenido:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="shipOrder" type="order"/>
<xsd:complexType name="order">
<xsd:sequence>
<xsd:element name="shipTo" type="shipAddress"/>
<xsd:element name="items" type="cdItems"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="shipAddress">
<xsd:sequence>
<xsd:element name="name" type="xsd:string"/>
<xsd:element name="street" type="xsd:string"/>
<xsd:element name="address" type="xsd:string"/>
<xsd:element name="country" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="cdItems">
<xsd:sequence>
<xsd:element name="item" type="cdItem" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="cdItem">
<xsd:sequence>
<xsd:element name="title" type="xsd:string"/>
<xsd:element name="quantity" type="xsd:integer"/>
<xsd:element name="price" type="xsd:decimal"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>