【问题标题】:Why do i get an EJB java.rmi.MarshalException: CORBA MARSHAL exception?为什么我会收到 EJB java.rmi.MarshalException: CORBA MARSHAL 异常?
【发布时间】:2016-08-04 22:22:47
【问题描述】:

我正在尝试使用 JSP 页面添加项目,该页面也有几个图像。我声明了将图像检索为字符串的变量,因此我可以获取 URL 并将 url 存储在数据库中。

我将 EJB 和 JPA 用于数据库目的。

我的 servlet 代码

ItemDetails id;
ItemBeanRemote ib;
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {

   String id = request.getParameter("id");
   String name = request.getParameter("name");
   double price = Double.valueOf(request.getParameter("price"));
   String imgurl = request.getParameter("imgurl");
   String imgurl2 = request.getParameter("imgurl2");
   String location = request.getParameter("loc");

   id = new ItemDetails(id, name, price, imgurl, imgurl2, location);

    ib.addItem(id);
        response.sendRedirect("View.jsp");

}

@Override
public void init() {
    try {
        Context initial = new InitialContext();
        ib = (ItemBeanRemote) initial.lookup("itembean");
    } catch (Exception ex) {
        System.err.println("Caught an exception:");
        ex.printStackTrace();
    }

//具有addItem方法代码的ejb类

@Override
public void addEvent(ItemDetails details) {
    try {
        tblItem utt = new tblItem(details.getItemID(),details.getItemName(),
                details.getPrice(),details.getImgUrl(),details.getImgUrl2(),details.getLocation());
        em.persist(utt);
    } catch (Exception ex) {
        throw new EJBException(ex);
    }

//item details is a class is a POJO with getter and setter

//tblItem 是使用实体管理器创建的 java 类,该实体管理器具有从 JPA 自动生成的代码。

还有例外

javax.ejb.EJBException:java.rmi.MarshalException:CORBA MARSHAL 1330446343 否;嵌套异常是: org.omg.CORBA.MARSHAL: ----------BEGIN 服务器端堆栈跟踪---------- org.omg.CORBA.MARSHAL:FINE:00810007:消息 vmcid 中的最后一个片段后 BufferManagerReadStream 中的下溢:OMG 次要代码:7 已完成:否 在 com.sun.proxy.$Proxy154.endOfStream(未知来源) 在 com.sun.corba.ee.impl.encoding.BufferManagerReadStream.underflow(BufferManagerReadStream.java:122) 在 com.sun.corba.ee.impl.encoding.CDRInputStream_1_1.grow(CDRInputStream_1_1.java:111) 在 com.sun.corba.ee.impl.encoding.CDRInputStream_1_2.alignAndCheck(CDRInputStream_1_2.java:126) 在 com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.read_long(CDRInputStream_1_0.java:433) 在 com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.readValueTag(CDRInputStream_1_0.java:1672) 在 com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.read_value(CDRInputStream_1_0.java:918) 在 com.sun.corba.ee.impl.encoding.CDRInputObject.read_value(CDRInputObject.java:518) 在 com.sun.corba.ee.impl.presentation.rmi.DynamicMethodMarshallerImpl $14.read(DynamicMethodMarshallerImpl.java:383) 在 com.sun.corba.ee.impl.presentation.rmi.DynamicMethodMarshallerImpl.readArguments(DynamicMethodMarshallerImpl.java:450) 在 com.sun.corba.ee.impl.presentation.rmi.ReflectiveTie._invoke(ReflectiveTie.java:171) 在 com.sun.corba.ee.impl.protocol.ServerRequestDispatcherImpl.dispatchToServant(ServerRequestDispatcherImpl.java:528) 在 com.sun.corba.ee.impl.protocol.ServerRequestDispatcherImpl.dispatch(ServerRequestDispatcherImpl.java:199) 在 com.sun.corba.ee.impl.protocol.MessageMediatorImpl.handleRequestRequest(MessageMediatorImpl.java:1549) 在 com.sun.corba.ee.impl.protocol.SharedCDRClientRequestDispatcherImpl.marshalingComplete(SharedCDRClientRequestDispatcherImpl.java:119) 在 com.sun.corba.ee.impl.protocol.ClientDelegateImpl.invoke(ClientDelegateImpl.java:258) 在 com.sun.corba.ee.impl.presentation.rmi.StubInvocationHandlerImpl.privateInvoke(StubInvocationHandlerImpl.java:198) 在 com.sun.corba.ee.impl.presentation.rmi.StubInvocationHandlerImpl.invoke(StubInvocationHandlerImpl.java:150) 在 com.sun.corba.ee.impl.presentation.rmi.codegen.CodegenStubBase.invoke(CodegenStubBase.java:226) 在 com.olympics2016.beans.__EventBeanRemote_Remote_DynamicStub.addEvent(com/olympics2016/beans/__EventBeanRemote_Remote_DynamicStub.java) 在 com.olympics2016.beans._EventBeanRemote_Wrapper.addEvent(com/olympics2016/beans/_EventBeanRemote_Wrapper.java) 在 com.olympics2016.servlets.AddEventServlet.doPost(AddEventServlet.java:42) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:707) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:790) 在 org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:318) 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160) 在 org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734) 在 org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673) 在 com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174) 在 org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:415) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:282) 在 com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:459) 在 com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167) 在 org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:201) 在 org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:175) 在 org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235) 在 org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119) 在 org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:284) 在 org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:201) 在 org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:133) 在 org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112) 在 org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77) 在 org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:561) 在 org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112) 在 org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117) 在 org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56) 在 org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137) 在 org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:565) 在 org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:545) 在 java.lang.Thread.run(Thread.java:745)

---------END 服务器端堆栈跟踪---------- vmcid:OMG 次要代码:7 已完成:否

【问题讨论】:

  • 您提供的堆栈跟踪似乎描述了在 Web 端而非 EJB 端引发的异常,但它确实发生在 EJB 的 Web 端 addEvent() 存根执行期间。也许其他人会认出细节,但我倾向于认为我们没有足够的信息来回答。考虑将有问题的组件减少到足以将它们呈现为minimal reproducible example
  • 好的,非常感谢@JohnBollinger
  • 这看起来ItemBeanRemoteItemDetails 中的一个或两个与 EJB 服务器端的版本不匹配。
  • 我实际上只是修复了它,我清理并重建了包括 bean 应用程序在内的整个程序并部署了它以使其正常工作。感谢大家的帮助!

标签: java jsp jpa jakarta-ee


【解决方案1】:

Marshal Exception 可能由于以下原因之一而发生: 1) 当远程方法调用完成并且没有对 Java 对象进行封送处理,因此参数或返回值将无法到达远程方法或服务器。

2) 如果我们在 RMI 中使用的协议在发送方和接收方的版本不同。

【讨论】:

    猜你喜欢
    • 2013-11-08
    • 2013-02-10
    • 2014-07-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-08
    • 2010-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多