【问题标题】:Exceptions in method declarations. JAXB方法声明中的异常。 JAXB
【发布时间】:2012-04-25 21:32:31
【问题描述】:

假设我有这样的异常层次结构:

public class A extends RuntimeException {
...
}

public class B extends A {
...
}

在web服务接口中有一个方法:

public void aa() throws A;

此方法的实现可以抛出异常A 或异常B,但是在部署到tomcat 时,cxf 只发布带有A 异常声明的wsdl。

我尝试在两个类上使用@XmlRootElement,在两个类上使用@XmlType,在父类上使用@XmlRootElement,在父类上使用@XmlRootElement@XmlSeeAlso,但发布的wsdl 没有B异常声明。此外,我编写了一个使用该 wsdl 的测试,并且测试仅获得 A 异常,但是我模拟了这两种类型的异常。如何在 wsdl 声明中获取子异常?

【问题讨论】:

    标签: java web-services jaxb cxf


    【解决方案1】:

    我认为您需要将AB 都列为aa 抛出的可能异常,否则jaxb 无法知道您可能会抛出派生类的异常。试试:

    public void aa() throws A, B;
    

    【讨论】:

    • throws 中声明异常的层次结构不是很舒服。也许可以通过编写一些拦截器来完成?我的意思是,如果方法声明了异常A(例如),那么拦截器必须添加所有扩展异常A的异常
    • 您当然可以编写一个 inceptor,但只要 JAXBContext 也知道派生类(@XmlSeeAlso 应该为您完成),它就应该已经为您完成了。您可能还想看看其他一些技术:1234
    猜你喜欢
    • 2017-09-18
    • 1970-01-01
    • 2011-04-23
    • 2021-02-02
    • 2012-06-22
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 2021-04-20
    相关资源
    最近更新 更多