2017-01-04 6 views
0

私はDefaultListableBeanFactoryでシリアル化のエラーを持っている:私が見つけたDefaultListableBeanFactoryのシリアル化IDを定義する方法は?

Caused by: java.io.NotSerializableException: DefaultListableBeanFactory has no serialization id 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.writeReplace(DefaultListableBeanFactory.java:1523) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at java.io.ObjectStreamClass.invokeWriteReplace(ObjectStreamClass.java:1118) 
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1136) 
    at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548) 
    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509) 
    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432) 
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178) 
    at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548) 
    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509) 
    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432) 
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178) 
    at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548) 
    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509) 
    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432) 
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178) 
    at java.io.ObjectOutputStream.writeArray(ObjectOutputStream.java:1378) 
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174) 
    at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548) 
    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509) 
    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432) 
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178) 
    at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548) 
    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509) 
    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432) 
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178) 
    at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548) 
    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509) 
    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432) 
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178) 
    at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548) 
    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509) 
    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432) 
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178) 
    at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548) 
    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509) 
    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432) 
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178) 
    at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548) 
    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509) 
    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432) 
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178) 
    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348) 
    at org.apache.catalina.session.StandardSession.writeObject(StandardSession.java:1673) 
    at org.apache.catalina.session.StandardSession.writeObjectData(StandardSession.java:1079) 
    at org.apache.catalina.session.StandardManager.doUnload(StandardManager.java:432) 
    at org.apache.catalina.session.StandardManager.unload(StandardManager.java:353) 
    at org.apache.catalina.session.StandardManager.stopInternal(StandardManager.java:518) 
    at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:232) 
    at org.apache.catalina.core.StandardContext.stopInternal(StandardContext.java:5622) 
    at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:232) 
    at org.apache.catalina.core.ContainerBase$StopChild.call(ContainerBase.java:1575) 
    at org.apache.catalina.core.ContainerBase$StopChild.call(ContainerBase.java:1564) 
    ... 4 more 

コードを検査した後、クラスコードはどこかに設定するために、いくつかのarbirtraryのシリアライゼーションIDが必要であること:

protected Object writeReplace() throws ObjectStreamException { 
    if (this.serializationId != null) { 
     return new SerializedBeanFactoryReference(this.serializationId); 
    } 
    else { 
     throw new NotSerializableException("DefaultListableBeanFactory has no serialization id"); 
    } 
} 

私はそのserializationIdを設定していませんが、私はそれをどのように設定することができないのか分かりません。私は何かが私の春のXMLに欠けている、とします

<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xsi:schemaLocation=" 
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd 
    "> 

    <context:component-scan base-package="com.example.beans"/> 

</beans>  

シングルトン豆がAOPを使用して、シリアライズ作られていたプロキシスコープ:

@Component 
@Scope(proxyMode = ScopedProxyMode.INTERFACES) 
public class DatabaseAPIImpl implements DatabaseAPI { 

をしかし、明らかに、何かがそのプロキシと間違っていると、いくつかの重要な情報があります設定されていません。私はここで何が欠けているのですか? DefaultListableBeanFactoryが適切に初期化されるように設定する必要はありますか?

答えて

0

私は同様の問題を持っていたし、それはこれをやって解く:

@Component 
    public class SessionFixBeanFactoryPostProcessor implements BeanFactoryPostProcessor { 
     private static final String SERIALIZATION_ID = "4086d293-966c-4d89-8485-f1c1f5c09218"; 

     @Override 
     public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { 
      if ((beanFactory instanceof DefaultListableBeanFactory)) { 
       DefaultListableBeanFactory dlbf = (DefaultListableBeanFactory) beanFactory; 
       dlbf.setSerializationId(SERIALIZATION_ID); 
      } 
     } 
    } 

あなたはこの質問読むことをお勧めします:https://github.com/spring-projects/spring-session/issues/799

関連する問題