Я работаю с LARGE старой базой кода C++ с многочисленными IDL-файлами, которые имеют все типы и константы, объявленные вне любого модуля.Создание java из IDL (избегая пакета по умолчанию)
Для C++ это приводит к генерации кода в глобальное пространство имен - уродливое, но приемлемое.
Теперь я пытаюсь добавить клиентов Java для подключения через CORBA. Однако для Java типы, которые генерируются из IDL (с использованием компилятора Sun/Oracle IDL для java: idlj), находятся в пакете по умолчанию по умолчанию, потому что они не входят в модуль IDL. Это приводит к ошибкам компиляции Java, поскольку импортировать из пакета по умолчанию запрещено.
Я ищу самый простой способ исправить проблему.
Я рассмотрел следующее:
- Место декларации модуля вокруг всех типов. В настоящее время я работаю над этим решением, но это очень больно, основываясь на количестве затронутых типов и влиянии на большую базовую кодовую базу C++.
- Используйте параметры -pkgPrefix или -pkgTranslate. До сих пор я не могу понять, как это сделать в целом, поскольку вы должны указать модуль для перевода из или указать тип для добавления префикса по номеру. -pkgPrefix может использоваться для определенного типа, но у нас есть сотни типов, и я бы предпочел не перечислять опцию -pkgPrefix специально для каждого скомпилированного файла ...
- Используйте прагматическую директиву? Я не знаю, какой из них использовать, но надеясь, что гуру может указать путь?
- ????
Мне трудно поверить, что нет простого способа заставить IDL находиться в пакете Java, если нет существующего модуля, который содержит все типы. Я надеюсь, что я просто пропущу очевидное!
Edit:
- IDL к Java компилятор idlj.
- Приведенный ниже пример.
- обновление Пункт # 2 (выше), чтобы уточнить, что использование -pkgPrefix для каждого типа не представляется возможным
Пример (если она не может быть разумно сценарий?):
Foo.idl
struct Foo
{
.
.
.
}
Foo.Java: (отметить, что ни один пакет не указан, то есть пакет по умолчанию):
public final class Foo implements org.omg.CORBA.portable.IDLEntity
{
.
.
.
}
ClassUsesFoo.java:
package com.sigh;
import Foo; // <-- this is an error
public class ClassUsesFoo
{
private Foo f;
};
Вопрос: Какой инструмент вы используете для генерации Java из IDL? Стандартное солнце «idlj»? Не могли бы вы привести конкретный пример 1) вашей командной строки (с «-pkgPrefix») и 2) результирующей Java (это не работает)? – paulsm4