簡體   English   中英

調用EJB Bean方法時,不能將java.lang.Class強制轉換為java.lang.String

[英]java.lang.Class cannot be cast to java.lang.String when invoking a EJB Bean Method

我已經遇到了問題。 我已經成功地從JBoss查找了我的遠程bean,但是當我嘗試調用其任何方法時,下一個異常將出現:

java.lang.Class cannot be cast to java.lang.String.

完整的堆棧跟蹤為:

java.lang.ClassCastException: java.lang.Class cannot be cast to java.lang.String
at org.jboss.ejb.client.remoting.ProtocolMessageHandler.readAttachments(ProtocolMessageHandler.java:56)
at org.jboss.ejb.client.remoting.InvocationExceptionResponseHandler$MethodInvocationExceptionResultProducer.getResult(InvocationExceptionResponseHandler.java:85)
at org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:212)
at org.jboss.ejb.client.TransactionInterceptor.handleInvocationResult(TransactionInterceptor.java:47)
at org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:214)
at org.jboss.ejb.client.ReceiverInterceptor.handleInvocationResult(ReceiverInterceptor.java:96)
at org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:203)
at org.jboss.ejb.client.EJBClientInvocationContext.awaitResponse(EJBClientInvocationContext.java:341)
at org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:126)
at org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:107)
at org.jboss.ejb.client.EJBInvocationHandler.invoke(EJBInvocationHandler.java:90)
at com.sun.proxy.$Proxy32.createEvent(Unknown Source)
at com.mypackage.FacadeImpl.createEvent(FacadeImpl.java:89)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:201)
at com.sun.proxy.$Proxy28.createEvent(Unknown Source)

最后一行是調用我的方法“ CreateEvent”。 我猜想該異常拋出在EJBClientInvocationContext的“ getResult()”方法內。

我的代碼是:

IEventDao eventDao = (IEventDao) ctx.lookup("java:/task/EventDao!MyPackage.IEventDao");

已成功從遠程獲取EventDao。 嘗試調用方法:

public Event createEvent(final Event event) {
    return eventDao.createEvent(event);
}

Event event = new EventImpl("Test event: Star Wars: Episode VI");
createEvent(event); <-- Line #89. Exception has been throwned.

CreateEvent方法主體。 只是為了您的信息:它甚至都不輸入這段代碼。 它甚至在調用entityManager.persist(event);之前引發異常entityManager.persist(event);

@Transactional(propagation = Propagation.REQUIRED)
public Event createEvent(Event event) {
    entityManager.persist(event);
    return event;
}

這是FacadeImpl的完整代碼:

@Service
public class FacadeImpl implements BookingFacade {
@Autowired
private FacadeUtils facadeUtils;
private IEventDao eventDao;  
private InitialContext ctx;
private Properties props = new Properties();

public void init() throws NamingException, IOException {
    props.load(getClass().getResourceAsStream("/jndi.properties"));
    ctx = new InitialContext(props);
    eventDao = (IEventDao) ctx.lookup("java:/Assignment16-1.0-SNAPSHOT/EventDao!com.mypackage.IEventDao");      
}

public Event createEvent(final Event event) {
    return eventDao.createEvent(event);
}
}

在大多數情況下,錯誤java.lang.ClassCastException: java.lang.Class cannot be cast to java.lang.String強制轉換java.lang.ClassCastException: java.lang.Class cannot be cast to java.lang.String是由於對泛型的錯誤使用或試圖向下轉換(例如Object-> String)為不兼容的類型所致。 請記住,如果沒有顯式類型轉換並且對象應該可轉換為String,則不能將Object類型分配為String類型。

這是對ClassCastException進行故障排除的好文章: http : //examples.javacodegeeks.com/java-basics/exceptions/java-lang-classcastexception-how-to-solve-class-cast-exception/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM