2013-05-21 31 views
0

我在搜索的日子裏還找不到有用的東西。也許我只是不正確的地方。通過EJB RMI傳遞對象--NullPointerException

下面是這個想法 - 非常簡單:我想通過J2EE中的內置RMI將對象從一個EJB傳遞到另一個EJB。

據我所知它是可能的,但我發現人們說的唯一真實的東西使得對象可序列化,所以我有(我實際上將它從其中序列化出來),但仍然沒有骰子。所以這裏是一個測試用例,當關鍵代碼未註釋時,這導致NullPointerException

我應該提到,在嘗試做這項工作時,我有很多很多錯誤,我一直無法通過。這只是我用這個簡單的例子得到的錯誤。我希望有人能夠幫助我解決這個問題,並且我可以適應它。

因此,在NetBeans工作與GlassFish服務器都完全更新這個帖子,我有一個企業應用程序,其中包括其他兩個項目:一個EJB項目Web項目


有以下共享接口:

ejbModule.interfaces.ABeanInterface

package ejbModule.interfaces; 

import javax.ejb.Remote; 

@Remote 
public interface ABeanInterface { 

    public SrzedObjInterface getObject(); 
    public String getString(); // To show that a simple String object can be passed 

} 

ejbModule.interfaces.SrzedObjInterface

package ejbModule.interfaces; 

import java.io.Serializable; 

public interface SrzedObjInterface extends Serializable { 

    public String getTheString(); 

} 

具有以下類的EJB項目:

ejbModule.ejb.ABean:

package ejbModule.ejb; 

import ejbModule.interfaces.ABeanInterface; 
import ejbModule.obj.SrzedObj; 
import ejbModule.interfaces.SrzedObjInterface; 
import javax.ejb.Stateless; 

@Stateless 
public class ABean implements ABeanInterface { 

    @Override 
    public SrzedObjInterface getObject() { 
     return new SrzedObj(); 
    } 

    @Override 
    public String getString() { 
     return "This is not the String I want"; 
    } 

} 

ejbModule.obj

package ejbModule.obj; 

import ejbModule.interfaces.SrzedObjInterface; 
import java.io.Serializable; 

public class SrzedObj implements SrzedObjInterface, Serializable { 

    protected String TheString = "This is the string I want"; 

    @Override 
    public String getTheString() { 
     return TheString; 
    } 

} 

而且Web項目包括JSF庫和具有以下類和測試網頁,以及一個標準的beans.xml文件(未顯示)和web.xml文件(未顯示):

webModule.webbean

package webModule; 

import ejbModule.interfaces.ABeanInterface; 
import ejbModule.interfaces.SrzedObjInterface; 
import javax.ejb.EJB; 
import javax.enterprise.context.RequestScoped; 
import javax.inject.Named; 

@Named 
@RequestScoped 
public class webbean { 

    @EJB 
    private ABeanInterface ABeanInstance; 

    // The string I want 
    public String getStringViaObject() { 
     // Code that produces the error 
     // ---------------------------- 
     //SrzedObjInterface SrzedObject = ABeanInstance.getObject(); // Throws the NullPointerException 
     //return SrzedObject.getAString(); 
     // ---------------------------- 

     return ""; 
    } 

    // The string that I don't want 
    public String getString() { 
     return ABeanInstance.getString(); 
    } 

    // Also not the string I want, but here to show that this is possible 
    public String getLocalString() { 
     return "The local string"; 
    } 

} 

指數。XHTML

<?xml version='1.0' encoding='UTF-8' ?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:c="http://java.sun.com/jsp/jstl/core"> 

    <h:head> 

    </h:head> 

    <h:body> 

     <h1>The strings</h1> 

     <p>The local string: <h:outputText value="#{webbean.localString}"/></p> 
     <p>The string: <h:outputText value="#{webbean.string}"/></p> 
     <p>The string from the object: <h:outputText value="#{webbean.stringViaObject}"/></p> 

    </h:body> 

</html> 

除此之外Netbeans的包括我的標準文件,這是所有有。

由此產生的堆棧跟蹤(與引入的問題代碼)是:

SEVERE: Error Rendering View[/index.xhtml] 
javax.el.ELException: /index.xhtml @18,90 value="#{webbean.stringViaObject}": java.lang.NullPointerException 
at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:114) 
at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194) 
at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182) 
at javax.faces.component.UIOutput.getValue(UIOutput.java:169) 
at com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getValue(HtmlBasicInputRenderer.java:205) 
at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getCurrentValue(HtmlBasicRenderer.java:355) 
at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeEnd(HtmlBasicRenderer.java:164) 
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875) 
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1764) 
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1760) 
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1760) 
at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:402) 
at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131) 
at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:288) 
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121) 
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139) 
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:594) 
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1550) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) 
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655) 
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161) 
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231) 
at com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317) 
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195) 
at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:860) 
at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:757) 
at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1056) 
at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:229) 
at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137) 
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104) 
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90) 
at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79) 
at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54) 
at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59) 
at com.sun.grizzly.ContextTask.run(ContextTask.java:71) 
at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532) 
at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513) 
at java.lang.Thread.run(Thread.java:722) 

Caused by: java.lang.NullPointerException 
at com.sun.corba.ee.impl.orbutil.ClassInfoCache$ClassInfo.<init>(ClassInfoCache.java:156) 
at com.sun.corba.ee.impl.orbutil.ClassInfoCache.get(ClassInfoCache.java:281) 
at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.read_value(CDRInputStream_1_0.java:1097) 
at com.sun.corba.ee.impl.encoding.CDRInputObject.read_value(CDRInputObject.java:531) 
at com.sun.corba.ee.impl.presentation.rmi.DynamicMethodMarshallerImpl$14.read(DynamicMethodMarshallerImpl.java:384) 
at com.sun.corba.ee.impl.presentation.rmi.DynamicMethodMarshallerImpl.readResult(DynamicMethodMarshallerImpl.java:483) 
at com.sun.corba.ee.impl.presentation.rmi.StubInvocationHandlerImpl.privateInvoke(StubInvocationHandlerImpl.java:203) 
at com.sun.corba.ee.impl.presentation.rmi.StubInvocationHandlerImpl.invoke(StubInvocationHandlerImpl.java:152) 
at com.sun.corba.ee.impl.presentation.rmi.codegen.CodegenStubBase.invoke(CodegenStubBase.java:227) 
at ejbModule.interfaces.__ABeanInterface_Remote_DynamicStub.getObject(ejbModule/interfaces/__ABeanInterface_Remote_DynamicStub.java) 
at ejbModule.interfaces._ABeanInterface_Wrapper.getObject(ejbModule/interfaces/_ABeanInterface_Wrapper.java) 
at webModule.webbean.getStringViaObject(webbean.java:18) 
at webModule.webbean$Proxy$_$$_WeldClientProxy.getStringViaObject(webbean$Proxy$_$$_WeldClientProxy.java) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:601) 
at javax.el.BeanELResolver.getValue(BeanELResolver.java:363) 
at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176) 
at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203) 
at com.sun.el.parser.AstValue.getValue(AstValue.java:138) 
at com.sun.el.parser.AstValue.getValue(AstValue.java:183) 
at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:224) 
at org.jboss.weld.el.WeldValueExpression.getValue(WeldValueExpression.java:50) 
at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109) 
... 41 more 

非常感謝你的人誰是足夠的耐心通過所有的閱讀!我非常感謝任何幫助。

+0

你也可以發佈日誌嗎? –

+0

嗨Pradeep Pati,我已經添加了堆棧跟蹤到我的文章。感謝您的期待! – dakotapearl

回答

1

您是否還需要分享SrzedObj? Web層不能反序列化其具體類不可用的東西... ClassInfoCache.java:156中的NPE似乎與this question中的錯誤相同。

+0

太棒了,謝謝你ewernli!哇,這麼簡單。我一定試過了其他的一切。我認爲只需要一個界面就可以反序列化。 – dakotapearl