Я генерирую пользовательский Java-код из WSDL, предоставленного PeopleSoft. Я написал несколько плагинов XJC, чтобы попытаться очистить сгенерированный код, который будет проще в использовании - добавление интерфейсов и пользовательских методов и т. Д.Не удается найти классы исключений в CodeModel в плагине XJC
Однако я хотел бы добавить общий интерфейс к генерируемым классам исключений, но внутри моего плагина, классы, похоже, не существуют.
Сгенерированный класс 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
}
}
Это терпит неудачу, а также, и сообщение регистрации («Проверка класса ...») не печатает любого из классов исключений, которые в конечном счете генерируется.
Я также попытался переместить этот код из метода run()
и в метод postProcessModel()
моего плагина, надеясь, что код, выполняемый позже в этом процессе, поможет. Это тоже не удалось.
Код выполняется так, как ожидалось, поэтому я уверен, что моя конфигурация плагина верна. Кроме того, я захватил и изменил другие классы таким же образом. Похоже, что во время выполнения не существует никаких Исключений в модели. Тем не менее классы исключений корректно генерируются каждый раз.
Есть ли способ захватить эти классы из плагина XJC во время выполнения?
Заранее благодарим за любую помощь, которую вы можете предоставить.
Возможно, вам это поможет: http://stackoverflow.com/questions/9247730/what-is-the-role-of-classoutline-jclass-cclass-in-codemodel/9404341 – lexicore