在XJC插件中的CodeModel中找不到异常类

时间:2015-03-24 12:40:12

标签: java jaxb xjc sun-codemodel jcodemodel

我从PeopleSoft提供的WSDL生成自定义Java代码。我已经编写了几个XJC插件来尝试清理生成的代码以便于使用 - 添加接口和自定义方法等。

但是,我想为生成的Exception类添加一个通用接口,但在我的插件中,这些类似乎不存在。

生成的Exception类如下所示:

public class M286565V1 extends Exception

它们都具有相同的命名模式(M后跟一串数字,以V1结尾),它们都扩展了java.lang.Exception。但是,它们都有一个常用的方法getFaultInfo(),我想将其添加到界面中。

在我的插件中,我遍历Outline.getClasses()提供的所有类,并检查每个类是否扩展了java.lang.Exception。

for ( ClassOutline classOutline : outline.getClasses() ) {
    final JDefinedClass implClass = classOutline.implClass;

    JClass superClass = implClass._extends();
    if ( superClass != null && superClass.fullName().equals( "java.lang.Exception" ) ) {
        //This class is an Exception class
    }
}

无法找到任何异常类。

我也试过按名称匹配:

for ( ClassOutline classOutline : outline.getClasses() ) {
    final JDefinedClass implClass = classOutline.implClass;

    //Try to capture exception classes by name
    //Exception classes start with an M, followed by a number
    final String className = implClass.name();
    LOG.debug( "Checking class {}", className );
    if ( className.startsWith( "M" ) && Character.isDigit( className.charAt( 1 ) ) ) {
        //This class is an Exception class
    }
}

这也失败了,日志消息(" Checking class ...")不会打印最终生成的任何异常类。

我还尝试将此代码移出run()方法并插入到插件的postProcessModel()方法中,希望稍后在该过程中执行的代码会有所帮助。这也失败了。

代码按预期执行,因此我确信我的插件配置正确无误。此外,我也以同样的方式捕获并修改了其他类。在运行时,模型中似乎没有任何异常。但是,每次都会正确生成Exception类。

有没有办法在运行时从XJC插件中捕获这些类?

提前感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:1)

考虑使用JAXB2 Basics Inheritance plugin执行此任务。 (免责声明:我是作者。)

您实际上应该使用插件的run方法获取课程。 postProcessModell不是正确的地方,它太早了,在加载模型后对其进行后处理后会调用它。

我只是建议调试它。您可以从测试用例中执行XJC而不会出现大问题,例如,请参阅此测试:

https://github.com/highsource/jsonix-schema-compiler/blob/master/compiler/src/test/java/org/hisrc/jsonix/xjc/plugin/tests/JsonixPluginTest.java

希望这有帮助。