Я использую Python Suds для использования веб-службы, предоставляемой Sharepoint 2007. В частности, я хочу использовать UpdateListItems, предоставляемые службой List.aspx.Как изменить конверт SOAP в Python Suds?
Как упоминалось в docs в msdn, я создаю параметр xml. Но это бросает мне SoapServerException
. Трассировка не используется, потому что Sharepoint 2007 вслепую выдает исключение без каких-либо подробностей.
Я также следовал рекомендациям here в документах Suds, приведенным для примера UpdateListItems. Но бесполезно. Я думаю, что проблема в том, что XML, что Suds делает для меня это:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:ns0="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://schemas.microsoft.com/sharepoint/soap/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<ns0:Body>
<ns1:UpdateListItems>
<ns1:listName>MyDocuments</ns1:listName>
<ns0:updates>
<Batch OnError="Continue" ListVersion="1">
<Method ID="1" Cmd="Delete">
<Field Name="ID">7</Field>
<Field Name="FieldRef">http://win2003/sharepoint_site/MyDocuments/aal.txt</Field>
</Method>
</Batch>
</ns0:updates>
</ns1:UpdateListItems>
</ns0:Body>
</SOAP-ENV:Envelope>
Но пример в мыльной пене Docs выглядит следующим образом:
<SOAP-ENV:Envelope xmlns:ns0="http://schemas.microsoft.com/sharepoint/soap/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<ns0:UpdateListItems>
<ns0:listName>MySchedule</ns0:listName>
<Batch OnError="Continue" ListVersion="1">
<Method ID="1" Cmd="New">
<Field Name="ID">New</Field>
<Field Name="Title">Toasting</Field>
<Field Name="EndDate">2009-03-07 18:00:00</Field>
<Field Name="EventDate">2009-03-07 17:00:00</Field>
<Field Name="Location">Everywhere</Field>
<Field Name="Description">Stuff!</Field>
</Method>
</Batch>
</ns0:UpdateListItems>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Я думаю, что проблема является элементом внутри органа , Пример: ns0
, пока я получаю ns1`.
Так что я пытался использовать плагины, как это было предложено Душан в этом вопросе здесь:
python suds wrong namespace prefix in SOAP request
Так я использую marshalled()
метод и мой код выглядит следующим образом:
class UpdatePlugin(MessagePlugin):
def marshalled(self, context):
body = context.envelope.getChild("Body")
updateListItems = body[0]
listName = body[1]
updateListItems.setPrefix("ns0")
listName.setPrefix("ns0")
Однако в последней строке выше приведена следующая ошибка:
ERROR:suds.plugin:'NoneType' object has no attribute 'setPrefix'
So body
is None
. Ясно, что я делаю что-то неправильно. Помоги мне, пожалуйста.