PHP SoapClient: definir um namespace sem prefixo

votos
0

Eu estou consumindo um serviço WSDL SOAP usando SoapClient do PHP. O XML gerado contém as seguintes definições de namespace:

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

E os elementos deste ns1namespace são prefixados com ns1:elementName.

O prestador de serviços diz que isso é errado e eles querem que esses elementos sem o prefixo, embora o WSDL define um requisito para isso: xmlns:tns=WebApplicationImport elementFormDefault=qualified.

Uma solução é fazer o seguinte antes de enviar o XML: $xml = str_replace(':ns1', '', $xml);. Isso funciona, mas é claramente um truque, e eu não sou um fã de hacks.

Existe uma maneira de dizer SoapClientpara lidar com um namespace específico como o default / não prefixo? O que eu gostaria de alcançar é <SOAP-ENV:Envelope xmlns:SOAP-ENV=http://schemas.xmlsoap.org/soap/envelope/ xmlns=WebApplicationImport>antes de gerar o resto do envelope, o que, em teoria, garantir que todos os elementos de que namespace também são unprefixed. Isto parece como a solução adequada e válida para mim.

Publicado 24/10/2019 em 12:57
fonte usuário
Em outras línguas...                            

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