Ana içeriğe atla
API proxy tipi SOAP veya REST-SOAP-REST olan Api Proxy’lerde, Apinizer’a gelen mesaj üzerinde yönlendirme sekmesinde “SOAP Action değerini düzelt” seçeneği seçilmiş ise aşağıdaki durumlara göre bazı değişiklikler yapılabilir. Bu değişikliklerin yapılabilmesi için öncelikle gelen mesajın SOAP versiyonu belirlenir. SOAP versiyonuna karar verilmesi için, İstek Başlığında gönderilen Content-Type değerine ve İstek Gövdesinde yer alan SOAP XML’in namespace değerine bakılır.
Bu iki değerin farklı çıkması durumunda öncelik Content-Type başlığına verilir. Content-Type değerinin boş veya anlamsız olması durumunda SOAP versiyonu, SOAP XML’in namespace değerinden belirlenir.

SOAP Versiyonu Belirleme

SOAP versiyonu belirleme yöntemleri aşağıda detaylandırılmıştır:
SOAP versiyonu değeri Content-Type ile belirleniyorsa aşağıdaki kurallar uygulanır:
  • text/xml değeri ile başlıyorsa SOAP 1.1
  • application/soap+xml değeri ile başlıyorsa SOAP 1.2
  • application/xop+xml değeri ile başlıyorsa ve Content-Type değeri içindeki type değeri text/xml içeriyorsa SOAP 1.1
  • application/xop+xml değeri ile başlıyorsa ve Content-Type değeri içindeki type değeri application/soap+xml içeriyorsa SOAP 1.2
olarak belirlenir.Örnekler:
Content-Type: text/xml; charset=UTF-8
→ SOAP 1.1
Content-Type: application/soap+xml; charset=UTF-8
→ SOAP 1.2
Content-Type: application/xop+xml; type="text/xml"
→ SOAP 1.1
Content-Type: application/xop+xml; type="application/soap+xml"
→ SOAP 1.2
SOAP versiyonu değeri SOAP XML’in namespace değeri ile belirleniyorsa aşağıdaki kurallar uygulanır:
  • Namespace değeri http://schemas.xmlsoap.org/soap/envelope/ ise SOAP 1.1
  • Namespace değeri http://www.w3.org/2003/05/soap-envelope ise SOAP 1.2
olarak belirlenir.Örnek SOAP 1.1 Mesajı:
<soap:Envelope 
  xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <!-- Mesaj içeriği -->
  </soap:Body>
</soap:Envelope>
Örnek SOAP 1.2 Mesajı:
<soap:Envelope 
  xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
  <soap:Body>
    <!-- Mesaj içeriği -->
  </soap:Body>
</soap:Envelope>

SOAP Versiyonuna Göre İşlemler

SOAP versiyonu değeri belirlendiğinde aşağıdaki işlemler gerçekleştirilir:
  1. SOAP versiyonuna göre SOAP XML’in namespace değeri düzeltilir.
  2. SOAP versiyonuna göre aşağıdaki işlemler yapılır:
SOAP versiyonu 1.1 olan istekler için:
  1. İstek başlığında soapaction anahtar kelimesi varsa yazım şekli düzeltilerek yoksa SOAPAction şeklinde başlık eklenir.
  2. SOAPAction anahtar kelimesine eklenecek değer mesajın geldiği metoda ait olan ve WSDL tanımından ayrıştırılarak elde edilen SOAPAction değeridir.
  3. SOAPAction değerinin başına ve sonuna yoksa tırnak işareti eklenir.
  4. Content-Type değeri text/xml olarak belirlenir.
  5. Content-Type değerine varsa Character Encoding değeri eklenir, yoksa default olarak ;charset=UTF-8 değeri eklenir.
Örnek SOAP 1.1 İstek:
POST /service HTTP/1.1
Content-Type: text/xml; charset=UTF-8
SOAPAction: "http://example.com/GetUser"

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <!-- İstek içeriği -->
  </soap:Body>
</soap:Envelope>
SOAP versiyonu 1.2 olan istekler için:
  1. Content-Type değeri application/soap+xml olarak belirlenir.
  2. Content-Type değerine varsa Character Encoding değeri eklenir, yoksa default olarak ;charset=UTF-8 değeri eklenir.
  3. Content-Type değerine ;action=<SOAPAction> ifadesi eklenir.
Örnek SOAP 1.2 İstek:
POST /service HTTP/1.1
Content-Type: application/soap+xml; charset=UTF-8; action="http://example.com/GetUser"

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
  <soap:Body>
    <!-- İstek içeriği -->
  </soap:Body>
</soap:Envelope>
SOAP 1.2’de SOAPAction header’ı yerine Content-Type içindeki action parametresi kullanılır. Bu, SOAP 1.1’den önemli bir farktır.