如何通过JAXB注解捕获SOAP Fault中的PaymentServerException
解决JAXB解析SOAP Fault无法获取PaymentServerException的问题
问题根源在于SOAP报文中的<ebppif1:PaymentServerException>属于urn:PaymentServer命名空间,但你的JAXB注解未指定该命名空间,导致解析时无法匹配到对应元素,最终excepDto为null。
只需给相关注解补充命名空间配置即可,修改后的代码如下:
1. 修改DetailDto类
@XmlRootElement(name = "detail", namespace = "http://schemas.xmlsoap.org/soap/envelope/") @XmlAccessorType(XmlAccessType.FIELD) public class DetailDto { // 明确指定PaymentServerException所在的命名空间 @XmlElement(name = "PaymentServerException", namespace = "urn:PaymentServer") private PaymentExcepDto excepDto; }
2. 修改PaymentExcepDto类
@XmlRootElement(name = "PaymentServerException", namespace = "urn:PaymentServer") @XmlAccessorType(XmlAccessType.FIELD) public class PaymentExcepDto { @XmlElement(name = "provider") protected String provider; @XmlElement(name = "error") protected String error; @XmlElement(name = "description") protected String description; @XmlElement(name = "screen") protected String screen; // 补充报文中存在的所有字段 }
3. 确认FaultDto配置
原FaultDto的配置基本正确,detail元素的命名空间与Fault一致(SOAP信封命名空间),无需额外修改:
@XmlAccessorType(XmlAccessType.FIELD) @XmlRootElement(name = "Fault", namespace = "http://schemas.xmlsoap.org/soap/envelope/") @Data public class FaultDto { @XmlElement(name = "faultcode") private String faultCode; @XmlElement(name = "detail") private DetailDto detail; }
修改后重新解析,即可正确捕获PaymentServerException中的所有内容。
内容的提问来源于stack exchange,提问作者Javohir Majidov
相关产品推荐
相关产品推荐

