es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Mulesoft RAML – Especificación de API con esquema de cuerpo de solicitud y esquema de cuerpo de respuesta en archivo XSD anidado.

Estoy tratando de crear una especificación de API con un esquema de cuerpo de solicitud y un esquema de cuerpo de respuesta que hace referencia a dos archivos XSD OTACancelRQ.xsd y OTACancelRS.xsd.

Mi problema es que el archivo OTACancelRQ.xsd hace referencia a dos archivos XSD “OTACommonTypes.xsd” y “OTA_SimpleTypes.xsd” con una cadena xs:include.

Si uso esta especificación de API con un proyecto en Anypoint Studio y llamo al método OTACancelRQ con una solicitud de cuerpo XML, tengo un error que dice “No se puede resolver el nombre ‘OTAPayloadStdAttributes’ a un componente de ‘grupo de atributos'”, pero el componente ‘OTAPayloadStdAttributes’ está contenido en el archivo “OTACommonTypes.xsd”.

También intenté con el comando “xs:import”, pero el resultado final es el mismo “No se puede resolver el nombre ‘OTA_PayloadStdAttributes’ a un componente de ‘grupo de atributos'”.

Mi pregunta es: ¿es posible crear una especificación de API con un esquema XSD que haga referencia a otro archivo XSD local?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible crear una especificación de API con un esquema XSD que referencia otro archivo XSD local. De hecho, es una práctica común modularizar los esquemas XSD en componentes más pequeños y reutilizables.

    Para resolver el error que estás encontrando, debes asegurarte de que los archivos XSD referenciados también estén incluidos o importados en tu documento de especificación de API. Dependiendo de la herramienta o plataforma que estés utilizando, puede haber diferentes formas de hacer esto.

    En MuleSoft Anypoint Studio, puedes intentar los siguientes pasos:

    1. Crea una carpeta en tu proyecto para almacenar los archivos XSD, por ejemplo, “src/main/resources/xsd”.
    2. Copia los tres archivos XSD (“OTA_CancelRQ.xsd”, “OTA_CommonTypes.xsd” y “OTA_SimpleTypes.xsd”) en la carpeta.
    3. En tu documento de especificación de API (por ejemplo, archivo RAML), utiliza rutas relativas para referenciar los archivos XSD. Por ejemplo:
    #%RAML 1.0
    title: My API
    baseUri: http://localhost:8081
    mediaType: application/xml
    
    types:
      CancelRQ:
        schema: !include xsd/OTA_CancelRQ.xsd
      CancelRS:
        schema: !include xsd/OTA_CancelRS.xsd
    

    Ten en cuenta que se utiliza la directiva !include para incluir los archivos XSD.

    1. En tu aplicación Mule, puedes utilizar un componente “Schema” para validar los cuerpos de solicitud y respuesta contra los esquemas XSD. Por ejemplo:
    <http:listener config-ref="HTTP_Listener_Configuration" path="/cancel" allowedmethods="POST"></http:listener>
    
    <flow name="cancelFlow">
      <http:request method="POST" path="/cancel" config-ref="HTTP_Request_Configuration">
        <http:body>
          <ee:object-to-string></ee:object-to-string>
        </http:body>
        <http:headers>
          <http:header key="Content-Type" value="application/xml"></http:header>
        </http:headers>
        <http:validate-schema schemalocations="xsd/OTA_CancelRQ.xsd,xsd/OTA_CancelRS.xsd"></http:validate-schema>
      </http:request>
    </flow>
    

    Ten en cuenta que se utiliza el componente http:validate-schema para validar los cuerpos de solicitud y respuesta contra los esquemas XSD, especificando la ubicación de los archivos XSD.

    Con estos pasos, deberías poder crear una especificación de API que referencia archivos XSD locales y validar los cuerpos de solicitud y respuesta contra los esquemas XSD en tu aplicación Mule.

Comments are closed.