You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 05:20:40