如何防止 Spyne 包装我的回复?

2023-12-11

这是示例服务

NS = 'my_app_namespace'

class MyMethodRS(ComplexModel):
    __tns__ = NS
    Version = XmlAttribute(Unicode)

class MyService(ServiceBase):
    __tns__ = NS

    @srpc(Unicode, _returns=MyMethodRS, _out_variable_name='MyMethodRS')
    def my_method(foo):
        response = MyMethodRS()
        response.Version = '1.0'
        return response

# and then application will be created and starged as wsgi app

然后我发布一个请求

<?xml version='1.0' encoding='UTF-8' ?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
  <soap:Body xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <my_method xmlns="my_app_namespace">
      <foo>bar</foo>
    <my_method>
  </soap:Body>
</soap:Envelope>

我得到了

<?xml version='1.0' encoding='UTF-8' ?>
<senv:Envelope>
  <senv:Body>
    <tns:my_methodResponse>
      <tns:MyMethodRS Version="1.0" />
    </tns:my_methodResponse>
  </senv:Body>
</senv:Envelope>

我不想将响应包含在my_methodResponse。我尝试添加_body_style='bare' to @srpc并失败了

<?xml version='1.0' encoding='UTF-8' ?>
<senv:Envelope>
  <senv:Body>
    <senv:Fault>
      <faultcode>senv:Client.SchemaValidationError</faultcode>
      <faultstring><string>:14:0:ERROR:SCHEMASV:SCHEMAV_CVC_TYPE_3_1_2: Element '{http://www.opentravel.org/OTA/2003/05}my_method': Element content is not allowed, because the type definition is simple.</faultstring>
      <faultactor />
    </senv:Fault>
  </senv:Body>
</senv:Envelope>

我该如何处理?我正在尝试实现严格的 API,并且无法向我的响应添加任何包装器。


从这个要求来看:

<my_method xmlns="my_app_namespace">
  <foo>bar</foo>
<my_method>

你需要这个:

class MyMethodRequest(ComplexModel):
    foo = Unicode

class MyService(ServiceBase):
    @srpc(MyMethodRequest, _returns=MyMethodRS, _body_style='bare' 
                           _out_variable_name='MyMethodRS')
    def my_method(request):
        foo = request.foo
        response = MyMethodRS()
        response.Version = '1.0'
        return response

这与非裸模式的实际作用非常接近。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何防止 Spyne 包装我的回复? 的相关文章

随机推荐

  • UIButton 圆角在 iPhone 5 上无法正常工作

    这是通过 UI 扩展方法实现的 extension UIView func roundCorners corners UIRectCorner radiusWidth CGFloat radiusHeight CGFloat let pat
  • C++ 中的 Google Pub/Sub 消费者示例

    我正在尝试使用 Google Pub Sub 我需要将其集成到 C 代码库中 由于没有原生支持Google Pub Sub在 C 中 我通过使用它gRPC 因此 我生成了相应的pubsub grpc pb h pubsub grpc pb
  • Windows 文件夹共享 API

    是否有 WIN32 API 可用于管理 Windows 中的文件夹共享 一些示例链接会有所帮助 谢谢 是的 从 Windows 2000 Professional 开始 netapi32 dll 中提供了一个网络 API 它提供了此功能 N
  • 从本地 .resx 文件获取值 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 如何从 asp net 中的本地 resx 文件获取值 从代码隐藏 Cultur
  • Python:使用“yield from”时出现奇怪的行为

    在下面的代码中 我遇到了RecursionError maximum recursion depth exceeded def unpack given for i in given if hasattr i iter yield from
  • 如何通过箭头键更改突出显示的 tkinter 按钮?

    我正在使用 python 中的 tkinter 库开发键盘应用程序 我做了一个键盘 我想要的是突出显示一个键 然后单击箭头键我想更改该突出显示的键 这是我的键盘代码 from tkinter import import tkinter Ke
  • GCM HTTP 错误 401:未经授权

    我在客户端集成了 GCM 也制作了服务器端组件 一切工作正常 我能够从服务器向所有注册的客户端发送推送通知 我使用谷歌应用程序引擎作为我的服务器 问题出现时 I changed the API Key on server 早些时候 我使用我
  • 使用反射/ TypeDescriptor 设置匿名类型的属性值是否可能?

    我尝试使用 TypeDescriptor 并且该值没有改变 并且通过反射我得到一个错误 表明该属性没有设置器 C 匿名类型是不可变的 并且它们的属性无法更改 If you really如果愿意 您可以使用反射来设置支持字段 但这将是一个坏主
  • 受约束的 TypeVar 和 Union 之间有什么区别?

    如果我想要一个可以是多种可能类型的类型 Union我似乎是这样表示的 U Union int str U可以是一个int or a str 我注意到了TypeVars 允许可选的 var arg 参数 它们似乎也做同样的事情 T TypeV
  • 为什么/何时 cout 缓冲区自动刷新?

    我的理解是从here如果我要输出字符而不刷新缓冲区 endl or cin 在程序结束之前它们不会出现在我的控制台上 所以我尝试做一个无限循环 for std cout lt lt a lt lt std endl 和不刷新缓冲区相同 fo
  • rdf:resource中#的含义是什么

    我不清楚什么时候应该在 URI 之前rdf resource with 特点 它到底是什么意思 是使用相对 URI 的方式 还是必须与rdf ID但不与rdf about 您能否附上错误和正确用法的示例 inside rdf resourc
  • 如何在XAML中引用图像资源?

    我放了一个Image窗口上的控件 我想显示存储在名为 Resources resx 的项目资源文件中的图像 资源文件中图像的名称是 搜索 有人可以告诉我如何去做这件事吗 如果图像位于您的资源文件夹中并且其构建操作设置为资源 您可以在 XAM
  • PHP 正则表达式不包括
     标签                
                

    我正在使用名为的 WordPress 插件Acronyms https wordpress org plugins acronyms 该插件用其描述替换首字母缩略词 它使用 PHPPREG REPLACE功能 问题是它取代了包含在 pre
  • 在 WiX 安装程序中设置服务启动类型

    我正在尝试将预安装服务的启动类型设置为Automatic 使用 WiX 另一项任务是在安装时启动服务 我是通过以下方式实现的
  • Lucene 4.2 字符串字段

    我是 Lucene 的新手 我有两个文档 我希望与称为 关键字 的文档字段完全匹配 该字段可能在文档中出现多次 第一个文档包含关键字 Annotation is Cool 第二个文档包含关键字 注释也很酷 当我搜索 注释很酷 时 如何构建查
  • DataGrid - “双向绑定需要 Path 或 XPath。”

    我想在 DataGrid 上显示我的对象数据库 public class Student public string Imie get set public string Nazwisko get set string Numer get
  • 边框 CSS HTML 中的文本

    我想要一个看起来像这样的 div 这可以用 HTML CSS 实现吗 我还将使用 jQuery 为这个 div 制作动画 当 div 隐藏时 我希望显示标题和顶行 是的 但这不是一个div 它是fieldset fieldset borde
  • Android Studio - 构建错误 - Android 任务已创建

    构建项目时出现如下错误 错误 2 0 Android 任务已创建 调用 android applicationVariants 时会发生这种情况 android libraryVariants 或 android testVariants
  • NSLocalizedString()的第二个参数是什么?

    是什么 comment参数在 NSString NSLocalizedString NSString key NSString comment 如果我这样做 NSLocalizedString Hello World Key Hello W
  • 如何防止 Spyne 包装我的回复?

    这是示例服务 NS my app namespace class MyMethodRS ComplexModel tns NS Version XmlAttribute Unicode class MyService ServiceBase