我正在创建一个Web服务,我公司的内部客户端将调用它。服务方法如下所示:
CreateProposalResponse ProposalSOAService :: CreateProposal(CreateProposalRequest)
对于 CreateProposalResponse 消息,我需要在响应中添加业务错误消息。我一直在阅读很多关于将错误放入SOAP Headers的内容,但是对于业务错误,我不认为这是放置它们的合适位置,因为这应该是系统/传输/验证类型的错误而不是业务错误。下面是我对CreateProposal()SOA调用的响应XML。有人可以建议我如何向此响应添加错误消息吗?我很难想象这个以及主叫客户如何确定与正常响应和业务错误/异常的区别。
我的 CreateProposalResponse 消息如下所示:
<?xml version="1.0" encoding="UTF-8" ?>
<CreateProposalResponse xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.xxx.com/aces/proposal src/Proposal_v1.0.xsd"
xmlns="http://xmlns.raytheon.com/aces/proposal">
<userId>022483</userId>
<Proposal>
<proposalTitle>SBT Prop</proposalTitle>
<proposalDescription>Proposal is for SBT</proposalDescription>
<businessSegmentCode>SAS</businessSegmentCode>
<proposalType>Test</proposalType>
<proposalExternalRefID>SBT38829</proposalExternalRefID>
<proposalStartDate>2009-01-01</proposalStartDate>
<proposalEndDate>2025-01-01</proposalEndDate>
</Proposal>
<sourceSystemID>SBT</sourceSystemID>
<targetSystemID>ACES</targetSystemID>
</CreateProposalResponse>
答案 0 :(得分:1)
如何简单地将<errors>
数组元素作为消息中的可选元素,并使用一个或多个描述错误的<error>
元素填充它?然后,您可以指定响应消息将包含填充的<errors>
元素(以及即使面对错误也可能需要的其他元数据元素;可能<sourceSystemID>
和<targetSystemID>
是这样的元素?)但不是<Proposal>
,或者它不包含<Proposal>
但不包含<errors>
(或者元素将为空)。
(顺便说一下,我同意应该在邮件正文中指出业务错误,而不是SOAP错误。)
答案 1 :(得分:1)
我同意Aasmund Eldhuset,除非这些错误表明操作失败了。在这种情况下,您应该使用SOAP Fault。