无法将消息发送到 weblogic 队列

Posted

技术标签:

【中文标题】无法将消息发送到 weblogic 队列【英文标题】:cannot send message to weblogic queues 【发布时间】:2011-08-20 03:24:06 【问题描述】:

我正在尝试将字符串消息发送到在 weblogic 服务器中创建的 JMS 队列中。我正在使用 Eclipse ide,当我运行我的 Web 应用程序时,出现以下错误,并且 tomcat 服务器被关闭。错误是

javax.naming.CommunicationException [Root exception is java.rmi.UnmarshalException: failed to unmarshal class weblogic.security.acl.internal.AuthenticatedUser; nested exception is: 
    java.io.StreamCorruptedException: invalid type code: 31]
    at weblogic.jndi.internal.ExceptionTranslator.toNamingException(ExceptionTranslator.java:74)
    at weblogic.jndi.internal.ExceptionTranslator.toNamingException(ExceptionTranslator.java:32)
    at weblogic.jndi.WLInitialContextFactoryDelegate.toNamingException(WLInitialContextFactoryDelegate.java:773)
    at weblogic.jndi.WLInitialContextFactoryDelegate.pushSubject(WLInitialContextFactoryDelegate.java:673)
    at weblogic.jndi.WLInitialContextFactoryDelegate.newContext(WLInitialContextFactoryDelegate.java:466)
    at weblogic.jndi.WLInitialContextFactoryDelegate.getInitialContext(WLInitialContextFactoryDelegate.java:373)
    at weblogic.jndi.Environment.getContext(Environment.java:307)
    at weblogic.jndi.Environment.getContext(Environment.java:277)
    at weblogic.jndi.WLInitialContextFactory.getInitialContext(WLInitialContextFactory.java:117)
    at javax.naming.spi.NamingManager.getInitialContext(Unknown Source)
    at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source)
    at javax.naming.InitialContext.init(Unknown Source)
    at javax.naming.InitialContext.<init>(Unknown Source)
    at com.infotech.jms.JMSBEAQueueSend.sendMessage(JMSBEAQueueSend.java:48)
    at com.infotech.struts.actions.AppAction.execute(AppAction.java:75)
    at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
    at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
    at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
    at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.rmi.UnmarshalException: failed to unmarshal class weblogic.security.acl.internal.AuthenticatedUser; nested exception is: 
    java.io.StreamCorruptedException: invalid type code: 31
    at weblogic.rjvm.ResponseImpl.unmarshalReturn(ResponseImpl.java:229)
    at weblogic.rmi.internal.BasicRemoteRef.invoke(BasicRemoteRef.java:224)
    at weblogic.common.internal.RMIBootServiceImpl_1001_WLStub.authenticate(Unknown Source)
    at weblogic.security.acl.internal.Security$1.run(Security.java:185)
    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:363)
    at weblogic.security.service.SecurityManager.runAs(Unknown Source)
    at weblogic.security.acl.internal.Security.authenticate(Security.java:181)
    at weblogic.jndi.WLInitialContextFactoryDelegate.authenticateRemotely(WLInitialContextFactoryDelegate.java:734)
    at weblogic.jndi.WLInitialContextFactoryDelegate.pushSubject(WLInitialContextFactoryDelegate.java:667)
    ... 29 more
Caused by: java.io.StreamCorruptedException: invalid type code: 31
    at java.io.ObjectInputStream.readObject0(Unknown Source)
    at java.io.ObjectInputStream.readObject(Unknown Source)
    at weblogic.utils.io.ChunkedObjectInputStream.readObject(ChunkedObjectInputStream.java:195)
    at weblogic.rjvm.MsgAbbrevInputStream.readObject(MsgAbbrevInputStream.java:565)
    at weblogic.utils.io.ChunkedObjectInputStream.readObject(ChunkedObjectInputStream.java:191)
    at weblogic.rmi.internal.ObjectIO.readObject(ObjectIO.java:62)
    at weblogic.rjvm.ResponseImpl.unmarshalReturn(ResponseImpl.java:227)
    ... 37 more

请帮帮我。谢谢和最好的问候

【问题讨论】:

请询问是否需要任何进一步的信息.. 【参考方案1】:

根据对该问题的一些快速研究,这似乎是由于在应用服务器和客户端之间使用了不同的 JDK 级别造成的。我见过的大多数示例都表明,当在 Java 5 上运行 Weblogic 时在客户端上使用 Java 6 时会发生这种情况。

虽然我没有亲自尝试过,但建议将以下内容添加到客户端应用程序的启动命令中:

-Dsun.lang.ClassLoader.allowArraySyntax=true

设置此属性会在 ClassLoader 的 loadClass 方法中启用向后兼容模式。

这是一个link to an Oracle forum question,它提供了一些额外的信息。

或者,如果您正在执行直接集成,则必须确保客户端和服务器运行相同的 JVM 级别。显然,这通常不是最优解。

【讨论】:

我正在使用 eclipse ide.. 我需要在哪里添加启动注释? 如果您在 Eclipse 中运行客户端,则需要将此命令添加到客户端的运行配置中:右键单击项目并转到 Run As-&gt;Run Configurations。为您的客户端选择运行配置应在Java Application 下。选择arguments 选项卡并在VM Arguments 文本框中输入testin。这将允许客户端在sun.lang.ClassLoader.allowArraySyntax 系统属性设置为true 的情况下运行。如果您从命令行运行应用程序,则在应用程序执行之前添加 -D... 文本,例如 java -D... Main。 终于解决了,问题是eclipse默认使用jdk 1.6,我改成1.5就可以了。谢谢帮助。 我遇到了同样的问题。感谢您的提示。

以上是关于无法将消息发送到 weblogic 队列的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 nodejs 将消息发送到 RabbitMQ 队列

GCP - 如何添加关于发送到 pubsub 死信队列的消息数量的警报?

Azure SB 队列将消息发送到禁用的死信队列

使用一个策略之一将记录发送到消息队列

将消息发送到我机器上的消息队列.....错误“无效的队列路径名”[关闭]

发送到JMS队列的消息将仅由单个消费者使用?