使用 SUDS 时添加 xsi:type 和信封命名空间

2023-12-14

我需要与 SOAP 服务交互,但这样做遇到了很多麻烦;非常感谢对此的任何指示。原来的错误信息是:

org.apache.axis2.databinding.ADBException: Any type element type has not been given

经过一番研究,发现这是 SUDS 和服务器之间的分歧,如何处理

type="xsd:anyType"

关于有问题的元素。

我已确认使用 SOAPUI,并在建议后认为可以通过以下步骤解决该问题:

  1. 将 xsi:type="xsd:string" 添加到每个元素会导致问题
  2. 将 xmlns:xsd="http://www.w3.org/2001/XMLSchema" 添加到 SOAP 信封

因此,SUDS 目前执行此操作的地方:

<SOAP-ENV:Envelope ... xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<ns3:Body>
  <ns0:method>
     <parameter>
        <values>
           <table>
              <key>EMAIL_ADDRESS</key>
              <value>[email protected]</value>
           </table>
        </values>
     </parameter>
  </ns0:method>

它应该产生这样的结果:

<SOAP-ENV:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" ... xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">

  <ns3:Body>
  <ns0:method>
     ...
     <parameter>
        <values>
           <table>
              <key xsi:type="xsd:string">EMAIL_ADDRESS</key>
              <value xsi:type="xsd:string">[email protected]</value>
           </table>
        </values>
     </parameter>
  </ns0:method>

有正确的方法吗?我已经看到使用 ImportDoctor 或 MessagePlugins 的建议,但还没有真正理解如何达到所需的效果。


我找到的解决方案是使用 MessagePlugin 在发送之前手动修复 XML。我希望有更优雅的东西,但至少这是有效的:

class SoapFixer(MessagePlugin):

    def marshalled(self, context):
        # Alter the envelope so that the xsd namespace is allowed
        context.envelope.nsprefixes['xsd'] = 'http://www.w3.org/2001/XMLSchema'
        # Go through every node in the document and apply the fix function to patch up incompatible XML. 
        context.envelope.walk(self.fix_any_type_string)

    def fix_any_type_string(self, element):
        """Used as a filter function with walk in order to fix errors.
        If the element has a certain name, give it a xsi:type=xsd:string. Note that the nsprefix xsd must also
         be added in to make this work."""
        # Fix elements which have these names
        fix_names = ['elementnametofix', 'anotherelementname']
        if element.name in fix_names:
            element.attributes.append(Attribute('xsi:type', 'xsd:string'))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 SUDS 时添加 xsi:type 和信封命名空间 的相关文章

随机推荐

  • 为什么我的字符串开头有“未定义”文本?

    我有一个函数可以将 AJAX 请求的结果连接在一起 由于某种原因 我的最终字符串以 未定义 开头 这是重现该问题的简化示例 In practice fetched via AJAX from a server var vendors id
  • ASP.NET MVC 本地化

    我正在尝试通过路线实现本地化 我有以下内容 routes MapRoute DefaultLocalized lang controller action id new controller Home action Index id lan
  • 使用 mysql 中的递归 php 创建数组

    我需要从像这样组织的 mysql 数据库创建一个数组 id description parentId 1 Level 1 0 2 Level 2 0 3 Level 1a 1 4 Level 1b 1 5 Level 1a1 3 6 Lev
  • jQuery 动画背景位置在块中?

    我正在尝试使用 jQuery 使跨度的背景位置每秒下降 10 像素 有什么好的方法可以做到这一点 我一直在玩 jQuery animate delay CSS 等setTimeout功能 但我无法让任何东西工作 非常感谢建议 我试图使 y
  • gitlab-shell:不允许的命令

    我已经在 Ubuntu 14 04 上安装了最新版本的 GitLab 除了推送到远程之外它工作正常 Running ssh email protected git receive pack repo git 效果很好 在 gitlab sh
  • ASP.NET MVC5 占位符中的字体很棒

    我正在尝试向登录页面的占位符添加一个字体很棒的图标 这是我到目前为止所拥有的 我不知道如何获得字体很棒的图标inside文本框 作为占位符 Html TextBoxFor m gt m UserName new class form con
  • XElement.Load 读取 & 符号和特殊国家/地区字符时出错

    我在从 XML 文件读取 符号时遇到问题 XElement xmlElements XElement Load Path Xml Data File 当我有以下情况时 我会收到错误
  • 在下拉列表打开时更改其内容?

    我有一个包含一些项目的下拉列表 当用户选择其中之一时 我希望下拉列表保持打开状态并重新填充新项目 然后用户选择其中之一 最后下拉菜单关闭 可以用 JavaScript 完成吗 如果是这样 怎么办 为了科学 我创建了一个替代答案来测试这一点
  • 如何在xmppGroupCoreDataStorageObject中保存和获取?

    Using xmpp messenger ios 我已经创建了组并设置了其配置并将用户添加到其中 然后我想将该组添加到xmppGroupCoreDataStorageObject存储以将其列出到 OpenChatViewController
  • UITextField 边框颜色

    我非常希望将自己的颜色设置为 UITextField 边框 但到目前为止我只能找到如何更改边框线样式 我使用背景属性以这种方式设置背景颜色 self textField backgroundColor textFieldColor 但我也必
  • pip/python:普通站点包不可写

    我有一台新 Macbook 一个用户安装了它 然后我安装了一个新用户 我的 授予管理员权限并删除了旧用户 我在 Catalina 操作系统上 自从安装以来 我一直遇到一些权限问题 VSCode 找不到 Jupyter Notebook pi
  • 获取 Google Cloud Storage 中的文件列表 (Appengine PHP)

    我有一个 Google Cloud Storage 存储桶 MyBucket 它有 20 个项目 我想在我的 appengine PHP 应用程序中获取这些文件名 我正在考虑是否可以使用 App Engine 的内置 Google Clou
  • 正则表达式帮助 - python - 从 css 中提取所有图像 url

    我正在尝试从 css 文件中提取所有图像 jpg png gif uri 示例 CSS blockpricecont width 660px height 75px background url images postBack jpg re
  • 使用画布nodeJS模糊图像

    这好像是ctx filter blur amount 不起作用 这是我的代码 const body await request get url const data await Canvas loadImage body ctx filte
  • 在c#中通过位掩码存储多个值

    我试图通过位掩码将四个独立的 5 位值 0 31 存储在 32 位 int 内 但无法正确设置这些值 并从用于存储的掩码 int 中获取各个值 谁能帮我这个 Edit 抱歉外部链接 这里有一些 JavaScript 演示了我想要实现的目标
  • 如何在 ASP.NET Core 6 中将字段值从 true 切换为 false,反之亦然

    我正在使用 ASP NET Core 6 和 mongodb 作为数据库构建一个 API 我正在尝试设置某个字段以从 true 切换到 false 反之亦然 如果场isactive True 然后我必须将其更新为 false 反之亦然 我已
  • 解析apache日志文件

    我刚刚开始学习 Python 想读取 Apache 日志文件并将每行的部分内容放入不同的列表中 文件中的行 172 16 0 3 25 Sep 2002 14 04 19 0200 GET HTTP 1 1 401 Mozilla 5 0
  • Cassandra:插入 timeuuid 错误

    我有下表 create table test userId varchar notifId timeuuid notification varchar time bigint read boolean primary key userId
  • 带有 FileSystemWatcher 和 Timer 的 Windows 服务 - 确保所有内容都得到处理

    我创建了一个 C Windows 服务应用程序来启动FileSystemWatcher监视目录中文件的创建 找到文件后 我实例化一个自定义类 该类解析文件 CSV 并使用其内容调用 Web 服务 该服务在某种程度上是异步的 并返回一个唯一的
  • 使用 SUDS 时添加 xsi:type 和信封命名空间

    我需要与 SOAP 服务交互 但这样做遇到了很多麻烦 非常感谢对此的任何指示 原来的错误信息是 org apache axis2 databinding ADBException Any type element type has not