Anda sedang melihat dokumentasi Apigee Edge.
Buka dokumentasi
Apigee X. info

Kebijakan SOAPMessageValidation melakukan hal berikut:
- Memvalidasi semua pesan XML terhadap skema XSD-nya
- Memvalidasi pesan SOAP terhadap definisi WSDL
- Menentukan format pesan JSON dan XML yang baik
Meskipun nama kebijakan ini di UI adalah "Validasi Pesan SOAP", kebijakan ini memvalidasi lebih dari sekadar pesan SOAP. Bagian ini menyebut kebijakan tersebut sebagai "Kebijakan Validasi Pesan".
Elemen <MessageValidation>
Menentukan kebijakan Validasi Pesan.
Nilai Default | Lihat tab Kebijakan Default di bawah |
Wajib? | Opsional |
Jenis | Objek kompleks |
Elemen Induk | t/a |
Elemen Turunan |
<DisplayName> <Element> <ResourceURL> <SOAPMessage> <Source> |
Sintaksis
Elemen <MessageValidation>
menggunakan sintaksis berikut:
<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>
Kebijakan Default
Contoh berikut menunjukkan setelan default saat Anda menambahkan kebijakan Validasi Pesan ke alur di UI 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>
This element has the following attributes that are common to all policies:
Attribute | Default | Required? | Description |
---|---|---|---|
name |
N/A | Required |
The internal name of the policy. The value of the Optionally, use the |
continueOnError |
false | Optional | Set to "false" to return an error when a policy fails. This is expected behavior for most policies. Set to "true" to have flow execution continue even after a policy fails. |
enabled |
true | Optional | Set to "true" to enforce the policy. Set to "false" to "turn off" the policy. The policy will not be enforced even if it remains attached to a flow. |
async |
false | Deprecated | This attribute is deprecated. |
Contoh
Contoh berikut menunjukkan beberapa cara Anda dapat menggunakan kebijakan Validasi Pesan:
1: Validasi XSD
Anda dapat menggunakan kebijakan Validasi Pesan untuk memvalidasi payload permintaan pesan XML terhadap skema XSD.
- Buat file resource XSD baru. Misalnya, "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>
- Tambahkan kebijakan Validasi Pesan SOAP ke pra-alur endpoint proxy Anda:
- Tentukan lokasi file resource XSD Anda dengan elemen
<ResourceURL>
. Contoh:... <ResourceURL>xsd://note-schema.xsd</ResourceURL> ...
- Hapus elemen
<SOAPMessage>
dan<Element>
dari definisi kebijakan.
Definisi kebijakan Anda akan terlihat seperti berikut:
<MessageValidation continueOnError="false" enabled="true" name="validateXMLRequest"> <DisplayName>My XML Validator</DisplayName> <Properties/> <Source>request</Source> <ResourceURL>xsd://note-schema.xsd</ResourceURL> </MessageValidation>
- Tentukan lokasi file resource XSD Anda dengan elemen
- Kirim permintaan
POST
ke proxy API Anda dengan XML sebagai payload pesan, seperti yang ditunjukkan contoh berikut: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>'
Perhatikan bahwa header
Content-type
ditetapkan ke "application/xml".Anda juga dapat membuat file data untuk payload dan mereferensikannya dengan perintah yang mirip dengan berikut ini:
curl -v -X POST -H 'Content-type: application/xml' http://my-test.apigee.net/v1/xsd-mock --data '@../examples/note-payload.xml'
Anda akan menerima respons HTTP 200
. Bergantung pada endpoint target,
Anda mungkin menerima detail tambahan tentang permintaan. Misalnya, jika Anda menggunakan
http://httpbin.org/post
sebagai endpoint target dan menentukan output
-v
(verbose), responsnya akan mirip dengan berikut:
< 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" }
Untuk memverifikasi bahwa validasi XSD Anda berfungsi, coba sisipkan tag lain ke dalam isi permintaan Anda. Contoh:
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>'
Anda akan menerima error validasi.
2: Validasi SOAP
Anda dapat menggunakan kebijakan Validasi Pesan untuk memvalidasi payload permintaan pesan SOAP terhadap WSDL.
- Buat file resource WSDL baru. Misalnya, "example-wsdl.wsdl":
- Tambahkan kebijakan Validasi Pesan SOAP ke pre-flow endpoint proxy Anda:
- Tetapkan atribut
version
elemen<SOAPMessage>
ke versi protokol SOAP yang ingin Anda validasi. Misalnya, "1.1":... <SOAPMessage version="1.1"/> ...
- Tetapkan nilai elemen
<Element>
ke elemen yang ingin Anda validasi:... <Element namespace="https://example.com/gateway">getID</Element> ...
<Element>
menentukan turunan pertama di bawah elemen<Body>
dalam envelope permintaan SOAP.Tetapkan atribut
namespace
ke namespace untuk turunan tersebut. - Tentukan lokasi file resource WSDL Anda dengan elemen
<ResourceURL>
. Contoh:... <ResourceURL>wsdl://example-wsdl.wsdl</ResourceURL> ...
Definisi kebijakan Anda akan terlihat seperti berikut:
<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>
- Tetapkan atribut
- Kirim permintaan
POST
ke proxy API Anda dengan envelope SOAP sebagai payload pesan, seperti yang ditunjukkan dalam contoh berikut: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>'
Perhatikan bahwa header
Content-type
ditetapkan ke "application/xml".Anda juga dapat membuat file data untuk payload dan mereferensikannya dengan perintah yang mirip dengan berikut ini:
curl -v -X POST -H 'Content-type: application/xml' http://my-test.apigee.net/v1/xsd-mock --data '@../examples/soap-payload.xml'
Anda akan menerima respons HTTP 200
. Bergantung pada endpoint target,
Anda mungkin menerima detail tambahan tentang permintaan. Misalnya, jika Anda menggunakan
http://httpbin.org/post
sebagai endpoint target, responsnya akan mirip
dengan berikut:
< 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 yang disusun dengan baik
Anda dapat menggunakan kebijakan Validasi Pesan untuk mengonfirmasi bahwa payload pesan JSON atau XML terbentuk dengan baik (tidak sama dengan validasi). Kebijakan ini memastikan bahwa struktur dan konten memenuhi standar yang diterima, termasuk:
- Ada satu elemen root
- Tidak ada karakter terlarang dalam konten
- Objek dan tag disusun dengan benar
- Tag awal dan akhir cocok
Untuk memeriksa payload XML atau JSON yang tersusun dengan baik:
- Tambahkan kebijakan Validasi Pesan SOAP ke pra-alur endpoint proxy Anda.
- Hapus elemen
<ResourceURL>
,<SOAPMessage>
, dan<Element>
dari definisi kebijakan.Definisi kebijakan Anda akan terlihat seperti berikut:
<MessageValidation async="false" continueOnError="false" enabled="true" name="validateXMLRequest"> <DisplayName>My JSON Checker</DisplayName> <Properties/> <Source>request</Source> </MessageValidation>
- Kirim permintaan
POST
ke proxy API Anda, seperti yang ditunjukkan contoh berikut: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." } }'
Perhatikan bahwa header
Content-type
ditetapkan ke "application/json".Untuk memeriksa file XML agar memiliki format yang benar, gunakan XML sebagai payload pesan dan tetapkan
Content-type
ke "application/xml".
Anda akan menerima respons HTTP 200
. Saat Anda mengirim payload pesan
yang tidak berisi XML atau JSON yang disusun dengan baik, Anda akan menerima
error steps.messagevalidation.Failed
.
Referensi elemen turunan
Bagian ini menjelaskan elemen turunan <MessageValidation>
.
<DisplayName>
Use in addition to the name
attribute to label the policy in the
management UI proxy editor with a different, more natural-sounding name.
The <DisplayName>
element is common to all policies.
Default Value | n/a |
Required? | Optional. If you omit <DisplayName> , the value of the
policy's name attribute is used |
Type | String |
Parent Element | <PolicyElement> |
Child Elements | None |
The <DisplayName>
element uses the following syntax:
Syntax
<PolicyElement> <DisplayName>policy_display_name</DisplayName> ... </PolicyElement>
Example
<PolicyElement> <DisplayName>My Validation Policy</DisplayName> </PolicyElement>
The <DisplayName>
element has no attributes or child elements.
<Element>
Menentukan elemen dalam pesan yang akan divalidasi. Ini adalah turunan pertama di bawah
elemen <Body>
dalam envelope permintaan SOAP.
Nilai Default | sampleObject |
Wajib? | Opsional |
Jenis | String |
Elemen Induk |
<MessageValidation>
|
Elemen Turunan | Tidak ada |
Elemen <Element>
menggunakan sintaksis berikut:
Sintaksis
... <Element namespace="element_namespace">element_to_validate</Element> ...
Contoh 1
Contoh berikut menentukan satu elemen yang akan divalidasi:
... <Element namespace="https://example.com/gateway">getID</Element> ...
Contoh 2
Anda dapat menentukan lebih dari satu elemen untuk divalidasi dengan menambahkan beberapa elemen <Element>
:
... <Element namespace="https://example.com/gateway">getID</Element> <Element namespace="https://example.com/gateway">getDetails</Element> ...
Elemen <Element>
memiliki atribut berikut:
Atribut | Default | Wajib? | Deskripsi |
---|---|---|---|
namespace |
"http://sample.com" | Opsional | Menentukan namespace elemen yang akan divalidasi. |
<ResourceURL>
Mengidentifikasi skema XSD atau definisi WSDL yang akan digunakan untuk memvalidasi pesan sumber.
Nilai Default | wsdl://display_name.wsdl |
Wajib? | Opsional |
Jenis | String |
Elemen Induk |
<MessageValidation>
|
Elemen Turunan | Tidak ada |
Elemen <ResourceURL>
menggunakan sintaksis berikut:
Sintaksis
... <ResourceURL>[wsdl|xsd]://validation_WSDL_or_XSD</ResourceURL> ...
Contoh
Untuk file XML:
... <ResourceURL>xsd://note-schema.xsd</ResourceURL> ...
Untuk WSDL:
... <ResourceURL>wsdl://example-wsdl.wsdl</ResourceURL> ...
Nilai <ResourceURL>
harus mengarah ke file
resource di proxy API Anda. Tidak dapat merujuk ke resource eksternal melalui HTTP atau HTTPS.
Jika Anda tidak menentukan nilai untuk <ResourceURL>
, pesan akan diperiksa untuk memastikan format JSON
atau XML yang benar jika header Content-type
adalah "application/json" atau "application/xml",
masing-masing.
Elemen <ResourceURL>
tidak memiliki elemen turunan atau atribut.
Menggunakan XSD untuk validasi
Jika payload XML yang Anda validasi dengan kebijakan Validasi Pesan merujuk ke
skema lain, Anda harus menambahkan awalan xsd
pada file XSD yang disertakan di atribut
schemaLocation
.
Contoh skema berikut terdiri dari beberapa 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>
Menggunakan WSDL untuk validasi
WSDL harus menentukan setidaknya satu skema. Jika tidak mereferensikan setidaknya satu skema, kebijakan Validasi Pesan akan gagal.
Kedalaman impor maksimum untuk skema adalah 10. Jika Anda melampaui jumlah impor bertingkat tersebut, kebijakan Validasi Pesan akan gagal.
<SOAPMessage>
Menentukan versi SOAP yang akan divalidasi oleh kebijakan Validasi Pesan.
Nilai Default | t/a |
Wajib? | Opsional |
Jenis | t/a |
Elemen Induk |
<MessageValidation>
|
Elemen Turunan | Tidak ada |
Elemen <SOAPMessage>
menggunakan sintaksis berikut:
Sintaksis
... <SOAPMessage version="[ 1.1 | 1.2 | 1.1/1.2 ]"/> ...
Contoh
... <SOAPMessage version="1.1"/> ...
Elemen <SOAPMessage>
memiliki atribut berikut:
Atribut | Default | Wajib? | Deskripsi |
---|---|---|---|
version |
Tidak ada | Opsional | Versi SOAP yang digunakan kebijakan ini untuk memvalidasi pesan SOAP.
Nilai yang valid adalah:
|
Untuk mengetahui informasi selengkapnya, lihat Dari SOAP/1.1 ke SOAP Versi 1.2 dalam 9 poin.
<Source>
Mengidentifikasi pesan sumber yang akan divalidasi. Nilai elemen ini adalah nama pesan yang ingin Anda validasi.
Jika Anda tidak menyetel <Source>
, kebijakan ini secara default adalah "message", yang mengacu pada pesan permintaan lengkap (dalam alur permintaan) atau pesan respons (dalam alur respons), termasuk payload apa pun. Anda juga dapat menyetelnya secara eksplisit ke "request" atau "response" untuk merujuk ke permintaan atau respons.
Nilai Default | minta |
Wajib? | Opsional |
Jenis | String |
Elemen Induk |
<MessageValidation>
|
Elemen Turunan | Tidak ada |
Elemen <Source>
menggunakan sintaksis berikut:
Sintaksis
... <Source>message_to_validate</Source> ...
Contoh
... <Source>request</Source> ...
Selain "message", "request", dan "response", Anda dapat menetapkan nilai
<Source>
ke nama pesan apa pun dalam alur Anda. Namun, jika melakukannya, Anda harus membuat
pesan kustom dengan nama tersebut dalam alur sebelum kebijakan ini dijalankan. Jika tidak, Anda akan mendapatkan
error.
Jika nilai <Source>
tidak dapat diselesaikan dalam alur pesan atau diselesaikan ke jenis non-pesan, maka salah satu hal berikut akan terjadi:
- Jika nilai null: Edge akan menampilkan
error
steps.messagevalidation.SourceMessageNotAvailable
. - Jika jenis non-pesan: Edge akan menampilkan
error
steps.messagevalidation.NonMessageVariable
.
Elemen <Source>
tidak memiliki atribut atau elemen turunan.
Kode error
Error yang ditampilkan dari kebijakan Edge mengikuti format yang konsisten seperti yang dijelaskan dalam Referensi kode error.
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 |
Skema
Setiap jenis kebijakan ditentukan oleh skema XML (.xsd
). Sebagai referensi, skema kebijakan
tersedia di GitHub.