PHP SoapClient: beállíthat egy névtér előtag nélkül

szavazat
0

Én fogyaszt egy WSDL SOAP szolgáltatás használata PHP SoapClient. A generált XML tartalmazza az alábbi névtér meghatározásokat:

<SOAP-ENV:Envelope
    xmlns:SOAP-ENV=http://schemas.xmlsoap.org/soap/envelope/
    xmlns:ns1=WebApplicationImport
    ....>

És az elemek ettől a ns1névtér mind előtaggal ns1:elementName.

A szolgáltató azt mondja, hogy ez a baj, és azt akarják ezeket az elemeket az előtag nélkül, bár a WSDL definiálja követelmény, hogy: xmlns:tns=WebApplicationImport elementFormDefault=qualified.

Az egyik megoldás az, hogy nem a következő elküldése előtt XML: $xml = str_replace(':ns1', '', $xml);. Ez működik, de nyilvánvalóan egy hack, és nem vagyok nagy rajongója a hack.

Van egy módja annak, hogy elmondja SoapClient, hogy kezelni egy adott névtér, mint az alapértelmezett / nem előtag ez? Mit szeretnék elérni az <SOAP-ENV:Envelope xmlns:SOAP-ENV=http://schemas.xmlsoap.org/soap/envelope/ xmlns=WebApplicationImport>előállítása előtt a többi borítékot, ami elméletileg biztosítja, hogy minden elem az adott névtér is előtag. Ez úgy tűnik, mint a megfelelő és érvényes megoldás számomra.

A kérdést 24/10/2019 11:57
a forrás felhasználó
Más nyelveken...                            


1 válasz

szavazat
0

WebApplicationImportnem érvényes URI . Tehát ez nem egy érvényes névtér. Tehát a WSDL és az XML valójában érvénytelen. Néhány elemző is tolerálni névterek ilyesmi, de meg kell valami hasonló urn:WebApplicationImportvagy http://example.com/ns/WebApplicationImport.

Ha eltávolítja a prefix teszel az elemek az aktuális alapértelmezett névteret és ez legyen az üres / nem névtér benned ügyben.

Elég érdekes PHP DOM tűri a névtér meghatározásokat előtagokat de nem az alapértelmezett névteret:

$document = new DOMDocument();
$document->loadXML(
    '<foo xmlns="WebApplicationImport"/>'
);

output:

Notice: DOMDocument::loadXML(): xmlns: URI WebApplicationImport is not absolute in Entity

Tehát attól függően, az értelmező a szolgáltató használ lehetett dobni hibák WebApplicationImport, mint egy névtér URI.

Először el kell távolítani / kijavítani a névteret a WSDL. Ha megjavítani, akkor a szolgáltatónak, hogy alkalmazkodjanak a logika, hogy az új névtér.

Előtagok csak álneveket aktuális névtér URI. A következő 3 példák mind ki lehet olvasni, mint {urn:example}foo:

  • <foo xmlns="urn:example"/>
  • <ns1:foo xmlns:ns1="urn:example"/>
  • <f:foo xmlns:f="urn:example"/>
Válaszolt 25/10/2019 14:30
a forrás felhasználó

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more