Estoy trabajando con una base de código C++ heredada GRANDE con numerosos archivos IDL que tienen todos los tipos y constantes declarados fuera de cualquier módulo.Generación de Java desde IDL (evitando el paquete predeterminado)
Para C++, esto da como resultado que el código se genere en el espacio de nombres global - feo, pero aceptable.
Ahora intento agregar clientes Java para conectarme a través de CORBA. Sin embargo, para Java, los tipos que se generan a partir del IDL (utilizando el compilador Sun/Oracle IDL para java: idlj) están en el paquete predeterminado java porque no están dentro de un módulo IDL. Esto da como resultado errores de compilación de Java, ya que es ilegal importar desde el paquete predeterminado.
Estoy buscando la manera más fácil de corregir el problema.
he considerado lo siguiente:
- lugar una declaración módulo de alrededor de todos los tipos. Actualmente estoy trabajando en esta solución, pero es MUY dolorosa, según la cantidad de tipos afectados y el impacto en la gran base de código C++ heredada.
- Utilice las opciones -pkgPrefix o -pkgTranslate. Hasta ahora, no puedo entender cómo lograr esto genéricamente, ya que debe especificar un módulo para traducir de o especificar un tipo para agregar un prefijo al. -pkgPrefix se puede usar para un tipo específico, pero tenemos cientos de tipos y prefiero no enumerar una opción -pkgPrefix específicamente para cada archivo compilado ...
- ¿Usa una directiva pragma? No estoy al tanto de cuál usar, ¿pero espero que un gurú pueda señalar el camino?
- ????
Me resulta difícil creer que no hay una manera fácil de forzar el IDL en un paquete de Java si no hay un módulo existente que contenga todos los tipos. ¡Espero que me esté perdiendo lo obvio!
Editar:
- IDL a Java compilador es idlj.
- Ejemplo agregado a continuación.
- Actualización Artículo # 2 (arriba) para aclarar que el uso de -pkgPrefix para cada tipo no es factible
Ejemplo (a menos que puede ser escrito razonablemente?):
Foo.idl
struct Foo
{
.
.
.
}
Foo.java: (nota de que no se especifica ningún paquete, es decir, el paquete por defecto):
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;
};
P: ¿Qué herramienta está utilizando para generar Java desde IDL? ¿El estándar Sun "idlj"? ¿Podría dar un ejemplo específico de 1) su línea de comandos (con "-pkgPrefix") y 2) la Java resultante (eso no funciona)? – paulsm4