2008-09-19 16 views
8

Wbudowany PHP rozszerzenie dla SOAP nie sprawdza wszystko w nadchodzącym SOAP wniosek przeciwko XML Schema w WSDL. Sprawdza istnienie podstawowych jednostek, ale gdy masz coś skomplikowanego, jak na przykład restrykcje, rozszerzenie prawie ignoruje ich istnienie.Sprawdź poprawność przychodzącego żądania SOAP do WSDL w PHP

Jaki jest najlepszy sposób sprawdzenia poprawności żądania SOAP przed zawartego w WSDL?

Odpowiedz

2

Zacząłem kopać w tej sprawie w godzinach oglądania. Ani natywny serwer PHP Soap, ani biblioteka NuSOAP nie wykonuje żadnej weryfikacji. PHP SoapServer po prostu wykonuje rzut typu. Na przykład, jeśli zdefiniowania

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

i złożyć

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

dostaniesz PZP Typ logiczny (prawdziwy)

NuSOAP prostu rzuca everthing na ciąg chociaż uznaje prostych typów:

z dziennika debugowania nuSOAP:

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

Najlepszym sposobem jest rozwiązanie joelhardi do sprawdzenia poprawności lub skorzystania z parsera xml, takiego jak XERCES

1

Zazwyczaj jeden nie sprawdza się na WSDL. Jeśli WSDL jest poprawnie zaprojektowany, powinien istnieć podstawowy schemat XML (XSD), aby potwierdzić treść żądania. Twój analizator składni XML powinien być w stanie to zrobić.

Reszta zależy od sposobu wdrożenia usługi internetowej i używanego mechanizmu SOAP. Nie jestem bezpośrednio zaznajomiony z silnikiem PHP. W przypadku "sprawdzania poprawności" WSDL/interfejsu zazwyczaj robię coś takiego:

  1. Czy treść żądania jest zgodna ze znanym typem żądania i czy jest ważna (według XSD)?
  2. Czy komunikat ma sens w tym kontekście i czy mogę go przypisać do operacji/obsługi?
  3. Jeśli tak, to rozpocząć przetwarzanie
  4. Inaczej: error
+0

Poddałem edycji pytanie, aby wyjaśnić. –

-3

Jakiś czas temu skończyłem tworzyć a proof of concept serwis WWW z użyciem PHP NuSOAP. Nie wiem, czy sprawdza poprawność danych wejściowych, ale zakładam, że tak.

4

Poza natywnymi bibliotekami SOAP PHP5, mogę również powiedzieć, że ani biblioteki PEAR, ani Zend SOAP nie wykonają obecnie walidacji schematów wiadomości. (Nie znam żadnej implementacji PHP SOAP, która niestety niestety).

Co mogę zrobić, to załadować wiadomość XML do obiektu DOMDocument i użyć metod DOMDocument do sprawdzenia poprawności względem schematu.

-1

Nie mogłem znaleźć żadnego prostego sposobu na sprawdzenie poprawności, a na końcu posiadałem kod walidacyjny w logice biznesowej.