SOAPMessageVerify politikası

Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin.
info

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 düzgün biçimlendirilip biçimlendirilmediğini belirler.

Bu politikanın kullanıcı arayüzündeki adı "SOAP Message Validation" (SOAP Mesajı Doğrulama) olsa da politika, SOAP mesajlarından daha fazlasını doğrular. Bu bölümde, politikadan "Mesaj Doğrulama Politikası" olarak bahsedilir.

<MessageValidation> öğesi

İleti doğrulama politikasını tanımlar.

Varsayılan Değer Aşağıdaki Varsayılan Politika sekmesini inceleyin.
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 şu 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 Mesaj Doğrulama politikası eklediğinizdeki 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ı. name özelliğinin değeri harf, sayı, boşluk, kısa çizgi, alt çizgi ve nokta içerebilir. Bu değer 255 karakteri aşamaz.

İsteğe bağlı olarak, politikayı yönetim kullanıcı arayüzü proxy düzenleyicisinde farklı, doğal bir dille etiketlemek için <DisplayName> öğesini kullanın.

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, Mesaj Doğrulama politikasını kullanabileceğiniz bazı yöntemler gösterilmektedir:

1: XSD Doğrulaması

Bir XML mesajı isteğinin yükünü XSD şemasına göre doğrulamak için Mesaj Doğrulama politikasını kullanabilirsiniz.

  1. 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>
  2. SOAP Mesajı Doğrulama politikasını, proxy uç noktanızın ön akışına ekleyin:
    1. <ResourceURL> öğesiyle XSD kaynak dosyanızın konumunu belirtin. Örneğin:
      ...
        <ResourceURL>xsd://note-schema.xsd</ResourceURL>
      ...
    2. <SOAPMessage> ve <Element> öğelerini politika tanımından 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>
  3. Aşağıdaki örnekte gösterildiği gibi, XML'niz mesaj yükü olarak API proxy'nize bir POST isteğ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ığını unutmayın.

    Ayrıca, yük için bir veri dosyası oluşturabilir ve aşağıdaki gibi bir komutla buna 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, istekle ilgili ek ayrıntılar alabilirsiniz. Örneğin, hedef uç nokta olarak http://httpbin.org/post kullanıp -v (ayrıntılı) çıkışını belirtirseniz yanıt aşağıdaki gibi 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 Mesaj Doğrulama politikasını kullanabilirsiniz.

  1. Yeni bir WSDL kaynak dosyası oluşturun. Örneğin, "example-wsdl.wsdl":
  2. SOAP Message Validation politikasını proxy uç noktanızın ön akışına ekleyin:
    1. <SOAPMessage> öğesinin version özelliğini, doğrulamak istediğiniz SOAP protokolünün sürümüne ayarlayın. Örneğin, "1.1":
      ...
        <SOAPMessage version="1.1"/>
      ...
    2. <Element> öğesinin değerini doğrulamak istediğiniz öğe olarak 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 söz konusu alt öğenin ad alanı olarak ayarlayın.

    3. WSDL kaynak dosyanızın konumunu <ResourceURL> öğesiyle 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>
  3. Aşağıdaki örnekte gösterildiği gibi, SOAP zarfı mesaj yükü olarak API proxy'nize bir POST isteğ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ığını unutmayın.

    Ayrıca, yük için bir veri dosyası oluşturabilir ve aşağıdaki gibi bir komutla buna 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, istekle ilgili ek ayrıntılar alabilirsiniz. Örneğin, hedef uç nokta olarak http://httpbin.org/post kullanıyorsanız yanıt aşağıdaki gibi 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

JSON veya XML mesajı yükünün iyi biçimlendirilmiş olduğunu (doğrulama ile aynı değildir) onaylamak için Mesaj Doğrulama politikasını kullanabilirsiniz. Politika, yapı ve içeriğin aşağıdakiler de dahil olmak üzere kabul edilen standartları karşılamasını sağlar:

  • Tek bir kök öğe var
  • İçerikte geçersiz karakterler yok
  • Nesneler ve etiketler düzgün şekilde yerleştirilmiş olmalıdır.
  • Başlangıç ve bitiş etiketleri eşleşiyor

İyi biçimlendirilmiş bir XML veya JSON yükü olup olmadığını kontrol etmek için:

  1. SOAP Mesajı Doğrulama politikasını proxy uç noktanızın ön akışına ekleyin.
  2. <ResourceURL>, <SOAPMessage> ve <Element> öğelerini politika tanımından 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>
  3. Aşağıdaki örnekte gösterildiği gibi, API proxy'nize bir POST isteğ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ığını unutmayın.

    XML dosyasının iyi biçimlendirilmiş olup olmadığını kontrol etmek için mesaj yükü olarak XML'yi kullanın ve Content-type değerini "application/xml" olarak ayarlayın.

HTTP 200 yanıtı almanız gerekir. İyi 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>

Politikayı yönetim kullanıcı arayüzü proxy düzenleyicisinde 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ı. <DisplayName> özelliğini atlarsanız politikanın name özelliğinin değeri kullanılır.
Tür Dize
Üst öğe <PolicyElement>
Alt Öğeler Yok

<DisplayName> öğesi şu 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 özelliği veya alt öğesi yoktur.

<Element>

Mesajda doğrulanacak öğeyi belirtir. Bu, SOAP isteğinin zarfındaki <Body> öğesinin altındaki ilk öğedir.

Varsayılan Değer sampleObject
Zorunlu mu? İsteğe bağlı
Tür Dize
Üst öğe <MessageValidation>
Alt Öğeler Yok

<Element> öğesi şu 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 şu ö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 şu 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 dosyasına işaret etmelidir. HTTP veya HTTPS üzerinden harici kaynaklara başvuruda bulunamaz.

<ResourceURL> için bir değer belirtmezseniz ileti, Content-type üst bilgisi sırasıyla "application/json" veya "application/xml" ise iyi biçimlendirilmiş JSON ya da XML açısından kontrol edilir.

<ResourceURL> öğesinin alt öğeleri veya özellikleri yoktur.

Doğrulama için XSD'leri kullanma

İleti Doğrulama politikasıyla doğruladığınız XML yükü başka bir şemaya referans veriyorsa dahil edilen XSD dosyasına schemaLocation özelliğinde xsd ön eki 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

Bir WSDL'de en az bir şema tanımlanmalıdır. En az bir şemaya referans vermiyorsa ileti doğrulama politikası başarısız olur.

Bir şema için maksimum içe aktarma derinliği 10'dur. İç içe yerleştirilmiş içe aktarma sayısı bu sınırı aşarsa Message Validation politikası başarısız olur.

<SOAPMessage>

İleti Doğrulama politikasının doğrulama yapacağı 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 şu 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 şu özelliklere sahiptir:

Özellik Varsayılan Zorunlu mu? Açıklama
version Yok İsteğe bağlı Bu politikanın SOAP iletilerini doğrulamak için kullandığı SOAP sürümü.

Geçerli değerler şunlardır:

  • "1.1"
  • "1.2"
  • "1.1/1.2"

Daha fazla bilgi için SOAP/1.1'den SOAP Sürüm 1.2'ye 9 adımda 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> ayarlanmazsa bu politika varsayılan olarak "message" olur. Bu, yükler de dahil olmak üzere tam istek mesajını (istek akışında) veya yanıt mesajını (yanıt akışında) ifade eder. İsteğe veya yanıta atıfta bulunmak için bunu açıkça "istek" veya "yanıt" 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 şu söz dizimini kullanır:

Söz dizimi

...
  <Source>message_to_validate</Source>
...

Örnek

...
<Source>request</Source>
...

"message", "request" ve "response"a ek olarak <Source> değerini akışınızdaki herhangi bir iletinin adıyla da ayarlayabilirsiniz. Ancak bunu yaparsanız bu politika yürütülmeden önce akışınızda bu ada sahip bir özel mesaj oluşturmanız gerekir. Aksi takdirde hata alırsınız.

<Source> değeri mesaj akışında çözümlenemezse veya mesaj türü olmayan bir türe çözümlenirse aşağıdakilerden biri gerçekleşir:

  • Boş değer varsa: Edge, steps.messagevalidation.SourceMessageNotAvailable hatası verir.
  • Mesaj türü değilse: Edge, steps.messagevalidation.NonMessageVariable hatası verir.

<Source> öğesinin özelliği veya alt öğesi yoktur.

Hata kodları

Edge politikalarından döndürülen hatalar, Hata kodu referansı'nda açıklandığı gibi tutarlı bir biçime sahiptir.

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 <Source> element of the policy is either:

  • out of scope (not available in the specific flow where the policy is being executed)
  • or
  • can't be resolved (is not defined)
steps.messagevalidation.NonMessageVariable 500

This error occurs if the <Source> element in the SOAPMessageValidation policy is set to a variable which is not of type message.

Message type variables represent entire HTTP requests and responses. The built-in Edge flow variables request, response, and message are of type message. To learn more about message variables, see the Variables reference.

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.

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.
ResourceCompileFailed The resource script referenced in the <ResourceURL> element of the SOAPMessageValidation policy contains an error that prevents it from compiling.
RootElementNameUnspecified The <Element> element in the SOAPMessageValidation policy does not contain the root element's name.
InvalidRootElementName The <Element> element in the SOAPMessageValidation policy contains a root element name that does not adhere to XML rules for valid element naming.

Şemalar

Her politika türü bir XML şeması (.xsd) ile tanımlanır. Referans olarak politika şemaları GitHub'da mevcuttur.

İlgili konular