Stai visualizzando la documentazione di Apigee Edge.
Consulta la
documentazione di Apigee X. info

La policy SOAPMessageValidation esegue le seguenti operazioni:
- Convalida qualsiasi messaggio XML in base ai relativi schemi XSD
- Convalida i messaggi SOAP in base a una definizione WSDL
- Determina la validità dei messaggi JSON e XML
Anche se il nome di questo criterio nell'interfaccia utente è "Convalida messaggio SOAP", il criterio convalida più di semplici messaggi SOAP. In questa sezione, il criterio viene definito "Criterio di convalida dei messaggi".
Elemento <MessageValidation>
Definisce il criterio di convalida dei messaggi.
Valore predefinito | Consulta la scheda Policy predefinita di seguito. |
Obbligatorio? | Facoltativo |
Tipo | Oggetto complesso |
Elemento principale | n/a |
Elementi secondari |
<DisplayName> <Element> <ResourceURL> <SOAPMessage> <Source> |
Sintassi
L'elemento <MessageValidation>
utilizza la seguente sintassi:
<MessageValidation continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <!-- All MessageValidation child elements are optional --> <DisplayName>policy_display_name</DisplayName> <Element namespace="element_namespace">element_to_validate</Element> <SOAPMessage version="[ 1.1 | 1.2 | 1.1/1.2 ]"/> <Source>message_to_validate</Source> <ResourceURL>validation_WSDL_or_XSD</ResourceURL> </MessageValidation>
Norme predefinite
L'esempio seguente mostra le impostazioni predefinite quando aggiungi un criterio di convalida dei messaggi al flusso nell'interfaccia utente Edge:
<MessageValidation 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>
Questo elemento ha i seguenti attributi comuni a tutti i criteri:
Attributo | Predefinita | Obbligatorio? | Description (Descrizione) |
---|---|---|---|
name |
N/A | Obbligatorio |
Il nome interno del criterio. Il valore dell'attributo Facoltativamente, utilizza l'elemento |
continueOnError |
false | Facoltativo | Imposta su "false" per restituire un errore quando un criterio non va a buon fine. Si tratta di un comportamento previsto per la maggior parte dei criteri. Impostalo su "true" per far sì che l'esecuzione del flusso continui anche dopo l'esito negativo di un criterio. |
enabled |
true | Facoltativo | Imposta su "true" per applicare il criterio. Imposta su "false" per "disattivare" il criterio. Il criterio non verrà applicato anche se rimane collegato a un flusso. |
async |
false | Deprecazione | Questo attributo è obsoleto. |
Esempi
Gli esempi seguenti mostrano alcuni modi in cui puoi utilizzare il criterio di convalida dei messaggi:
1: Convalida XSD
Puoi utilizzare il criterio di convalida dei messaggi per convalidare il payload di una richiesta di messaggio XML in base a uno schema XSD.
- Crea un nuovo file di risorse XSD. Ad
esempio, "note-schema.xsd":
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="note"> <xs:complexType> <xs:sequence> <xs:element name="to" type="xs:string"/> <xs:element name="from" type="xs:string"/> <xs:element name="heading" type="xs:string"/> <xs:element name="body" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
- Aggiungi il criterio di convalida dei messaggi SOAP al pre-flusso dell'endpoint proxy:
- Specifica la posizione del file di risorse XSD con l'elemento
<ResourceURL>
. Ad esempio:... <ResourceURL>xsd://note-schema.xsd</ResourceURL> ...
- Rimuovi gli elementi
<SOAPMessage>
e<Element>
dalla definizione del criterio.
La definizione del criterio dovrebbe essere simile alla seguente:
<MessageValidation continueOnError="false" enabled="true" name="validateXMLRequest"> <DisplayName>My XML Validator</DisplayName> <Properties/> <Source>request</Source> <ResourceURL>xsd://note-schema.xsd</ResourceURL> </MessageValidation>
- Specifica la posizione del file di risorse XSD con l'elemento
- Invia una richiesta
POST
al proxy API con il tuo XML come payload del messaggio, come mostrato nell'esempio seguente:curl -v -X POST -H 'Content-Type: application/xml' http://my-test.apigee.net/v1/xsd-mock -d '<note> <to>Fred Rogers</to> <from>Nick Danger</from> <heading>Greetings from my neighborhood</heading> <body>Just writing to say hello.</body> </note>'
Tieni presente che l'intestazione
Content-type
è impostata su "application/xml".Puoi anche creare un file di dati per il payload e farvi riferimento con un comando simile al seguente:
curl -v -X POST -H 'Content-type: application/xml' http://my-test.apigee.net/v1/xsd-mock --data '@../examples/note-payload.xml'
Dovresti ricevere una risposta HTTP 200
. A seconda dell'endpoint di destinazione,
potresti ricevere ulteriori dettagli sulla richiesta. Ad esempio, se utilizzi
http://httpbin.org/post
come endpoint di destinazione e specifichi l'output -v
(dettagliato), la risposta dovrebbe essere simile alla seguente:
< HTTP/1.1 200 OK < Date: Wed, 16 May 2018 21:24:54 GMT < Content-Type: application/xml < Content-Length: 431 < Connection: keep-alive < Server: gunicorn/19.8.1 < Access-Control-Allow-Origin: * < Access-Control-Allow-Credentials: true < Via: 1.1 vegur { "args":{}, "data":"<note><to>fred</to><from>nick</from><heading>hello</heading> <body>Just writing to say hello.</body></note>", "files":{}, "form":{}, "headers": { "Accept":"*/*", "Connection":"close", "Content-Length":"106", "Content-Type":"application/xml", "Host":"httpbin.org", "User-Agent":"curl/7.58.0" }, "json":null, "origin":"10.1.1.1, 104.154.179.1", "url":"http://httpbin.org/post" }
Per verificare che la convalida XSD funzioni, prova a inserire un altro tag nel corpo della richiesta. Ad esempio:
curl -v -X POST -H 'Content-Type: application/xml' http://my-test.apigee.net/v1/xsd-mock -d '<note> <to>Fred Rogers</to> <from>Nick Danger</from> <heading>Greetings from my neighborhood</heading> <body>Just writing to say hello.</body> <badTag>Not good</badTag> </note>'
Dovresti ricevere un errore di convalida.
2: Convalida SOAP
Puoi utilizzare il criterio di convalida dei messaggi per convalidare il payload di una richiesta di messaggio SOAP rispetto a un WSDL.
- Crea un nuovo file di risorse WSDL. Ad esempio, "example-wsdl.wsdl":
- Aggiungi il criterio di convalida dei messaggi SOAP al pre-flusso dell'endpoint proxy:
- Imposta l'attributo
version
dell'elemento<SOAPMessage>
sulla versione del protocollo SOAP rispetto alla quale vuoi eseguire la convalida. Ad esempio, "1.1":... <SOAPMessage version="1.1"/> ...
- Imposta il valore dell'elemento
<Element>
sull'elemento che vuoi convalidare:... <Element namespace="https://example.com/gateway">getID</Element> ...
<Element>
specifica il primo elemento secondario dell'elemento<Body>
nel corpo della richiesta SOAP.Imposta l'attributo
namespace
sullo spazio dei nomi per quel figlio. - Specifica la posizione del file di risorse WSDL con l'elemento
<ResourceURL>
. Ad esempio:... <ResourceURL>wsdl://example-wsdl.wsdl</ResourceURL> ...
La definizione del criterio dovrebbe essere simile alla seguente:
<MessageValidation continueOnError="false" enabled="true" name="validateSOAPRequest"> <DisplayName>My SOAP Validator</DisplayName> <Properties/> <Source>request</Source> <SOAPMessage version="1.1"/> <Element namespace="https://example.com/gateway">getID</Element> <ResourceURL>wsdl://example-wsdl.wsdl</ResourceURL> </MessageValidation>
- Imposta l'attributo
- Invia una richiesta
POST
al proxy API con la busta SOAP come payload del messaggio, come mostrato nell'esempio seguente:curl -v -X POST -H 'Content-Type: application/xml' http://my-test.apigee.net/v1/xsd-mock -d '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:prox="https://example.com/gateway" xmlns:typ="https://example.com/gateway/types"> <soapenv:Header/> <soapenv:Body> <prox:getID> <typ:MyType> <typ:ID>42</typ:ID> </typ:MyType> </prox:getID> </soapenv:Body> </soapenv:Envelope>'
Tieni presente che l'intestazione
Content-type
è impostata su "application/xml".Puoi anche creare un file di dati per il payload e farvi riferimento con un comando simile al seguente:
curl -v -X POST -H 'Content-type: application/xml' http://my-test.apigee.net/v1/xsd-mock --data '@../examples/soap-payload.xml'
Dovresti ricevere una risposta HTTP 200
. A seconda dell'endpoint di destinazione,
potresti ricevere ulteriori dettagli sulla richiesta. Ad esempio, se utilizzi
http://httpbin.org/post
come endpoint di destinazione, la risposta dovrebbe essere simile
alla seguente:
< HTTP/1.1 200 OK < Date: Wed, 16 May 2018 21:24:54 GMT < Content-Type: application/xml < Content-Length: 431 < Connection: keep-alive < Server: gunicorn/19.8.1 < Access-Control-Allow-Origin: * < Access-Control-Allow-Credentials: true < Via: 1.1 vegur { "args":{}, "data":"<note><to>fred</to><from>nick</from><heading>hello</heading> <body>Just writing to say hello.</body></note>", "files":{}, "form":{}, "headers": { "Accept":"*/*", "Connection":"close", "Content-Length":"106", "Content-Type":"application/xml", "Host":"httpbin.org", "User-Agent":"curl/7.58.0" }, "json":null, "origin":"10.1.1.1, 104.154.179.1", "url":"http://httpbin.org/post" }
3: XML/JSON ben formato
Puoi utilizzare il criterio di convalida dei messaggi per verificare che il payload di un messaggio JSON o XML sia ben formato (non è la stessa cosa della convalida). Le norme garantiscono che la struttura e i contenuti soddisfino gli standard accettati, tra cui:
- Esiste un solo elemento principale
- Non sono presenti caratteri non ammessi nei contenuti
- Gli oggetti e i tag sono nidificati correttamente
- I tag di inizio e di fine corrispondono
Per verificare la presenza di un payload XML o JSON ben formato:
- Aggiungi il criterio di convalida del messaggio SOAP al pre-flow dell'endpoint proxy.
- Rimuovi gli elementi
<ResourceURL>
,<SOAPMessage>
e<Element>
dalla definizione della norma.La definizione del criterio dovrebbe essere simile alla seguente:
<MessageValidation async="false" continueOnError="false" enabled="true" name="validateXMLRequest"> <DisplayName>My JSON Checker</DisplayName> <Properties/> <Source>request</Source> </MessageValidation>
- Invia una richiesta
POST
al proxy API, come mostrato nell'esempio seguente:curl -v -X POST -H 'Content-Type: application/json' http://my-test.apigee.net/v1/xsd-mock -d '{ "note": { "to": "Fred Rogers", "from": "Nick Danger", "header": "Greetings from my neighborhood", "body": "Just writing to say hello." } }'
Nota che l'intestazione
Content-type
è impostata su "application/json".Per controllare la validità di un file XML, utilizza XML come payload del messaggio e imposta
Content-type
su "application/xml".
Dovresti ricevere una risposta HTTP 200
. Quando invii un payload del messaggio
che non contiene XML o JSON ben formattati, dovresti ricevere un
errore steps.messagevalidation.Failed
.
Riferimento all'elemento secondario
Questa sezione descrive gli elementi secondari di <MessageValidation>
.
<DisplayName>
Utilizza questo attributo in aggiunta all'attributo name
per etichettare il criterio nell'editor proxy dell'interfaccia utente di gestione con un nome diverso e più naturale.
L'elemento <DisplayName>
è comune a tutti i criteri.
Valore predefinito | n/a |
Obbligatorio? | Facoltativo. Se ometti <DisplayName> , viene utilizzato il valore dell'attributo name del criterio. |
Tipo | Stringa |
Elemento principale | <PolicyElement> |
Elementi secondari | Nessuno |
L'elemento <DisplayName>
utilizza la seguente sintassi:
Sintassi
<PolicyElement> <DisplayName>policy_display_name</DisplayName> ... </PolicyElement>
Esempio
<PolicyElement> <DisplayName>My Validation Policy</DisplayName> </PolicyElement>
L'elemento <DisplayName>
non ha attributi o elementi secondari.
<Element>
Specifica l'elemento del messaggio da convalidare. Questo è il primo elemento secondario dell'elemento
<Body>
nell'envelope della richiesta SOAP.
Valore predefinito | sampleObject |
Obbligatorio? | Facoltativo |
Tipo | Stringa |
Elemento principale |
<MessageValidation>
|
Elementi secondari | Nessuno |
L'elemento <Element>
utilizza la seguente sintassi:
Sintassi
... <Element namespace="element_namespace">element_to_validate</Element> ...
Esempio 1
L'esempio seguente definisce un singolo elemento da convalidare:
... <Element namespace="https://example.com/gateway">getID</Element> ...
Esempio 2
Puoi specificare più di un elemento da convalidare aggiungendo più elementi <Element>
:
... <Element namespace="https://example.com/gateway">getID</Element> <Element namespace="https://example.com/gateway">getDetails</Element> ...
L'elemento <Element>
prevede i seguenti attributi:
Attributo | Predefinito | Obbligatorio? | Descrizione |
---|---|---|---|
namespace |
"http://sample.com" | Facoltativo | Definisce lo spazio dei nomi dell'elemento da convalidare. |
<ResourceURL>
Identifica lo schema XSD o la definizione WSDL da utilizzare per convalidare il messaggio di origine.
Valore predefinito | wsdl://display_name.wsdl |
Obbligatorio? | Facoltativo |
Tipo | Stringa |
Elemento principale |
<MessageValidation>
|
Elementi secondari | Nessuno |
L'elemento <ResourceURL>
utilizza la seguente sintassi:
Sintassi
... <ResourceURL>[wsdl|xsd]://validation_WSDL_or_XSD</ResourceURL> ...
Esempi
Per un file XML:
... <ResourceURL>xsd://note-schema.xsd</ResourceURL> ...
Per un WSDL:
... <ResourceURL>wsdl://example-wsdl.wsdl</ResourceURL> ...
Il valore di <ResourceURL>
deve puntare a un file
di risorse nel proxy API. Non può fare riferimento a risorse esterne tramite HTTP o HTTPS.
Se non specifichi un valore per <ResourceURL>
, il messaggio viene controllato per verificare che il formato JSON
o XML sia corretto se l'intestazione Content-type
è "application/json" o "application/xml",
rispettivamente.
L'elemento <ResourceURL>
non ha elementi secondari o attributi.
Utilizzo di XSD per la convalida
Se il payload XML che convalidi con il criterio Convalida messaggio fa riferimento a un altro schema, devi aggiungere il prefisso xsd
al file XSD incluso nell'attributo schemaLocation
.
Lo schema di esempio seguente è composto da più XSD:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:include schemaLocation="xsd://note-schema.xsd"/> <xs:include schemaLocation="xsd://letter-schema.xsd"/> <xs:include schemaLocation="xsd://user-schema.xsd"/> </xs:schema>
Utilizzo di WSDL per la convalida
Un WSDL deve definire almeno uno schema. Se non fa riferimento ad almeno uno schema, il criterio di convalida dei messaggi non viene rispettato.
La profondità massima di importazione per uno schema è 10. Se superi questo numero di importazioni nidificate, il criterio di convalida dei messaggi non va a buon fine.
<SOAPMessage>
Definisce la versione SOAP rispetto alla quale viene convalidato il criterio di convalida dei messaggi.
Valore predefinito | n/a |
Obbligatorio? | Facoltativo |
Tipo | n/a |
Elemento principale |
<MessageValidation>
|
Elementi secondari | Nessuno |
L'elemento <SOAPMessage>
utilizza la seguente sintassi:
Sintassi
... <SOAPMessage version="[ 1.1 | 1.2 | 1.1/1.2 ]"/> ...
Esempio
... <SOAPMessage version="1.1"/> ...
L'elemento <SOAPMessage>
prevede i seguenti attributi:
Attributo | Predefinito | Obbligatorio? | Descrizione |
---|---|---|---|
version |
Nessuno | Facoltativo | La versione SOAP utilizzata da questa policy per convalidare i messaggi SOAP.
I valori validi sono:
|
Per maggiori informazioni, vedi Da SOAP/1.1 a SOAP versione 1.2 in 9 punti.
<Source>
Identifica il messaggio di origine da convalidare. Il valore di questo elemento è il nome del messaggio che vuoi convalidare.
Se non imposti <Source>
, questo criterio viene impostato per impostazione predefinita su "message", che si riferisce al messaggio di richiesta completo (in un flusso di richiesta) o al messaggio di risposta (in un flusso di risposta), incluso qualsiasi payload. Puoi anche impostarlo esplicitamente su "richiesta" o "risposta" per fare riferimento alla richiesta o
alla risposta.
Valore predefinito | richiesta |
Obbligatorio? | Facoltativo |
Tipo | Stringa |
Elemento principale |
<MessageValidation>
|
Elementi secondari | Nessuno |
L'elemento <Source>
utilizza la seguente sintassi:
Sintassi
... <Source>message_to_validate</Source> ...
Esempio
... <Source>request</Source> ...
Oltre a "message", "request" e "response", puoi impostare il valore di
<Source>
sul nome di qualsiasi messaggio nel flusso. Se lo fai, però, devi creare un
messaggio personalizzato con quel nome nel flusso prima dell'esecuzione di queste norme. In caso contrario, riceverai
un errore.
Se il valore di <Source>
non può essere risolto nel flusso di messaggi o viene risolto in un tipo non di messaggio, si verifica una delle seguenti situazioni:
- Se un valore è null:Edge genera un
errore
steps.messagevalidation.SourceMessageNotAvailable
. - Se un tipo non è un messaggio: Edge genera un
errore
steps.messagevalidation.NonMessageVariable
.
L'elemento <Source>
non ha attributi o elementi secondari.
Codici di errore
Gli errori restituiti dalle policy Edge seguono un formato coerente, come descritto nel riferimento ai codici di errore.
This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error. This information is important to know if you are developing fault rules to handle faults. To learn more, see What you need to know about policy errors and Handling faults.
Runtime errors
These errors can occur when the policy executes.
Fault code | HTTP status | Cause | Fix |
---|---|---|---|
steps.messagevalidation.SourceMessageNotAvailable |
500 |
This error occurs if a variable specified in the
|
build |
steps.messagevalidation.NonMessageVariable |
500 |
This error occurs if the Message type variables represent entire HTTP requests and responses. The built-in Edge
flow variables |
build |
steps.messagevalidation.Failed |
500 | This error occurs if the SOAPMessageValidation policy fails to validate the input message payload against the XSD schema or WSDL definition. It will also occur if there is malformed JSON or XML in the payload message. | build |
Deployment errors
These errors can occur when you deploy a proxy containing this policy.
Error name | Cause | Fix |
---|---|---|
InvalidResourceType |
The <ResourceURL> element in the SOAPMessageValidation policy is set to a resource type
not supported by the policy.
|
build |
ResourceCompileFailed |
The resource script referenced in the <ResourceURL> element of the SOAPMessageValidation
policy contains an error that prevents it from compiling.
|
build |
RootElementNameUnspecified |
The <Element> element in the SOAPMessageValidation policy does not contain the root
element's name. |
build |
InvalidRootElementName |
The <Element> element in the SOAPMessageValidation policy contains a root element name
that does not adhere to XML rules for valid element naming. |
build |
Schemi
Ogni tipo di policy è definito da uno schema XML (.xsd
). Per riferimento, gli schemi delle policy
sono disponibili su GitHub.