Adicionando o namespace xsi: type e envelope ao usar o SUDS
Eu preciso interagir com um serviço SOAP e estou tendo muita dificuldade em fazê-lo; agradeceria qualquer indicação sobre isso. A mensagem de erro original foi:
org.apache.axis2.databinding.ADBException: Any type element type has not been given
Depois de algumas pesquisas, verifica-se que este é um desacordo entre SUDS e o servidor tem que lidar com
type="xsd:anyType"
no elemento em questão.
Confirmei o uso do SOAPUI e após conselhos de que o problema pode ser corrigido seguindo estas etapas:
Adicionando xsi: type = "xsd: string" a cada elemento que causa problemasAdicionando xmlns: xsd = "http://www.w3.org/2001/XMLSchema" ao envelope SOAPEntão, onde o SUDS atualmente faz isso:
<SOAP-ENV:Envelope ... xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<ns3:Body>
<ns0:method>
<parameter>
<values>
<table>
<key>EMAIL_ADDRESS</key>
<value>[email protected]</value>
</table>
</values>
</parameter>
</ns0:method>
Em vez disso, deve produzir isso:
<SOAP-ENV:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" ... xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<ns3:Body>
<ns0:method>
...
<parameter>
<values>
<table>
<key xsi:type="xsd:string">EMAIL_ADDRESS</key>
<value xsi:type="xsd:string">[email protected]</value>
</table>
</values>
</parameter>
</ns0:method>
Existe uma maneira correta de fazer isso? Já vi sugestões de uso de ImportDoctor ou MessagePlugins, mas não gravei realmente como obter o efeito desejado.