Я написал что-то вроде этого в Boo, используя .Net HTTPListener, потому что мне тоже пришлось реализовывать чей-то другой WSDL.
WSDL Мне дали использованную документную / буквальную форму (вам нужно будет внести некоторые коррективы в эту информацию, если ваш WSDL использует rpc / encoded). Я обернул HTTPListener в класс, который позволял клиентскому коду регистрировать обратные вызовы с помощью действия SOAP, а затем дал этому классу метод Start, который запускает HTTPListener. Вы должны быть в состоянии сделать что-то очень похожее в Python, используя метод getPOST () в BaseHTTPServer для:
- извлечение действия SOAP из HTTP
Заголовки
- используйте elementtree для извлечения SOAP
заголовок и тело SOAP из POST'а
HTTP
- вызвать определенный обратный вызов для
Действие SOAP, отправка этих извлеченных значений
- вернуть текст ответа, указанный
обратный вызов в соответствующем SOAP
конверт; если обратный вызов поднимает
исключение, поймать его и перемотать как
ошибка SOAP
Затем вы просто реализуете обратный вызов для каждого действия SOAP, которое получает переданное ему содержимое XML, анализирует его с помощью elementtree, выполняет желаемое действие (или фиктивное действие, если это тестер) и создает необходимый XML-ответ (я был не слишком горд, чтобы просто создать это явно, используя строковую интерполяцию, но вы можете использовать elementtree, чтобы создать это, сериализовав объект ответа Python).
Будет полезно, если вы сможете получить некоторые реальные образцы сообщений SOAP, чтобы не повредить волосы, особенно в той части, где вы создаете необходимый XML-ответ.