我正在使用远程服务器测试wsdl应用程序,因此我对请求机制没有任何影响。
使用它进行测试时,我会收到此日志消息。
DEBUG:spyne.protocol.soap.soap11:ValueError: Deserializing from unicode strings
with encoding declaration is not supported by lxml.
DEBUG:spyne.protocol.xml:Validated ? False
40.50.60.70 - - [14/Jul/2016 16:58:42] "POST /?WSDL HTTP/1.1" 500 480
所以问题似乎是,我的远程服务器以utf-8编码的字符串进行请求,但是我无法在本地计算机上重现它。在那里我用curl做了这个,它有一个charset=utf-8
编码的头和一个输入xml,它也有encoding='UTF-8' in it's
`-tag。
$ curl -X POST -H "Content-Type: text/xml; charset=utf-8" -d @request.xml
http://localhost:8000 > response.xml
我尝试在构建wsdl的进程中设置event_listener,以便有机会使用ctx.in_string
或其他东西来操作输入字符串。
MyService.event_manager.add_listener('wsdl_document_built', _on_wsdl_document_built)
MyService.event_manager.add_listener('document_built', _on_document_built)
application.event_manager.add_listener('wsdl_document_built', _on_wsdl_document_built)
application.event_manager.add_listener('document_built', _on_document_built)
但是没有执行我添加的功能。
我还搜索了一些配置类型的文档,以便对其进行预解码。
所以我的问题是如何强制对传入请求xml进行某种编码?