2013-12-08 5 views
1

Я запускаю мыльный сервер в django.python django soaplib response with classmodel issue

Возможно ли создать метод мыла, возвращающий экземпляр класса soaplib без < {method name} Response> < {имя метода} Результат> теги?

Например, вот часть моего кода сервера мыло:

# -*- coding: cp1254 -*- 
from soaplib.core.service import rpc, DefinitionBase, soap 
from soaplib.core.model.primitive import String, Integer, Boolean 
from soaplib.core.model.clazz import Array, ClassModel 
from soaplib.core import Application 
from soaplib.core.server.wsgi import Application as WSGIApplication 
from soaplib.core.model.binary import Attachment  


class documentResponse(ClassModel): 
    __namespace__ = "" 
    msg = String 
    hash = String 


class MyService(DefinitionBase): 
    __service_interface__ = "MyService" 


    __port_types__ = ["MyServicePortType"] 




    @soap(String, Attachment, String ,_returns=documentResponse,_faults=(MyServiceFaultMessage,) , _port_type="MyServicePortType" ) 
    def sendDocument(self, fileName, binaryData, hash): 

     binaryData.file_name = fileName 
     binaryData.save_to_file() 


     resp = documentResponse() 
     resp.msg = "Saved" 
     resp.hash = hash 
     return resp 

и это ответы вроде:

<senv:Body> 
    <tns:sendDocumentResponse> 
    <tns:sendDocumentResult> 
     <hash>14a95636ddcf022fa2593c69af1a02f6</hash> 
     <msg>Saved</msg> 
    </tns:sendDocumentResult> 
    </tns:sendDocumentResponse> 
</senv:Body> 

Но мне нужен ответ, как это:

<senv:Body> 
    <ns3:documentResponse> 
    <hash>A694EFB083E81568A66B96FC90EEBACE</hash> 
    <msg>Saved</msg> 
    </ns3:documentResponse> 
</senv:Body> 

Какие конфигурации я должен сделать, чтобы получить второй ответ, упомянутый выше?

Заранее спасибо.

+0

u.unver34 Вы можете поделиться тем, что сработало для вас? – Priyeshj

+1

Конечно, я не использовал ни один из вышеперечисленных методов, я нашел другой способ. Я заменил эти нежелательные теги и все дерево схемы ответов с формой дерева, которая мне нужна в точке возврата для soap-сервера django, согласно некоторым ключевым словам. –

ответ

1

Я еще не использовал SoapLib Python, но имел ту же проблему при использовании .NET soap libs. Просто для справки, в .NET это делается с помощью следующего декоратора:

[SoapDocumentMethod(ParameterStyle=SoapParameterStyle.Bare)] 

Я посмотрел в источнике soaplib, но, кажется, он не имеет такой же декоратор. Самое близкое, что я нашел, это свойство _style. Как видно из кода https://github.com/soaplib/soaplib/blob/master/src/soaplib/core/service.py#L124 - при использовании

@soap(..., _style='document') 

он не добавляет к %sResult тега, но я не проверял это. Просто попробуйте и посмотрите, работает ли это так, как вы этого хотите.

Если он не работает, но вы все еще хотите получить этот вид ответа, посмотрите на Spyne:

http://spyne.io/docs/2.10/reference/decorator.html

Это форк от soaplib (я думаю), и имеет _soap_body_style='bare' декоратора , и я считаю, что вы хотите.

 Смежные вопросы

  • Нет связанных вопросов^_^