【问题标题】:Client can't validate an answer from spyne SOAP server due to whitespaces由于空格,客户端无法验证来自 spyne SOAP 服务器的答案
【发布时间】:2023-03-21 05:28:01
【问题描述】:

我有 Django 模型

class OrderItem(models.Model):
    comment = models.CharField('comment', max_length=255, blank=True)
    ..... 

以及其他不重要的字段。

我有这样描述的 spyne 模型

class OrderItemModel(DjangoComplexModel):
    __type_name__ = 'OrderItem'

    class Attributes(DjangoComplexModel.Attributes):
        django_model = OrderItem

以及产生响应的函数

@rpc(Int, _returns=Iterable(OrderItemModel)) 
def GetOrderItems(self, id):
     order = get_object(Order, pk=id)
     items = order.objects.all()
     return items

xml描述是

<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">
    <Body>
       <SaveOrderItem xmlns="app.sync">
        <model>
           <comment xmlns="app.sync.models">[normalizedString]</comment>
        </model>
       </SaveOrderItem>
        </Body>
</Envelope>

发出请求的服务器然后验证响应,并引发异常 当发现注释在开始或结束 os 字符串上有空格时。 据我了解, normalizedString 类型不允许使用未剥离的刺。 从那种类型的字符串中动态删除空格的任何方法也是如此。 我查看了源代码并找到了类定义

class NormalizedString(Unicode):
    __type_name__ = 'normalizedString'
    __extends__ = Unicode

    class Attributes(Unicode.Attributes):
        white_space = "replace"

以便 white_space = "replace" 在客户端进行检查。

【问题讨论】:

  • 我不明白。我对 whiteSpace 的解释是它不是限制而是操作。它不应该是你问题的根源。见:w3.org/TR/2001/REC-xmlschema-2-20010502/#rf-whiteSpace
  • 您找到的那种类型是为了兼容 Xml Schema。在返回对象之前,您可以使用常用方法将所有空格替换为空格。
  • 最后一件事,whiteSpace="replace" 和 whiteSpace="collapse" 是两个不同的东西。在我看来,你让他们感到困惑。请仔细阅读我提供的链接中的规范。
  • 是的,当然我可以手动剥离所有文件,并返回从 ComplexModel 继承的对象,但是我有很多模型,这个解决方案将使支持它们变得不那么困难。关于 whiteSpace 我没有配置它,这是默认行为。在 SOAP 返回的对象中描述为 normalizedString 的 Django 模型的所有字符串字段 (models.CharField)。我认为响应函数应该在响应中删除字符串,因为它设置了归档的 normalizedString 的类型。

标签: python django soap whitespace spyne


【解决方案1】:

我找到了解决这个问题的方法: 我只是将默认字段映射器中的“CharField”替换为 Unicode 一行

default_model_mapper.register('CharField', original.Unicode) 而不是默认 ('CharField',primitive.NormalizedString)

在 spyne/util/django.py 中有描述

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-27
    • 2019-12-15
    • 1970-01-01
    • 1970-01-01
    • 2012-07-09
    • 1970-01-01
    相关资源
    最近更新 更多