0

0

Web Service (SOAP)中的XML请求和响应映射

星降

星降

发布时间:2026-02-08 06:33:14

|

1001人浏览过

|

来源于php中文网

原创

SOAP请求必须严格遵循WSDL契约,包括命名空间、元素顺序、空值表示等;推荐用Zeep或JAX-WS生成客户端代码,调试需抓取原始HTTP流量逐字比对。

web service (soap)中的xml请求和响应映射

SOAP请求体必须严格匹配WSDL定义的soap:Body结构

WSDL文件里的messageportType决定了XML请求的根元素名、命名空间和子元素顺序。手写请求时,哪怕xmlns少一个冒号、xs:element声明的minOccurs="0"字段被意外包含,服务端都可能直接返回SOAP-ENV:Client错误。

  • wsdl2py(Zeep)或wsimport(JAX-WS)生成客户端代码,比手动拼XML更可靠
  • 检查WSDL中下的style="document"还是style="rpc":前者要求soap:Body内直接是操作名元素,后者会多一层封装
  • 命名空间前缀(如tns:ns1:)必须与WSDL中声明一致,不能仅靠默认命名空间“省略”

响应XML解析失败常因命名空间或类型映射不一致

服务端返回的soap:Body里,元素可能带xmlns=""清空默认命名空间,或用xsi:type指定具体类型(如xsi:type="xsd:string"),而客户端解析器若忽略这些,就会把值读成None或报ElementTree.ParseError

  • Python用lxml.etree时,显式传入namespaces参数,例如root.find('.//{http://example.com}Result', ns)
  • Java Axis2默认不校验xsi:type,但启用schemaValidation=true后会因类型不匹配抛AxisFault
  • 响应中SOAP-ENV:Faultfaultcode值(如ServerClient)比HTTP状态码更能定位问题根源

Zeep Python库自动处理命名空间但需注意strict=False的副作用

Zeep默认开启严格模式(strict=True),遇到WSDL未声明的字段或额外属性就报TypeError;设为False虽能跳过校验,但可能导致result对象缺失关键字段——尤其当服务端返回了可选元素却没在WSDL中标记minOccurs="0"时。

Flawless AI
Flawless AI

好莱坞2.0,电影制作领域的生成式AI工具

下载
from zeep import Client
client = Client('service.wsdl', strict=False)  # 关键开关
# 调用后检查 result._value_1 是否存在,而非直接访问 result.field_name
response = client.service.GetUserInfo(id=123)
if hasattr(response, '_value_1'):
    data = response._value_1
else:
    data = response
  • client.wsdl.dump()确认Zeep实际识别的输入/输出消息结构
  • 对含anyTypeany的WSDL,Zeep返回的是object而非dict,需用zeep.helpers.serialize_object()转成标准Python类型
  • 避免在生产环境长期使用strict=False,它掩盖了WSDL与实际服务的偏差

调试SOAP流量必须捕获原始HTTP请求/响应而非日志摘要

很多框架(如Spring Web Services)的日志只打印“marshalled request”,省略了Content-Type: text/xml; charset=utf-8头、SOAPAction头,甚至整个soap:Envelope外层。真正出错时,问题往往藏在这些地方。

  • mitmproxy或Fiddler抓包,确认POST /Service.asmx的请求体是否含BOM、换行符是否为\r\n(某些老ASMX服务拒收\n
  • 响应中的Content-Encoding: gzip头若未被客户端解压,会导致XML解析失败,错误信息常为“unclosed token”
  • WSDL地址本身带?wsdl参数时,注意有些服务要求?WSDL(大写)才返回正确内容

WSDL不是文档而是契约,XML节点名、命名空间、顺序、空值表示法(nil="true"还是省略元素)任何一项不一致,都会让请求在传输层之下就失败。别信“差不多能通”,得逐字比对。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
spring框架介绍
spring框架介绍

本专题整合了spring框架相关内容,想了解更多详细内容,请阅读专题下面的文章。

118

2025.08.06

Java Spring Security 与认证授权
Java Spring Security 与认证授权

本专题系统讲解 Java Spring Security 框架在认证与授权中的应用,涵盖用户身份验证、权限控制、JWT与OAuth2实现、跨站请求伪造(CSRF)防护、会话管理与安全漏洞防范。通过实际项目案例,帮助学习者掌握如何 使用 Spring Security 实现高安全性认证与授权机制,提升 Web 应用的安全性与用户数据保护。

73

2026.01.26

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

626

2023.08.02

pdf怎么转换成xml格式
pdf怎么转换成xml格式

将 pdf 转换为 xml 的方法:1. 使用在线转换器;2. 使用桌面软件(如 adobe acrobat、itext);3. 使用命令行工具(如 pdftoxml)。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1918

2024.04.01

xml怎么变成word
xml怎么变成word

步骤:1. 导入 xml 文件;2. 选择 xml 结构;3. 映射 xml 元素到 word 元素;4. 生成 word 文档。提示:确保 xml 文件结构良好,并预览 word 文档以验证转换是否成功。想了解更多xml的相关内容,可以阅读本专题下面的文章。

2099

2024.08.01

xml是什么格式的文件
xml是什么格式的文件

xml是一种纯文本格式的文件。xml指的是可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。想了解更多相关的内容,可阅读本专题下面的相关文章。

1104

2024.11.28

登录token无效
登录token无效

登录token无效解决方法:1、检查token的有效期限,如果token已经过期,需要重新获取一个新的token;2、检查token的签名,如果签名不正确,需要重新获取一个新的token;3、检查密钥的正确性,如果密钥不正确,需要重新获取一个新的token;4、使用HTTPS协议传输token,建议使用HTTPS协议进行传输 ;5、使用双因素认证,双因素认证可以提高账户的安全性。

6326

2023.09.14

登录token无效怎么办
登录token无效怎么办

登录token无效的解决办法有检查Token是否过期、检查Token是否正确、检查Token是否被篡改、检查Token是否与用户匹配、清除缓存或Cookie、检查网络连接和服务器状态、重新登录或请求新的Token、联系技术支持或开发人员等。本专题为大家提供token相关的文章、下载、课程内容,供大家免费下载体验。

830

2023.09.14

Golang处理数据库错误教程合集
Golang处理数据库错误教程合集

本专题整合了Golang数据库错误处理方法、技巧、管理策略相关内容,阅读专题下面的文章了解更多详细内容。

61

2026.02.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.4万人学习

Django 教程
Django 教程

共28课时 | 4万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号