[jboss-user] [JBoss Seam] - Re: @Log and NullPointerException

tazo do-not-reply at jboss.com
Tue Nov 14 15:34:13 EST 2006


Now it complains about missing no-args constructor in LogImpl:


  | java.io.InvalidClassException: org.jboss.seam.log.LogImpl; no valid constructor
  | 	at java.io.ObjectStreamClass.<init>(ObjectStreamClass.java:455)
  | 	at java.io.ObjectStreamClass.lookup(ObjectStreamClass.java:297)
  | 	at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:531)
  | 	at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1552)
  | 	at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1466)
  | 	at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1699)
  | 	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1305)
  | 	at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1908)
  | 	at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1832)
  | 	at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1719)
  | 	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1305)
  | 	at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1908)
  | 	at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1832)
  | 	at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1719)
  | 	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1305)
  | 	at java.io.ObjectInputStream.readObject(ObjectInputStream.java:348)
  | 	at java.util.HashMap.readObject(HashMap.java:1067)
  | 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  | 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
  | 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
  | 	at java.lang.reflect.Method.invoke(Method.java:585)
  | 	at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:946)
  | 	at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1809)
  | 	at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1719)
  | 	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1305)
  | 	at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1634)
  | 	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1299)
  | 	at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1634)
  | 	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1299)
  | 	at java.io.ObjectInputStream.readObject(ObjectInputStream.java:348)
  | 	at com.sun.faces.application.StateManagerImpl$TreeNode.readExternal(StateManagerImpl.java:671)
  | 	at java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:1755)
  | 	at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1717)
  | 	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1305)
  | 	at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1634)
  | 	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1299)
  | 	at java.io.ObjectInputStream.readObject(ObjectInputStream.java:348)
  | 	at com.sun.faces.renderkit.ResponseStateManagerImpl.getTreeStructureToRestore(ResponseStateManagerImpl.java:149)
  | 	at javax.faces.render.ResponseStateManager.getState(ResponseStateManager.java:215)
  | 	at com.sun.faces.application.StateManagerImpl.restoreTree(StateManagerImpl.java:552)
  | 	at com.sun.faces.application.StateManagerImpl.restoreView(StateManagerImpl.java:90)
  | 	at org.jboss.seam.jsf.SeamStateManager.restoreView(SeamStateManager.java:97)
  | 	at com.sun.faces.application.ViewHandlerImpl.restoreView(ViewHandlerImpl.java:288)
  | 	at org.jboss.seam.jsf.SeamViewHandler.restoreView(SeamViewHandler.java:127)
  | 	at com.sun.facelets.FaceletViewHandler.restoreView(FaceletViewHandler.java:317)
  | 	at com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:142)
  | 	at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:248)
  | 	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)
  | 	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)
  | 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
  | 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
  | 	at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:144)
  | 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
  | 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
  | 	at org.jboss.seam.servlet.SeamRedirectFilter.doFilter(SeamRedirectFilter.java:63)
  | 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
  | 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
  | 	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
  | 	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
  | 	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
  | 	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
  | 	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
  | 	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
  | 	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
  | 	at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
  | 	at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
  | 	at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
  | 	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
  | 	at java.lang.Thread.run(Thread.java:595)
  | 

Currently java serialization api totally ignores readObject methods of serialazable seam component itself and any of it fields type. Simple test case:


  | package demo;
  | 
  | import java.io.IOException;
  | import java.io.ObjectInputStream;
  | import java.io.Serializable;
  | 
  | import org.jboss.seam.ScopeType;
  | import org.jboss.seam.annotations.Logger;
  | import org.jboss.seam.annotations.Name;
  | import org.jboss.seam.annotations.Scope;
  | import org.jboss.seam.log.Log;
  | 
  | @SuppressWarnings("serial")
  | @Name("transientTest")
  | @Scope(ScopeType.PAGE)
  | public class TransientTest implements Serializable {
  | 
  | 	@Logger
  | 	private Log log;
  | 
  | 	private transient String message = "initial";
  | 
  | 	public void testSeamLog() {
  | 		log.error(message);
  | 	}
  | 
  | 	public void testTransientField() {
  | 		message.equals("restored");
  | 	}
  | 
  | 	void readObject(ObjectInputStream ois) throws ClassNotFoundException,
  | 			IOException {
  | 		ois.defaultReadObject();
  | 
  | 		message = "restored";
  | 	}
  | 	
  | 	public String getMessage() {
  | 		return message;
  | 	}
  | }
  | 
  | 

And test page:


  | <?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:ui="http://java.sun.com/jsf/facelets"
  |       xmlns:h="http://java.sun.com/jsf/html"
  |       xmlns:f="http://java.sun.com/jsf/core">
  | 
  | <body>
  | 	<h:form>
  | 		<h:outputText value="#{transientTest.message}" /><br />
  | 		<h:commandButton action="#{transientTest.testSeamLog}" value="Test Seam Log" />
  | 		<h:commandButton action="#{transientTest.testTransientField}" value="Test Transient Field" />
  | 	</h:form>
  | </body>
  | </html>
  | 
  | 

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3985935#3985935

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3985935



More information about the jboss-user mailing list