从IDL生成java(避免默认包)

Ker*_*rry 7 java corba idl

我正在使用大型遗留C++代码库,其中包含许多IDL文件,这些文件具有在任何模块之外声明的所有类型和常量.

对于C++,这会导致代码生成到全局命名空间 - 丑陋但可以接受.

现在我正在尝试添加Java客户端以通过CORBA进行连接.但是,对于Java,从IDL生成的类型(使用适用于java的Sun/Oracle IDL编译器:idlj)位于java 默认包中,因为它们不在IDL模块中.这会导致Java编译错误,因为从默认包导入是非法的.

我正在寻找解决问题的最简单方法.

我考虑过以下几点:

  1. 在所有类型周围放置一个模块声明.我目前正在使用这个解决方案,但根据受影响的类型数量以及对大型遗留C++代码库的影响,这非常痛苦.
  2. 使用-pkgPrefix或-pkgTranslate选项.到目前为止,我无法弄清楚如何做到一般这个,因为你必须指定一个模块翻译来自或指定类型添加前缀.-pkgPrefix可以用于特定类型,但我们有数百种类型,我宁愿不为每个编译文件专门列出-pkgPrefix选项...
  3. 使用pragma指令?我不知道有人可以使用,但希望大师可以指明方向?
  4. ????

我发现如果没有包含所有类型的现有模块,很难相信没有简单的方法强制IDL在Java包中.我希望我只是错过了显而易见的事!

编辑:

  • IDL-to-Java编译器是idlj.
  • 添加了以下示例.
  • 更新了项目#2(上面),以澄清为每种类型使用-pkgPrefix是不可行的(除非它可以合理地编写脚本?)

例:


Foo.idl

struct Foo
{
  .
  .
  .
}
Run Code Online (Sandbox Code Playgroud)

Foo.java :( 注意没有指定包,这意味着默认包):

public final class Foo implements org.omg.CORBA.portable.IDLEntity
{
  .
  .
  .
}
Run Code Online (Sandbox Code Playgroud)

ClassUsesFoo.java:

package com.sigh;

import Foo;  // <-- this is an error
public class ClassUsesFoo
{
     private Foo f;
};
Run Code Online (Sandbox Code Playgroud)

小智 2

您可以使用法国网站中所示的选项 pkgPrefix 和 pkgTranslate \n我想您的部分是正确的,但我详细介绍以防万一。

\n\n

例子:

\n\n
interface T1\n{\n};\ninterface T2\n{\n};\n
Run Code Online (Sandbox Code Playgroud)\n\n

您在文件 idl.config 中出了 pkgPrefix 配置

\n\n
PkgPrefix.T1=aaa\nPkgPrefix.T2=bbb\n
Run Code Online (Sandbox Code Playgroud)\n\n

以下命令

\n\n
idlj -td dir T.idl\n
Run Code Online (Sandbox Code Playgroud)\n\n

在(现有)目录 dir 中创建文件:

\n\n
dir/\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 aaa\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 T1Helper.java\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 T1Holder.java\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 T1.java\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 T1Operations.java\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 _T1Stub.java\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 bbb\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 T2Helper.java\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 T2Holder.java\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 T2.java\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 T2Operations.java\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 _T2Stub.java\n
Run Code Online (Sandbox Code Playgroud)\n\n

要创建配置文件,可以使用 grep / awk / sed / cut 的组合。

\n