Przeglądasz dokumentację Apigee Edge.
Przejdź do
Dokumentacja Apigee X. informacje.
Zasada SOAPMessageValidation wykonuje te działania:
- Sprawdza każdą wiadomość XML pod kątem ich schematów XSD
- Sprawdza poprawność komunikatów SOAP pod kątem definicji WSDL
- Określa poprawność formatu komunikatów JSON i XML
Nazwa tej zasady w interfejsie to „SOAP Message Validation”, ale zasada weryfikuje więcej niż tylko komunikaty SOAP. Ta sekcja określa zasady jako „Zasady weryfikacji wiadomości”.
<MessageValidation>
element
Definiuje zasadę weryfikacji wiadomości.
Wartość domyślna | Zobacz kartę Zasady domyślne poniżej |
Wymagany? | Opcjonalnie |
Typ | Złożony obiekt |
Element nadrzędny | nie dotyczy |
Elementy podrzędne |
<DisplayName> <Element> <ResourceURL> <SOAPMessage> <Source> |
Składnia
Element <MessageValidation>
ma taką składnię:
<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>
Domyślna zasada
Poniższy przykład pokazuje ustawienia domyślne, gdy dodajesz zasadę weryfikacji wiadomości. do procesu w interfejsie 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>
Ten element ma te atrybuty, które są wspólne dla wszystkich zasad:
Atrybut | Domyślnie | Wymagany? | Description |
---|---|---|---|
name |
Nie dotyczy | Wymagane |
Wewnętrzna nazwa zasady. Wartość atrybutu Opcjonalnie użyj elementu |
continueOnError |
fałsz | Opcjonalnie | Ustaw wartość „false”, aby wyświetlać błąd, gdy zasada nie działa. To prawidłowy proces w przypadku większości zasad. Ustaw wartość „true”, aby kontynuować wykonywanie przepływu nawet po wystąpieniu błędu. |
enabled |
prawda | Opcjonalnie | Ustaw wartość „true”, aby egzekwować zasadę. Ustaw wartość „false”, aby wyłączyć zasadę. Zasada nie będzie egzekwowana, nawet jeśli pozostanie powiązana z przepływem. |
async |
fałsz | Wycofano | Ten atrybut został wycofany. |
Przykłady
Poniższe przykłady pokazują niektóre sposoby korzystania z funkcji walidacji wiadomości. zasady:
1. Weryfikacja XSD
Za pomocą zasady walidacji wiadomości możesz zweryfikować ładunek żądania wiadomości XML ze schematem XSD.
- Utwórz nowy plik zasobów XSD. Dla:
na przykład „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>
- Dodaj zasadę weryfikacji komunikatów SOAP do procesu wstępnego sprawdzania punktu końcowego serwera proxy:
<ResourceURL>
pozwala określić lokalizację pliku zasobów XSD . Na przykład:... <ResourceURL>xsd://note-schema.xsd</ResourceURL> ...
- Usuń elementy
<SOAPMessage>
i<Element>
z definicji zasad.
Definicja zasady powinna wyglądać tak:
<MessageValidation continueOnError="false" enabled="true" name="validateXMLRequest"> <DisplayName>My XML Validator</DisplayName> <Properties/> <Source>request</Source> <ResourceURL>xsd://note-schema.xsd</ResourceURL> </MessageValidation>
- Wyślij żądanie
POST
do serwera proxy interfejsu API z kodem XML jako komunikatem. ładunek, jak w tym przykładzie: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>'
Zwróć uwagę, że nagłówek
Content-type
jest ustawiony na „application/xml”.Możesz też utworzyć plik danych dla ładunku i odwołać się do niego za pomocą polecenia podobnie jak poniżej:
curl -v -X POST -H 'Content-type: application/xml' http://my-test.apigee.net/v1/xsd-mock --data '@../examples/note-payload.xml'
Otrzymasz odpowiedź HTTP 200
. W zależności od docelowego punktu końcowego
możesz otrzymać dodatkowe informacje o tej prośbie. Na przykład, jeśli używasz
http://httpbin.org/post
jako docelowy punkt końcowy i określ -v
(wyczerpująco), odpowiedź powinna być podobna do tej:
< 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" }
Aby sprawdzić, czy weryfikacja XSD działa, spróbuj wstawić inny tag do treści na Twoją prośbę. Na przykład:
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>'
Powinien pojawić się błąd weryfikacji.
2. Weryfikacja SOAP
Za pomocą zasady walidacji wiadomości możesz zweryfikować ładunek żądania komunikatu SOAP wobec WSDL.
- Utwórz nowy plik zasobów WSDL. Na przykład „example-wsdl.wsdl”:
- Dodaj zasadę weryfikacji komunikatów SOAP do procesu wstępnego sprawdzania punktu końcowego serwera proxy:
- Ustaw atrybut
version
elementu<SOAPMessage>
na wersji protokołu SOAP, w której chcesz sprawdzić poprawność. Przykład: „1.1”:... <SOAPMessage version="1.1"/> ...
- Ustaw wartość elementu
<Element>
jako elementu, który chcesz ustawić. weryfikuj:... <Element namespace="https://example.com/gateway">getID</Element> ...
<Element>
określa pierwszy element podrzędny w elemencie<Body>
w kopercie żądania SOAP.Ustaw atrybut
namespace
na przestrzeń nazw tego elementu podrzędnego. <ResourceURL>
pozwala określić lokalizację pliku zasobów WSDL . Na przykład:... <ResourceURL>wsdl://example-wsdl.wsdl</ResourceURL> ...
Definicja zasady powinna wyglądać tak:
<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>
- Ustaw atrybut
- Wyślij żądanie
POST
do serwera proxy interfejsu API z kopertą SOAP jako ładunek wiadomości, jak w tym przykładzie: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>'
Zwróć uwagę, że nagłówek
Content-type
jest ustawiony na „application/xml”.Możesz też utworzyć plik danych dla ładunku i odwołać się do niego za pomocą polecenia podobnie jak poniżej:
curl -v -X POST -H 'Content-type: application/xml' http://my-test.apigee.net/v1/xsd-mock --data '@../examples/soap-payload.xml'
Otrzymasz odpowiedź HTTP 200
. W zależności od docelowego punktu końcowego
możesz otrzymać dodatkowe informacje o tej prośbie. Na przykład, jeśli używasz
http://httpbin.org/post
jako docelowy punkt końcowy, odpowiedź powinna być podobna
na:
< 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. Prawidłowy format XML/JSON
Za pomocą zasady walidacji wiadomości możesz potwierdzić, że ładunek wiadomości w formacie JSON lub XML jest prawidłowo sformułowany (to nie to samo co weryfikacja). Zasada zapewnia, że struktura oraz treści spełniają przyjęte standardy, takie jak:
- Występuje jeden pierwiastek
- treść nie zawiera niedozwolonych znaków,
- Obiekty i tagi są prawidłowo zagnieżdżone
- Jednakowe tagi początkowe i końcowe
Aby sprawdzić poprawność formatu ładunku XML lub JSON:
- Dodaj zasadę weryfikacji wiadomości SOAP do procesu wstępnego sprawdzania punktu końcowego serwera proxy.
- Usuń
<ResourceURL>
,<SOAPMessage>
, i<Element>
z definicji zasady.Definicja zasady powinna wyglądać tak:
<MessageValidation async="false" continueOnError="false" enabled="true" name="validateXMLRequest"> <DisplayName>My JSON Checker</DisplayName> <Properties/> <Source>request</Source> </MessageValidation>
- Wyślij żądanie
POST
do serwera proxy interfejsu API, jak w tym przykładzie: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." } }'
Zwróć uwagę, że nagłówek
Content-type
ma wartość „application/json”.Aby sprawdzić poprawność pliku XML, użyj formatu XML jako ładunku wiadomości i ustaw
Content-type
na „application/xml”.
Otrzymasz odpowiedź HTTP 200
. Gdy wysyłasz ładunek wiadomości
który nie zawiera poprawnie sformatowanego kodu XML lub JSON, powinien zostać zwrócony błąd
steps.messagevalidation.Failed
błąd.
Odniesienie do elementu podrzędnego
W tej sekcji opisano elementy podrzędne elementu <MessageValidation>
.
<DisplayName>
Używaj oprócz atrybutu name
do oznaczania zasady w
edytor serwera proxy w interfejsie zarządzania o innej, bardziej naturalnie brzmiącej nazwie.
Element <DisplayName>
jest wspólny dla wszystkich zasad.
Wartość domyślna | nie dotyczy |
Wymagany? | Opcjonalnie: Jeśli pominiesz <DisplayName> , wartość pary klucz-wartość
jest używany atrybut name zasady |
Typ | Ciąg znaków |
Element nadrzędny | <PolicyElement> |
Elementy podrzędne | Brak |
Element <DisplayName>
ma taką składnię:
Składnia
<PolicyElement> <DisplayName>policy_display_name</DisplayName> ... </PolicyElement>
Przykład
<PolicyElement> <DisplayName>My Validation Policy</DisplayName> </PolicyElement>
Element <DisplayName>
nie ma atrybutów ani elementów podrzędnych.
<Element>
Określa element wiadomości do sprawdzenia. To jest pierwsze dziecko poniżej
<Body>
element w kopercie żądania SOAP.
Wartość domyślna | sampleObject |
Wymagany? | Opcjonalnie |
Typ | Ciąg znaków |
Element nadrzędny |
<MessageValidation>
|
Elementy podrzędne | Brak |
Element <Element>
ma taką składnię:
Składnia
... <Element namespace="element_namespace">element_to_validate</Element> ...
Przykład 1
Ten przykład wskazuje 1 element do zweryfikowania:
... <Element namespace="https://example.com/gateway">getID</Element> ...
Przykład 2
Możesz określić więcej niż 1 element do zweryfikowania, dodając kilka elementów <Element>
elementy:
... <Element namespace="https://example.com/gateway">getID</Element> <Element namespace="https://example.com/gateway">getDetails</Element> ...
Element <Element>
ma te atrybuty:
Atrybut | Domyślny | Wymagana? | Opis |
---|---|---|---|
namespace |
"http://sample.com" | Opcjonalnie | Określa przestrzeń nazw elementu do zweryfikowania. |
<ResourceURL>
Określa schemat XSD lub definicję WSDL używaną do weryfikacji komunikatu źródłowego.
Wartość domyślna | wsdl://display_name.wsdl |
Wymagany? | Opcjonalnie |
Typ | Ciąg znaków |
Element nadrzędny |
<MessageValidation>
|
Elementy podrzędne | Brak |
Element <ResourceURL>
ma taką składnię:
Składnia
... <ResourceURL>[wsdl|xsd]://validation_WSDL_or_XSD</ResourceURL> ...
Przykłady
W przypadku pliku XML:
... <ResourceURL>xsd://note-schema.xsd</ResourceURL> ...
W przypadku WSDL:
... <ResourceURL>wsdl://example-wsdl.wsdl</ResourceURL> ...
Wartość <ResourceURL>
musi wskazywać zasób
w serwerze proxy interfejsu API. Nie może odnosić się do zasobów zewnętrznych przez HTTP ani HTTPS.
Jeśli nie określisz wartości w polu <ResourceURL>
, wiadomość będzie sprawdzana pod kątem poprawności formatu JSON.
lub XML, jeśli nagłówek Content-type
to „application/json” lub „application/xml”,
.
Element <ResourceURL>
nie ma elementów podrzędnych ani atrybutów.
Używanie plików XSD do walidacji
Jeśli ładunek XML weryfikowany przez Ciebie za pomocą odniesień do zasady weryfikacji wiadomości
inny schemat, musisz poprzedzić dołączony plik XSD prefiksem xsd
w
schemaLocation
.
Ten przykładowy schemat składa się z wielu plików 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>
Używanie WSDL do weryfikacji
WSDL musi definiować co najmniej 1 schemat. Jeśli nie odwołuje się do co najmniej jednego schematu, definicja Zasada weryfikacji wiadomości kończy się niepowodzeniem.
Maksymalna głębokość importu dla schematu to 10. Jeśli przekroczysz tę liczbę zagnieżdżonych importów, Zasada weryfikacji wiadomości kończy się niepowodzeniem.
<SOAPMessage>
Definiuje wersję SOAP, z którą jest weryfikowana zasada walidacji wiadomości.
Wartość domyślna | nie dotyczy |
Wymagany? | Opcjonalnie |
Typ | nie dotyczy |
Element nadrzędny |
<MessageValidation>
|
Elementy podrzędne | Brak |
Element <SOAPMessage>
ma taką składnię:
Składnia
... <SOAPMessage version="[ 1.1 | 1.2 | 1.1/1.2 ]"/> ...
Przykład
... <SOAPMessage version="1.1"/> ...
Element <SOAPMessage>
ma te atrybuty:
Atrybut | Domyślny | Wymagana? | Opis |
---|---|---|---|
version |
Brak | Opcjonalnie | Wersja SOAP używana przez tę zasadę do weryfikacji komunikatów SOAP.
Prawidłowe wartości to:
|
Więcej informacji: Z SOAP/1.1 do SOAP Wersja 1.2 w 9 punktach.
<Source>
Identyfikuje komunikat źródłowy do zweryfikowania. Wartość tego elementu to nazwa elementu wiadomość, którą chcesz sprawdzić.
Jeśli nie skonfigurujesz zasady <Source>
, domyślnie zostanie użyta wartość „wiadomość”, która odnosi się do kompletnego
z żądaniem (w ramach procesu żądania) lub wiadomości z odpowiedzią (w ramach procesu odpowiedzi), w tym:
ładunek. Możesz też wprost wybrać dla niego wartość „request”. lub „odpowiedź” lub odwołać się do prośby
.
Wartość domyślna | żądanie |
Wymagany? | Opcjonalnie |
Typ | Ciąg znaków |
Element nadrzędny |
<MessageValidation>
|
Elementy podrzędne | Brak |
Element <Source>
ma taką składnię:
Składnia
... <Source>message_to_validate</Source> ...
Przykład
... <Source>request</Source> ...
Oprócz opcji „wiadomość”, „żądanie” i „odpowiedź” możesz ustawić wartość
<Source>
do nazwy dowolnej wiadomości w przepływie. Jeśli to zrobisz, musisz utworzyć
komunikat niestandardowy o tej nazwie w przepływie przed wykonaniem tej zasady. W przeciwnym razie otrzymasz
błąd.
Jeśli wartości <Source>
nie można znaleźć w przepływie wiadomości lub przekształca się w wartość inną niż wiadomość
, zachodzi jedna z tych sytuacji:
- Jeśli wartość to null: krawędź zgłasza
steps.messagevalidation.SourceMessageNotAvailable
błąd. - Jeśli typ inny niż wiadomość: Edge przesyła
steps.messagevalidation.NonMessageVariable
błąd.
Element <Source>
nie ma atrybutów ani elementów podrzędnych.
Kody błędów
Błędy zwracane przez zasady Edge mają spójny format opisany w dokumentacji kodu błędów.
W tej sekcji opisujemy kody błędów i komunikaty o błędach, które są zwracane, oraz zmienne błędów ustawiane przez Edge, gdy ta zasada wywołuje błąd. Te informacje są ważne, jeśli opracowujesz reguły dotyczące błędów do obsługi takich błędów. Więcej informacji znajdziesz w sekcjach Co musisz wiedzieć o błędach zasad i Postępowanie w przypadku błędów.
Błędy w czasie wykonywania
Te błędy mogą wystąpić podczas wykonywania zasady.
Kod błędu | Stan HTTP | Przyczyna | Napraw |
---|---|---|---|
steps.messagevalidation.SourceMessageNotAvailable |
500 |
Ten błąd występuje, jeśli zmienna określona w elemencie
|
build |
steps.messagevalidation.NonMessageVariable |
500 |
Ten błąd występuje, jeśli element Zmienne typu wiadomości reprezentują całe żądania i odpowiedzi HTTP. Wbudowane zmienne przepływu Edge |
build |
steps.messagevalidation.Failed |
500 | Ten błąd występuje, jeśli zasada SOAPMessageValidation nie sprawdza poprawności ładunku wejściowego wiadomości w odniesieniu do schematu XSD lub definicji WSDL. Ten błąd może wystąpić również wtedy, gdy w wiadomości z ładunkiem występuje nieprawidłowy format JSON lub XML. | build |
Błędy wdrażania
Te błędy mogą wystąpić podczas wdrażania serwera proxy zawierającego te zasady.
Nazwa błędu | Przyczyna | Napraw |
---|---|---|
InvalidResourceType |
Element <ResourceURL> w zasadzie SOAPMessageValidation jest ustawiony na typ zasobu, który nie jest obsługiwany przez tę zasadę.
|
build |
ResourceCompileFailed |
Skrypt zasobów, do którego odwołuje się element <ResourceURL> zasady SOAPMessageValidation, zawiera błąd uniemożliwiający mu kompilowanie.
|
build |
RootElementNameUnspecified |
Element <Element> w zasadzie SOAPMessageValidation nie zawiera nazwy elementu głównego. |
build |
InvalidRootElementName |
Element <Element> w zasadzie SOAPMessageValidation zawiera nazwę elementu głównego, która jest niezgodna z regułami XML dotyczącymi prawidłowych nazw elementów. |
build |
Schematy
Każdy typ zasad jest definiowany przez schemat XML (.xsd
). Schematy zasad
są dostępne na GitHubie.