2011-05-06 117 views
8

Iam嘗試將字符串消息發送到在weblogic服務器中創建的JMS隊列中。 IAM使用Eclipse IDE和運行我的Web應用程序,我得到下面的錯誤和Tomcat服務器獲取shutdown.The錯誤無法將消息發送到weblogic隊列

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 

請幫我out.Thanks以及基於一些問候

+0

請問是否需要進一步的信息.. – TechnocraT 2011-05-06 11:55:19

回答

14

快速研究這個問題,它似乎是由應用服務器和客戶端之間使用不同的JDK級別引起的。我已經看到的大多數示例都顯示了在Java 5上運行Weblogic時在客戶端上使用Java 6時發生的情況。

雖然我沒有親自嘗試過,但建議將以下內容添加到客戶端應用程序的啓動命令:

-Dsun.lang.ClassLoader.allowArraySyntax=true 

設置此屬性可在ClassLoader的loadClass方法中啓用向後兼容模式。

這是一個link to an Oracle forum question,它提供了一些額外的信息。

或者,如果您正在執行直接集成,則必須查看確保客戶端和服務器運行相同的JVM級別。顯然,這通常不是最佳解決方案。

+0

我使用eclipse ide ..我需要在哪裏添加啓動註釋? – TechnocraT 2011-05-09 05:01:50

+1

如果您正在Eclipse中運行您的客戶端,那麼您需要將此命令添加到客戶端的運行配置中:右鍵單擊項目,然後轉到「Run As-> Run Configurations」。選擇你的客戶端的運行配置應該在'Java Application'下。選擇'arguments'選項卡並在'VM Arguments'文本框中輸入testin。這將允許客戶端使用'sun.lang.ClassLoader.allowArraySyntax'系統屬性設置爲'true'來運行。如果您從命令行運行應用程序,請在執行應用程序之前添加-D ...文本,例如,java -D ... Main。 – 2011-05-09 17:50:25

+0

最後解決了它,問題出在默認情況下使用jdk 1.6,我改爲1.5,它的工作。謝謝你的幫助。 – TechnocraT 2011-05-20 11:40:11