2011-06-09 117 views
1

我需要将Java系统与传统C++系统集成。这两个系统通过CORBA进行通信。 由于Java系统在JBoss上运行,我们使用JacORB。使用JACORB maven编译器生成自定义IDL

为了从我们用maven-IDL编译器插件(使用JacORB)

org.codehaus.mojo IDLJ - Maven的插件 org.jacorb jacorb-IDL编译的.idl文件Java存根 2.2.3 提供

一切工作正常,但我想修改存根正在方式产生(改变方法,类等名称)。有什么办法可以做到吗?

+0

为什么要更改生成的代码?如果一切正常,你想解决什么问题? – 2011-06-10 04:51:59

回答

1

一切正常,但我想修改正在生成的方式存根(更改方法,类等名称)。有什么办法可以做到吗?

这是不可能的。

服务器骨架和客户端存根由Corba在您选择的实现中生成。当你干涉分布式对象时,它们基本上包含Marshaller和Unmarshaller来处理ORB对象参数。

所有这些代码都与CORBA使用的IDL语言高度耦合,因为这一代依赖于您提供的IDL。因此,您不能直接修改存根或骨架,这是没有意义的,因为IDL语言是为了确保所有分布式对象之间的通用接口,而不管其实现语言如何。

但是,您始终可以修改IDL本身以适应您的需求。

+1

我基本上达到了同样的结论,并放弃了修改生成的存根的想法。最后我调整了idl并提供了一些包装以隐藏一些自动生成的东西。这并不是我寻找的解决方案,但我想这是我可以用特定版本的JacORB做的(我无法改变它)。感谢你的回答。 – 2015-10-23 13:00:41

+0

@MarcinKozłowicz哈哈,所以你说的是你用我的答案! – 2016-02-29 00:02:56

0

您可以修改$ JACORB_HOME/src/org/jacorb/idl下的代码来生成您想要的任何内容。查看OpDecl.java中的printStreamBody方法,看看容易理解和修改的代码示例。

1

通常情况下,人们在这种情况下所做的就是使用立面图案。

https://en.wikipedia.org/wiki/Facade_pattern

创建IDL正常然后创建了另一类有效地包装了IDL类,但只是向下传递到IDL接口的调用。使用此方法,您可以为您可以在程序中使用的方法创建新名称。如果您在某些情况下总是传递相同的参数,您还有机会简化方法。

另一个优点是,如果IDL作者决定重命名他们的某个方法或更改参数,则由于您没有在程序中直接使用它们的接口,所以您有一定的保护。