Недавно столкнулся с проблемой – SOAP-сервис, работающий на Spyne, отдавал примерно такую ошибку:
<?xml version='1.0' encoding='UTF-8'?>
<senv:Envelope xmlns:senv="http://schemas.xmlsoap.org/soap/envelope/">
<senv:Body>
<senv:Fault>
<faultcode>senv:Client.XMLSyntaxError</faultcode>
<faultstring>PCDATA invalid Char value X, line Y, column Z</faultstring>
<faultactor></faultactor>
</senv:Fault>
</senv:Body>
</senv:Envelope>
Проблема оказалась очень простой: в запрос к SOAP-сервису попадал спецсимвол с кодом 0x04, в то время как XML допускает только следующие символы.
На StackOverflow на похожий вопрос есть ответ с указанием передавать в конструктор XMLParser recover=True.
В моем случае передать в XMLParser recover=True получилось вот таким вот (некрасивым) способом:
in_protocol = Soap11(validator='lxml')
in_protocol.parser_kwargs['recover'] = True
out_protocol = Soap11()
soap_application = Application(
[SoapService], in_protocol=in_protocol, out_protocol=out_protocol)