WSDL 中的 Fault 元素声明有什么用?
What's the Fault element declaration in WSDL good for?
在 WSDL 中,wsdl:Fault
元素声明服务可能 return 的 SOAP 错误消息的结构。或者更准确地说,它声明了 SOAP 故障消息的 <detail>
元素的结构。
问: wsdl:Fault
声明的确切目的是什么?它是否指定 SOAP 错误消息详细信息 必须 具有已声明的名称空间和结构?或者它是否指定 SOAP 错误消息详细信息 通常 具有已声明的名称空间和结构?换句话说,如果 SOAP 服务 returns SOAP 因 <detail>
元素的结构而出错,该元素的命名空间不是在 WSDL 中声明的,那么消息对于 WSDL 是否无效?
在我看来,wsdl:Fault
声明只是一个建议。 SOAP 错误可能 return 由另一层而不是服务本身(例如代理网关)编辑,并且该层可能 return SOAP 错误详细信息中的任意内容。因此我推断,如果服务实现 return 的错误详细信息与 WSDL 中声明的不同,应该没问题,对吗?
我没有找到我的问题的任何明确答案。但是根据互联网上各种文档的各种提示,我推断:
- 故障消息可以包含
<detail>
元素的任意数量的子元素。即使是没有在 WSDL 中声明的细节结构。参见例如Example 16-6.
- 在 WSDL 中声明的故障被视为 modeled faults, others are unmodeled faults. Modeled faults represent business logic faults, the other faults usually represent runtime/technical faults (see here)。
- 在
<detail>
元素下有多个元素并不与 WS-I Basic Profile 相矛盾。特别是,要求 R1002 说:
R1002: A RECEIVER MUST accept faults that have any number of elements,
including zero, appearing as children of the detail element. Such
children can be qualified or unqualified.
所以,总结一下:
服务应该return 为业务错误建模故障。消费者可能会以特殊方式处理这些建模故障,例如使用修改后的参数重试请求。未建模故障主要用于技术错误、验证错误和其他运行时错误。
当您开始 return 未建模故障而不是建模故障时,您可能会破坏消费者应用程序的业务逻辑。
在 WSDL 中,wsdl:Fault
元素声明服务可能 return 的 SOAP 错误消息的结构。或者更准确地说,它声明了 SOAP 故障消息的 <detail>
元素的结构。
问: wsdl:Fault
声明的确切目的是什么?它是否指定 SOAP 错误消息详细信息 必须 具有已声明的名称空间和结构?或者它是否指定 SOAP 错误消息详细信息 通常 具有已声明的名称空间和结构?换句话说,如果 SOAP 服务 returns SOAP 因 <detail>
元素的结构而出错,该元素的命名空间不是在 WSDL 中声明的,那么消息对于 WSDL 是否无效?
在我看来,wsdl:Fault
声明只是一个建议。 SOAP 错误可能 return 由另一层而不是服务本身(例如代理网关)编辑,并且该层可能 return SOAP 错误详细信息中的任意内容。因此我推断,如果服务实现 return 的错误详细信息与 WSDL 中声明的不同,应该没问题,对吗?
我没有找到我的问题的任何明确答案。但是根据互联网上各种文档的各种提示,我推断:
- 故障消息可以包含
<detail>
元素的任意数量的子元素。即使是没有在 WSDL 中声明的细节结构。参见例如Example 16-6. - 在 WSDL 中声明的故障被视为 modeled faults, others are unmodeled faults. Modeled faults represent business logic faults, the other faults usually represent runtime/technical faults (see here)。
- 在
<detail>
元素下有多个元素并不与 WS-I Basic Profile 相矛盾。特别是,要求 R1002 说:
R1002: A RECEIVER MUST accept faults that have any number of elements, including zero, appearing as children of the detail element. Such children can be qualified or unqualified.
所以,总结一下:
服务应该return 为业务错误建模故障。消费者可能会以特殊方式处理这些建模故障,例如使用修改后的参数重试请求。未建模故障主要用于技术错误、验证错误和其他运行时错误。
当您开始 return 未建模故障而不是建模故障时,您可能会破坏消费者应用程序的业务逻辑。