PHP WSDL gelen bir SOAP isteği doğrulamak

5 Cevap php

SOAP için yerleşik PHP uzantısı WSDL XML şema karşı gelen soap isteği şeyi doğrulamaz. Bu temel varlıkların varlığı için kontrol yapar, ama simpleType kısıtlamalar gibi karmaşık bir şey varsa uzatma hemen hemen kendi varlığını yok sayar.

WSDL bulunan XML şema karşı soap isteği doğrulamak için en iyi yolu nedir?

5 Cevap

Been digging around on this matter a view hours. Neither the native PHP SoapServer nore the NuSOAP Library does any Validation. PHP SoapServer simply makes a type cast. For Example if you define

<xsd:element name="SomeParameter" type="xsd:boolean" />

ve teslim

<get:SomeParameter>dfgdfg</get:SomeParameter>

Eğer (gerçek) php Türü boolean alırsınız

Basit tiplerini tanır rağmen NuSOAP sadece dize ilginiz atmalarını:

NuSOAP hata ayıklama günlüğüne gelen:

nusoap_xmlschema: processing typed element SomeParameter of type http://www.w3.org/2001/XMLSchema:boolean

Yani en iyi yolu kendinizi doğrulamak veya xerces gibi bazı XML ayrıştırıcı kullanmak joelhardi çözümdür

Yerli PHP5 SOAP kütüphanelerini Ayrıca, ben de PEAR ne Zend SABUN libs ne şu anda mesajların şema doğrulaması yapacak söyleyebilirim. (Ne yazık ki, yok herhangi bir PHP SOAP uygulama bilmiyorum.)

Ne yapacağını bir DOMDocument nesnenin içine XML mesajı yüklemek ve şema karşı doğrulamak için domBelgesi yöntemlerini kullanmaktır.

Tipik bir WSDL karşı doğrulamaz. WSDL tasarlanmış düzgün karşı istek gövdesini doğrulamak için altta yatan bir xml şema (XSD) olmalıdır. XML ayrıştırıcı bunu yapmak gerekir.

Gerisi Eğer kullandığınız web hizmetini ve hangi soap motor nasıl uyguladıklarını kalmıştır. Ben PHP motoru doğrudan aşina değilim. WSDL / arabirimi düzeyi "onaylama" Ben genellikle böyle bir şey yapın:

  1. Istek gövdesi bilinen bir istek türünü maç ve (XSD) tarafından geçerli mi?
  2. Mesaj bu bağlamda mantıklı mı ve ben bir operasyon / işleyicisi eşleyebilirsiniz?
  3. Eğer öyleyse, bu işleme başlamak
  4. Aksi halde: hatası

Ben doğrulama gerçekleştirmek ve sonunda iş mantığı doğrulama kodu vardı için herhangi bir basit yol bulmak mümkün değildi.

Bir süre önce NuSOAP kullanarak PHP ile a proof of concept web hizmeti oluşturmak ettik. Bu giriş doğrular olmadığını bilmiyorum, ama ben öyle varsayılabilir.