Sto lavorando con una base di codice C++ legacy LARGE con numerosi file IDL che hanno tutti i tipi e le costanti dichiarate all'esterno di qualsiasi modulo.Generazione java da IDL (evitando il pacchetto predefinito)
Per C++, questo genera il codice generato nello spazio dei nomi globale - brutto, ma accettabile.
Ora sto cercando di aggiungere client Java per la connessione tramite CORBA. Per Java, tuttavia, i tipi generati dall'IDL (utilizzando il compilatore IDL Sun/Oracle per Java: idlj) sono nel pacchetto predefinito java perché non si trovano all'interno di un modulo IDL. Ciò si traduce in errori di compilazione Java, poiché è illegale importare dal pacchetto predefinito.
Sto cercando il modo più semplice per correggere il problema.
Ho considerato il seguente:
- Posizionare una dichiarazione del modulo intorno a tutti i tipi. Attualmente sto lavorando a questa soluzione, ma è MOLTO doloroso, in base al numero di tipi interessati e all'impatto sulla base di codice C++ di grandi dimensioni.
- Utilizzare le opzioni -pkgPrefix o -pkgTranslate. Finora, non riesco a capire come farlo genericamente, dal momento che devi specificare un modulo per tradurre da o specificare un tipo per aggiungere un prefisso a. -pkgPrefix può essere usato per un tipo specifico, ma abbiamo centinaia di tipi e preferisco non elencare un'opzione -pkgPrefix specifica per ogni file compilato ...
- Utilizzare una direttiva pragma? Non sono a conoscenza di uno da usare, ma spero che un guru possa indicarci la via?
- ????
Trovo difficile credere che non ci sia un modo semplice per forzare l'IDL in un pacchetto Java se non esiste un modulo esistente che contiene tutti i tipi. Spero che mi manchi l'ovvio!
Edit:
- IDL-to-Java compilatore è idlj.
- Esempio aggiunto di seguito.
- Aggiornato Articolo # 2 (sopra) per chiarire che l'uso -pkgPrefix per ogni tipo non è fattibile
Esempio (a meno che non si può ragionevolmente script?):
Foo.idl
struct Foo
{
.
.
.
}
Foo.java: (notare che nessun pacchetto è specificato, cioè il pacchetto di default):
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;
};
D: Quale strumento stai utilizzando per generare Java da IDL? Lo standard Sun "idlj"? Potresti fornire un esempio specifico di 1) la tua riga di comando (con "-pkgPrefix") e 2) il Java risultante (che non funziona)? – paulsm4