2012-06-25 12 views
7

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:

  1. 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.
  2. 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 ...
  3. ¿Usa una directiva pragma? No estoy al tanto de cuál usar, ¿pero espero que un gurú pueda señalar el camino?
  4. ????

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; 
}; 
+2

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

Respuesta

2

se puede jugar con las opciones pkgPrefix y como se indica pkgTranslate en a french site Supongo que tiene esa parte correcta, pero detallo por si acaso.

ejemplo:

interface T1 
{ 
}; 
interface T2 
{ 
}; 

Usted a cabo la configuración pkgPrefix en idl.config archivo

PkgPrefix.T1=aaa 
PkgPrefix.T2=bbb 

siguiente comando

idlj -td dir T.idl 

crea los archivos de (existente) directorio dir:

dir/ 
├── aaa 
│   ├── T1Helper.java 
│   ├── T1Holder.java 
│   ├── T1.java 
│   ├── T1Operations.java 
│   └── _T1Stub.java 
└── bbb 
    ├── T2Helper.java 
    ├── T2Holder.java 
    ├── T2.java 
    ├── T2Operations.java 
    └── _T2Stub.java 

Para crear el archivo de configuración, puede usar una combinación de grep/awk/sed/cut.

Cuestiones relacionadas