ClassCastException: com.sun.proxy.$Proxy2 cannot be cast to

EJB编写测试客户端时出现报错,这里报错的原因就是类型不匹配,我写的测试类如下:

public static void main(String[] args) throws Exception {
		  //获取上下文对象
	      InitialContext initialContext = new InitialContext();
	      
	      // 获取远程服务的,并进行强制转换
	      TreeDelegateBean bean = (TreeDelegateBean) initialContext.lookup("TreeDelegateBean/remote");
	      //调用远程方法
	      Map<String, String> map = bean.findNodeMap();
	      System.out.println("map>>>" + map);

	}

JNDI.properties配置文件内容:

java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.factory.url.pkgs=org.jboss.naming
java.naming.provider.url=localhost:1099 

运行时就出现报错:

第一种报错:javax.naming.NameNotFoundException: TreeDelegateBean not bound

第二种报错:java.lang.ClassCastException: com.sun.proxy.$Proxy2 cannot be cast to com.ejb.service.TreeDelegateBean

解决方法:

出现第一种报错,首先检查ejb 是否启动成功。再就是 initialContext.lookup的 ejbName是否正确。在EJB 的启动日志里面有打印出各个 EJB,如下:

11:07:15,968 INFO  [SessionSpecContainer] Starting jboss.j2ee:ear=ExportServer.ear,jar=es-ejb.jar,name=TreeDelegateBean,service=EJB3
11:07:15,968 INFO  [EJBContainer] STARTED EJB: com.ejb.service.TreeDelegateBean ejbName: TreeDelegateBean
11:07:15,983 INFO  [JndiSessionRegistrarBase] Binding the following Entries in Global JNDI:

	ExportServer/TreeDelegateBean/remote - EJB3.x Default Remote Business Interface
	ExportServer/TreeDelegateBean/remote-com.delegate.facade.NavigationTreeDelegate - EJB3.x Remote Business Interface

所以ejbName  应该改写为 ExportServer/TreeDelegateBean/remote

第二种报错是类型转换问题,查看 TreeDelegateBean 实体类,如下:

@Stateless
@Remote(TreeDelegate.class)
public class TreeDelegateBean implements TreeDelegate{

	@EJB(beanName="TreeDAOBean")
	private TreeDAO treeDAO;
	
	
	....(methods)
}	

注意@Remote 中的值,这里是 TreeDelegate,所以转换的目标对象也是TreeDelegate。

上面两个报错修改后结果为:

 TreeDelegate bean = (TreeDelegate)  initialContext.lookup("ExportServer/TreeDelegateBean/remote");

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值