我正在从 PeopleSoft 提供的 WSDL 生成自定义 Java 代码。我编写了几个 XJC 插件来尝试清理生成的代码以便更易于使用——添加接口和自定义方法等。
但是,我想为生成的异常类添加一个通用接口,但在我的插件中,这些类似乎不存在。
生成的异常类如下所示:
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
}
}
这也会失败,并且日志消息(“正在检查类...”)不会打印最终生成的任何异常类。
我还尝试将此代码从run()
方法中移出并移到postProcessModel()
我的插件的方法中,希望稍后在该过程中执行的代码会有所帮助。这也失败了。
代码按预期执行,所以我确信我的插件配置是正确的。此外,我以同样的方式捕获和修改了其他类。在运行时模型中似乎没有任何异常。但是,每次都会正确生成异常类。
有没有办法在运行时从 XJC 插件中捕获这些类?
提前感谢您提供的任何帮助。