2013-05-21 2 views
0

검색 일에 유용한 것을 찾지 못했습니다. 어쩌면 나는 지금 옳은 장소를 찾고 있지 않을 것이다.EJB RMI를 통해 객체 전달 - NullPointerException

정말 간단합니다. J2EE의 내장형 RMI에 의해 한 EJB에서 다른 EJB로 객체를 전달하고 싶습니다.

가능한 한 말할 수있는 한, 사람들이 말한 것으로 밝혀진 유일한 사실은 객체를 직렬화 가능하게 만들었 기 때문에 (사실 나는 그것을 연쇄 적으로 처리했다.)하지만 여전히 주사위가 없다. . 그래서 여기에 테스트 케이스가 있는데, 이는 중요한 코드의 주석 처리가 해제되었을 때 NullPointerException이됩니다.

필자는이 작업을하기 위해 과거에 얻을 수 없었던 많은 오류가 있음을 언급해야합니다. 이것은이 간단한 예제로 얻은 오류 일뿐입니다. 나는 누군가가이 특별한 것을 가지고 나를 도울 수 있기를 바라고 있으며 나는 그것을 적응시킬 수있다. EJB 프로젝트웹 프로젝트 :

그래서, 모두가 완전히이 게시물의로 갱신됩니다 글래스 피시 서버와 넷빈즈에서 일하고, 나는 엔터프라이즈 응용 프로그램이 개 다른 프로젝트를 포함 있습니다.


는 다음 인터페이스가 공유됩니다

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; 
    } 

} 

그리고 웹 프로젝트는 JSF 라이브러리를 포함하고 다음 클래스 및 테스트 웹 페이지뿐만 아니라 (도시하지 않음) 표준 beans.xml 환경 파일과 web.xml 파일 (도시하지 않음)이 있습니다

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"; 
    } 

} 

인덱스을 webModule.webbean.


<?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> 
XHTML
는 별개로 넷빈즈 나를 위해 포함하는 표준 파일에서, 그가 전부입니다.

(도입 문제 코드)이에 의해 생성 된 스택 추적은 다음과 같습니다

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도 공유 할 필요가 없습니까? 웹 계층은 구체적인 클래스가 availalbe가 아닌 것을 deserialize 할 수 없습니다 ... ClassInfoCache.java:156의 NPE는 this question에서와 같은 오류로 보입니다.

+0

환상적입니다, 감사합니다 ewernli! 와우 너무 간단합니다. 나는 다른 모든 것을 시도했을 것입니다. 필자는 비 직렬화에 필요한 인터페이스가 전부라고 생각했습니다. – dakotapearl

관련 문제