【发布时间】:2014-11-26 10:33:12
【问题描述】:
架构: Windows 客户端 -> Wildfly JAX-RS 服务 -> JBoss 5.1.0.GA 旧系统。
我收到 java.lang.ClassCastException: javax.naming.Reference 在 Wildfly JAX-RS 服务和 JBoss 5.1.0.GA 旧系统之间通信时无法转换为 com.interfaces.GroupBookingManagerRemote。
当我从 Wildfly 与 JBoss AS 5.1.0.GA 通信时,我正在尝试使用 JNDI 进行连接。
在我的 Wildfly Server Maven pom 中,我包括:
<dependency>
<groupId>jboss</groupId>
<artifactId>jnp-client</artifactId>
<version>4.2.2.GA</version>
</dependency>
这使我可以访问所需的 org.jnp.* 类和接口。
我只需使用以下代码连接到我的远程计算机并取回 GroupBookingManager。但是,当我尝试将类强制转换为接口 GroupBookingManagerRemote 时,就会出现问题。
Properties env = new Properties();
env.setProperty(Context.PROVIDER_URL, "jnp://myremoteserver:1099");
env.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
env.setProperty(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
InitialContext initialContext = new InitialContext(env);
Object ref = initialContext.lookup("MyEARFile/GroupBookingManager/remote");
if (ref != null) {
bookingManager = (GroupBookingManagerRemote) ref; // java.lang.ClassCastException: javax.naming.Reference cannot be cast
}
我有一个 myclient.jar 文件,已添加到我的 Wildfly 应用程序中,其中包含远程接口 GroupBookingManagerRemote。
有人发现我所做的有什么问题吗?
谢谢,
达伦
【问题讨论】:
-
伙计,这是用时间机器回去...可能你没有投射对象,但你需要做 PortableRemoteObject.narrow(ref, GroupBookingManagerRemote.class); (不知道对不对,我是从很老的公司wiki文章中挖出来的)
-
不幸的是,这给了我以下信息:java.lang.ClassCastException: javax.naming.Reference cannot be cast to org.omg.CORBA.Object
-
那么很可能是依赖错误。该版本很奇怪 - 看起来您正在使用来自 JBoss 4.2.2 的 JBoss 5.1 的依赖项。 JBoss 总是有一个通用的 jboss-as-client 依赖项,用于从客户端连接到 JBoss 服务器,尝试使用它。 mvnrepository.com/artifact/org.jboss.jbossas/jboss-as-client/…
-
嗨 Gimby,我知道你在做什么,但是在 maven 中我只能找到 4.2.2 版本作为最新的 jnp 客户端。 mvnrepository.com/artifact/jboss/jnp-client
-
但是你忽略了我的另一半评论。
标签: java maven jboss jndi wildfly-8