我从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插件中捕获这些类?
提前感谢您提供的任何帮助。
答案 0 :(得分:1)
考虑使用JAXB2 Basics Inheritance plugin执行此任务。 (免责声明:我是作者。)
您实际上应该使用插件的run
方法获取课程。 postProcessModell
不是正确的地方,它太早了,在加载模型后对其进行后处理后会调用它。
我只是建议调试它。您可以从测试用例中执行XJC而不会出现大问题,例如,请参阅此测试:
希望这有帮助。