gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 11:06:37 25 4
gpt4 key购买 nike

我正在从 PeopleSoft 提供的 WSDL 生成自定义 Java 代码。我已经编写了几个 XJC 插件来尝试清理生成的代码以使其更易于使用——添加接口(interface)和自定义方法等。

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

生成的异常类如下所示:

public class M286565V1 extends Exception

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

在我的插件中,我循环遍历 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 插件中捕获这些类?

在此先感谢您提供的任何帮助。

最佳答案

考虑使用 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

希望这对您有所帮助。

关于java - 在 XJC 插件的 CodeModel 中找不到异常类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29232911/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com