Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin. bilgi
SOAPMessageValidation politikası şunları yapar:
- Tüm XML mesajlarını XSD şemalarına göre doğrular.
- SOAP mesajlarını bir WSDL tanımına göre doğrular.
- JSON ve XML mesajlarının doğru biçimlendirilip biçimlendirilmediğini belirler.
Bu politikanın kullanıcı arayüzündeki adı "SOAP Message Validation" olsa da politika, SOAP mesajlarından daha fazlasını doğrular. Bu bölümde, politikadan "İleti Doğrulama politikası" olarak bahsedilmektedir.
<MessageValidation> öğesi
İleti Doğrulama politikasını tanımlar.
| Varsayılan Değer | Aşağıdaki Varsayılan Politika sekmesine bakın. |
| Zorunlu mu? | İsteğe bağlı |
| Tür | Karmaşık nesne |
| Üst Öğe | Yok |
| Alt Öğeler |
<DisplayName><Element><ResourceURL><SOAPMessage><Source> |
Söz dizimi
<MessageValidation> öğesi aşağıdaki söz dizimini kullanır:
<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>Varsayılan politika
Aşağıdaki örnekte, Edge kullanıcı arayüzünde akışınıza bir Message Validation politikası eklediğinizde varsayılan ayarlar gösterilmektedir:
<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>
Bu öğe, tüm politikalarda ortak olan aşağıdaki özelliklere sahiptir:
| Özellik | Varsayılan | Zorunlu mu? | Açıklama |
|---|---|---|---|
name |
Yok | Zorunlu |
Politikanın dahili adı. İsteğe bağlı olarak, politikayı yönetim kullanıcı arayüzü proxy düzenleyicisinde farklı, doğal bir dille etiketlemek için |
continueOnError |
yanlış | İsteğe bağlı | Politika başarısız olduğunda hata döndürmek için "false" değerine ayarlayın. Bu, çoğu politika için beklenen bir durumdur. Bir politika başarısız olsa bile akış yürütmenin devam etmesi için değeri "true" olarak ayarlayın. |
enabled |
true | İsteğe bağlı | Politikayı uygulamak için "true" (doğru) değerine ayarlayın. Politikayı "kapalı" hale getirmek için "false" değerine ayarlayın. Politika, bir akışa bağlı kalsa bile zorunlu kılınmaz. |
async |
yanlış | Kullanımdan kaldırıldı | Bu özellik kullanımdan kaldırıldı. |
Örnekler
Aşağıdaki örneklerde, Message Validation politikasını kullanabileceğiniz bazı yöntemler gösterilmektedir:
1: XSD Doğrulaması
XML mesaj isteğinin yükünü bir XSD şemasına göre doğrulamak için Mesaj Doğrulama politikasını kullanabilirsiniz.
- Yeni bir XSD kaynak dosyası oluşturun. Örneğin, "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>
- SOAP Message Validation politikasını proxy uç noktanızın ön akışına ekleyin:
- XSD kaynak dosyanızın konumunu
<ResourceURL>öğesiyle belirtin. Örneğin:... <ResourceURL>xsd://note-schema.xsd</ResourceURL> ...
- Politika tanımından
<SOAPMessage>ve<Element>öğelerini kaldırın.
Politika tanımınız aşağıdaki gibi görünmelidir:
<MessageValidation continueOnError="false" enabled="true" name="validateXMLRequest"> <DisplayName>My XML Validator</DisplayName> <Properties/> <Source>request</Source> <ResourceURL>xsd://note-schema.xsd</ResourceURL> </MessageValidation> - XSD kaynak dosyanızın konumunu
- Aşağıdaki örnekte gösterildiği gibi, mesaj yükü olarak XML'inizle API proxy'nize bir
POSTisteği gönderin: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>'
Content-typeüstbilgisinin "application/xml" olarak ayarlandığına dikkat edin.Yük için bir veri dosyası oluşturabilir ve aşağıdaki gibi bir komutla bu dosyaya referans verebilirsiniz:
curl -v -X POST -H 'Content-type: application/xml' http://my-test.apigee.net/v1/xsd-mock --data '@../examples/note-payload.xml'
HTTP 200 yanıtı almanız gerekir. Hedef uç noktanıza bağlı olarak, istek hakkında ek ayrıntılar alabilirsiniz. Örneğin, hedef uç noktanız olarak http://httpbin.org/post kullanır ve -v (ayrıntılı) çıkış belirtirseniz yanıt aşağıdakine benzer olmalıdır:
< 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" }
XSD doğrulamanızın çalıştığını doğrulamak için isteğinizin gövdesine başka bir etiket eklemeyi deneyin. Örneğin:
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>'
Doğrulama hatası alırsınız.
2: SOAP Doğrulaması
SOAP mesaj isteğinin yükünü bir WSDL'ye göre doğrulamak için Message Validation politikasını kullanabilirsiniz.
- Yeni bir WSDL kaynak dosyası oluşturun. Örneğin, "example-wsdl.wsdl":
- SOAP Message Validation politikasını proxy uç noktanızın ön akışına ekleyin:
<SOAPMessage>öğesininversionözelliğini, doğrulamak istediğiniz SOAP protokolü sürümüne ayarlayın. Örneğin, "1.1":... <SOAPMessage version="1.1"/> ...
<Element>öğesinin değerini, doğrulamak istediğiniz öğeye ayarlayın:... <Element namespace="https://example.com/gateway">getID</Element> ...
<Element>, SOAP isteğinin zarfındaki<Body>öğesinin altındaki ilk alt öğeyi belirtir.namespaceözelliğini bu alt öğenin ad alanına ayarlayın.<ResourceURL>öğesiyle WSDL kaynak dosyanızın konumunu belirtin. Örneğin:... <ResourceURL>wsdl://example-wsdl.wsdl</ResourceURL> ...
Politika tanımınız aşağıdaki gibi görünmelidir:
<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> - Aşağıdaki örnekte gösterildiği gibi, mesaj yükü olarak SOAP zarfını kullanarak API proxy'nize bir
POSTisteği gönderin: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>'
Content-typeüstbilgisinin "application/xml" olarak ayarlandığına dikkat edin.Yük için bir veri dosyası oluşturabilir ve aşağıdaki gibi bir komutla bu dosyaya referans verebilirsiniz:
curl -v -X POST -H 'Content-type: application/xml' http://my-test.apigee.net/v1/xsd-mock --data '@../examples/soap-payload.xml'
HTTP 200 yanıtı almanız gerekir. Hedef uç noktanıza bağlı olarak, istek hakkında ek ayrıntılar alabilirsiniz. Örneğin, hedef uç noktanız olarak http://httpbin.org/post kullanıyorsanız yanıt aşağıdakine benzer olmalıdır:
< 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: İyi biçimlendirilmiş XML/JSON
Bir JSON veya XML mesaj yükünün doğru biçimlendirildiğini (doğrulama ile aynı değildir) onaylamak için Mesaj Doğrulama politikasını kullanabilirsiniz. Politika, yapı ve içeriğin kabul edilen standartlara uygun olmasını sağlar. Bu standartlar arasında şunlar yer alır:
- Tek bir kök öğe vardır.
- İçerikte geçersiz karakter yok.
- Nesneler ve etiketler düzgün bir şekilde iç içe yerleştirilmiş
- Başlangıç ve bitiş etiketleri eşleşiyor
XML veya JSON yükünün doğru biçimlendirilip biçimlendirilmediğini kontrol etmek için:
- SOAP Message Validation politikasını proxy uç noktanızın ön akışına ekleyin.
- Politika tanımından
<ResourceURL>,<SOAPMessage>ve<Element>öğelerini kaldırın.Politika tanımınız aşağıdaki gibi görünmelidir:
<MessageValidation async="false" continueOnError="false" enabled="true" name="validateXMLRequest"> <DisplayName>My JSON Checker</DisplayName> <Properties/> <Source>request</Source> </MessageValidation> - Aşağıdaki örnekte gösterildiği gibi API proxy'nize bir
POSTisteği gönderin: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." } }'Content-typeüstbilgisinin "application/json" olarak ayarlandığına dikkat edin.Bir XML dosyasının doğru biçimlendirilip biçimlendirilmediğini kontrol etmek için mesaj yükü olarak XML'i kullanın ve
Content-typedeğerini "application/xml" olarak ayarlayın.
HTTP 200 yanıtı almanız gerekir. Doğru biçimlendirilmiş XML veya JSON içermeyen bir mesaj yükü gönderdiğinizde steps.messagevalidation.Failed hatası alırsınız.
Alt öğe referansı
Bu bölümde, <MessageValidation> öğesinin alt öğeleri açıklanmaktadır.
<DisplayName>
Yönetim kullanıcı arayüzü proxy düzenleyicisindeki politikayı farklı ve daha doğal bir adla etiketlemek için name özelliğiyle birlikte kullanın.
<DisplayName> öğesi tüm politikalarda ortaktır.
| Varsayılan Değer | Yok |
| Zorunlu mu? | İsteğe bağlıdır. <DisplayName> değerini atlarsanız politikanın name özelliğinin değeri kullanılır. |
| Tür | Dize |
| Üst Öğe | <PolicyElement> |
| Alt öğeler | Yok |
<DisplayName> öğesi aşağıdaki söz dizimini kullanır:
Söz dizimi
<PolicyElement> <DisplayName>policy_display_name</DisplayName> ... </PolicyElement>
Örnek
<PolicyElement> <DisplayName>My Validation Policy</DisplayName> </PolicyElement>
<DisplayName> öğesinin özellikleri veya alt öğeleri yok.
<Element>
İletide doğrulanacak öğeyi belirtir. Bu, SOAP isteğinin zarfındaki <Body> öğesinin altındaki ilk alt öğedir.
| Varsayılan Değer | sampleObject |
| Zorunlu mu? | İsteğe bağlı |
| Tür | Dize |
| Üst Öğe |
<MessageValidation>
|
| Alt öğeler | Yok |
<Element> öğesi aşağıdaki söz dizimini kullanır:
Söz dizimi
... <Element namespace="element_namespace">element_to_validate</Element> ...
1. Örnek
Aşağıdaki örnekte, doğrulanacak tek bir öğe tanımlanmaktadır:
... <Element namespace="https://example.com/gateway">getID</Element> ...
2. Örnek
Birden fazla <Element> öğesi ekleyerek doğrulanacak birden fazla öğe belirtebilirsiniz:
... <Element namespace="https://example.com/gateway">getID</Element> <Element namespace="https://example.com/gateway">getDetails</Element> ...
<Element> öğesi aşağıdaki özelliklere sahiptir:
| Özellik | Varsayılan | Zorunlu mu? | Açıklama |
|---|---|---|---|
namespace |
"http://sample.com" | İsteğe bağlı | Doğrulanacak öğenin ad alanını tanımlar. |
<ResourceURL>
Kaynak mesajı doğrulamak için kullanılacak XSD şemasını veya WSDL tanımını tanımlar.
| Varsayılan Değer | wsdl://display_name.wsdl |
| Zorunlu mu? | İsteğe bağlı |
| Tür | Dize |
| Üst Öğe |
<MessageValidation>
|
| Alt öğeler | Yok |
<ResourceURL> öğesi aşağıdaki söz dizimini kullanır:
Söz dizimi
... <ResourceURL>[wsdl|xsd]://validation_WSDL_or_XSD</ResourceURL> ...
Örnekler
XML dosyası için:
... <ResourceURL>xsd://note-schema.xsd</ResourceURL> ...
WSDL için:
... <ResourceURL>wsdl://example-wsdl.wsdl</ResourceURL> ...
<ResourceURL> değeri, API proxy'nizdeki bir kaynak dosyaya işaret etmelidir. HTTP veya HTTPS üzerinden harici kaynaklara başvuramaz.
<ResourceURL> için bir değer belirtmezseniz Content-type üstbilgisi "application/json" veya "application/xml" ise mesajın doğru biçimlendirilmiş JSON ya da XML olup olmadığı kontrol edilir.
<ResourceURL> öğesinin alt öğesi veya özelliği yok.
Doğrulama için XSD'leri kullanma
Message Validation politikasıyla doğruladığınız XML yükü başka bir şemaya referans veriyorsa dahil edilen XSD dosyasının önüne schemaLocation özelliğinde xsd eklemeniz gerekir.
Aşağıdaki örnek şema birden fazla XSD'den oluşur:
<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>Doğrulama için WSDL'leri kullanma
WSDL en az bir şema tanımlamalıdır. En az bir şemaya referans vermiyorsa Message Validation politikası başarısız olur.
Bir şema için maksimum içe aktarma derinliği 10'dur. Bu iç içe yerleştirilmiş içe aktarma sayısını aşarsanız Mesaj Doğrulama politikası başarısız olur.
<SOAPMessage>
Mesaj Doğrulama politikasının doğrulama yaptığı SOAP sürümünü tanımlar.
| Varsayılan Değer | Yok |
| Zorunlu mu? | İsteğe bağlı |
| Tür | Yok |
| Üst Öğe |
<MessageValidation>
|
| Alt öğeler | Yok |
<SOAPMessage> öğesi aşağıdaki söz dizimini kullanır:
Söz dizimi
... <SOAPMessage version="[ 1.1 | 1.2 | 1.1/1.2 ]"/> ...
Örnek
... <SOAPMessage version="1.1"/> ...
<SOAPMessage> öğesi aşağıdaki özelliklere sahiptir:
| Özellik | Varsayılan | Zorunlu mu? | Açıklama |
|---|---|---|---|
version |
Yok | İsteğe bağlı | Bu politikanın SOAP mesajlarını doğrulamak için kullandığı SOAP sürümü.
Geçerli değerler şunlardır:
|
Daha fazla bilgi için 9 maddede SOAP/1.1'den SOAP Sürüm 1.2'ye geçiş başlıklı makaleyi inceleyin.
<Source>
Doğrulanacak kaynak mesajı tanımlar. Bu öğenin değeri, doğrulamak istediğiniz mesajın adıdır.
<Source> değerini ayarlamazsanız bu politika varsayılan olarak "message" değerini alır. Bu değer, yük de dahil olmak üzere istek mesajının (istek akışında) veya yanıt mesajının (yanıt akışında) tamamını ifade eder. İsteğe veya yanıta atıfta bulunmak için bunu açıkça "request" veya "response" olarak da ayarlayabilirsiniz.
| Varsayılan Değer | istek |
| Zorunlu mu? | İsteğe bağlı |
| Tür | Dize |
| Üst Öğe |
<MessageValidation>
|
| Alt öğeler | Yok |
<Source> öğesi aşağıdaki söz dizimini kullanır:
Söz dizimi
... <Source>message_to_validate</Source> ...
Örnek
... <Source>request</Source> ...
"message", "request" ve "response" değerlerine ek olarak <Source> değerini akışınızdaki herhangi bir mesajın adı olarak ayarlayabilirsiniz. Ancak bunu yaparsanız bu politika yürütülmeden önce akışınızda bu ada sahip özel bir mesaj oluşturmanız gerekir. Aksi takdirde hata mesajı alırsınız.
<Source> değeri, mesaj akışında çözümlenemezse veya mesaj olmayan bir türe çözümlenirse aşağıdakilerden biri gerçekleşir:
- Boş değer varsa: Edge,
steps.messagevalidation.SourceMessageNotAvailablehatası verir. - Mesaj türü değilse: Edge,
steps.messagevalidation.NonMessageVariablehatası verir.
<Source> öğesinin özellikleri veya alt öğeleri yok.
Hata kodları
Edge politikalarından döndürülen hatalar, Hata kodu referansı bölümünde açıklandığı gibi tutarlı bir biçimdedir.
Bu bölümde, bu politika bir hatayı tetiklediğinde Edge tarafından ayarlanan hata kodları ile hata mesajları ve döndürülen hata mesajları ile Edge tarafından ayarlanan hata değişkenleri açıklanmaktadır. Bu bilgiyi, hataları ele almak için hata kuralları geliştirip geliştirmediğinizi bilmeniz önemlidir. Daha fazla bilgi için Politika hataları hakkında bilmeniz gerekenler ve Hataları işleme bölümlerine bakın.
Çalışma zamanı hataları
Politika yürütüldüğünde bu hatalar ortaya çıkabilir.
| Hata kodu | HTTP durumu | Neden | Düzelt |
|---|---|---|---|
steps.messagevalidation.SourceMessageNotAvailable |
500 |
Bu hata, politikanın
|
build |
steps.messagevalidation.NonMessageVariable |
500 |
Bu hata, SOAPMessageValidation politikasındaki Mesaj türü değişkenleri, HTTP isteklerinin ve yanıtlarının tamamını temsil eder. Yerleşik Edge akış değişkenleri |
build |
steps.messagevalidation.Failed |
500 | Bu hata, SOAPMessageValidation politikası, giriş mesajı yükünü XSD şeması veya WSDL tanımına göre doğrulayamazsa ortaya çıkar. Yük mesajında bozuk JSON veya XML bulunması da bu hataya neden olabilir. | build |
Dağıtım hataları
Bu hatalar, bu politikayı içeren bir proxy dağıttığınızda ortaya çıkabilir.
| Hata adı | Neden | Düzelt |
|---|---|---|
InvalidResourceType |
SOAPMessageValidation politikasındaki <ResourceURL> öğesi, politika tarafından desteklenmeyen bir kaynak türüne ayarlanmış.
|
build |
ResourceCompileFailed |
SOAPMessageValidation politikasının <ResourceURL> öğesinde başvurulan kaynak komut dosyası, derlemesini engelleyen bir hata içeriyor.
|
build |
RootElementNameUnspecified |
SOAPMessageValidation politikasındaki <Element>, kök öğenin adını içermiyor. |
build |
InvalidRootElementName |
SOAPMessageValidation politikasındaki <Element> öğesi, geçerli öğe adlandırmaya yönelik XML kurallarına uymayan bir kök öğe adı içeriyor. |
build |
Şemalar
Her politika türü bir XML şeması (.xsd) ile tanımlanır. Referans için politika şemaları GitHub'da mevcuttur.