小编ATE*_*REF的帖子

如何解决java.io.InvalidClassException:本地类不兼容:stream classdesc serialVersionUID

我有一个可序列化的类,在没有指定serialVersionUID的情况下进行编码,并将数据库MySQL保存为blob!

我必须在这个类中添加一些字段,但在这之后,我得到一个这样的异常:

IOException: error when reading object
org.datanucleus.exceptions.NucleusUserException:
IOException: error when reading object at
org.datanucleus.store.rdbms.datatype.BlobImpl.getObject(BlobImpl.java:134)

.
. 
..

Caused by: java.io.InvalidClassException:
local class incompatible: stream classdesc serialVersionUID = 1113799434508676095,
local class serialVersionUID = -8504143738844344601 at
java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:560)
Run Code Online (Sandbox Code Playgroud)

这是所有的stackTrace:

IOException: error when reading object
org.datanucleus.exceptions.NucleusUserException: IOException: error when reading object
at org.datanucleus.store.rdbms.datatype.BlobImpl.getObject(BlobImpl.java:134)
at      org.datanucleus.store.rdbms.mapping.AbstractLargeBinaryRDBMSMapping.getObject(AbstractLargeB    inaryRDBMSMapping.java:271)
at     org.datanucleus.store.mapped.mapping.SingleFieldMapping.getObject(SingleFieldMapping.java:21    9)
at org.datanucleus.store.rdbms.fieldmanager.ResultSetGetter.fetchObjectField(ResultSetGetter.java:153)
at org.datanucleus.state.AbstractStateManager.replacingObjectField(AbstractStateManager.java:1197)
at com.xxxxxxxx.xxxxxxxx.ra.impl.RAOrganizationRecordImpl.jdoReplaceField(RAOrganizationRecordImpl.java)
at com.xxxxxxxx.xxxxxxxx.ra.impl.BaseRARecordImpl.jdoReplaceFields(BaseRARecordImpl.java)
at org.datanucleus.state.JDOStateManagerImpl.replaceFields(JDOStateManagerImpl.java:2772)
at org.datanucleus.store.rdbms.query.PersistentIDROF$1.fetchFields(PersistentIDROF.java:441)
at org.datanucleus.state.JDOStateManagerImpl.loadFieldValues(JDOStateManagerImpl.java:841)
at org.datanucleus.state.JDOStateManagerImpl.initialiseForHollowAppId(JDOStateManagerImpl.java:284)
at org.datanucleus.state.StateManagerFactory.newStateManagerForHollowPopulatedAppId(StateManagerFactory.java:116)
at org.datanucleus.ObjectManagerImpl.findObjectUsingAID(ObjectManagerImpl.java:2117)
at org.datanucleus.store.rdbms.query.PersistentIDROF.getObjectForApplicationId(PersistentIDROF.java:435)
at org.datanucleus.store.rdbms.query.PersistentIDROF.getObject(PersistentIDROF.java:301) …
Run Code Online (Sandbox Code Playgroud)

java serialization

9
推荐指数
1
解决办法
4万
查看次数

如何模拟已注入依赖项的超类

我有一个使用 Spring MVC 的项目。我正在尝试为项目架构中的服务模块编写单元测试。所有服务类都从名为“BaseService”的超类扩展。基础服务是这样的:

public abstract class BaseService {

private static final Logger  logger = LoggerFactory.getLogger(BaseService.class);

@Autowired(required = true)
private HttpServletRequest   request;

@Autowired
private ReloadableResourceBundleMessageSource messageSource;

/*
 * Injecting Mapper
 */
@Resource
private Mapper mapper;
...

public <T extends BaseBVO, S extends BaseVO> T voToBvo (S vo, Class<?     extends BaseBVO> bvoClass) {

    if (vo != null)
    {
        return (T) mapper.map(vo , bvoClass);
    }
    else
    {
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我在服务模块中有一个使用该方法的方法:

"voToBvo (S vo, Class<?     extends BaseBVO> bvoClass")
Run Code Online (Sandbox Code Playgroud)

像这样:

public List<AdcOptionBVO> …
Run Code Online (Sandbox Code Playgroud)

java spring-mvc junit4 mockito

5
推荐指数
1
解决办法
1万
查看次数

使用java runtime exec运行连续的Commands Linux

我需要使用java代码运行两个命令linux,如下所示:

 Runtime rt = Runtime.getRuntime();


            Process  pr=rt.exec("su - test");
            String line=null;
            BufferedReader input = new BufferedReader(new InputStreamReader(pr.getInputStream()));

            while((line=input.readLine()) != null) {

                System.out.println(line);
            }
           pr = rt.exec("whoami");
             input = new BufferedReader(new InputStreamReader(pr.getInputStream()));

             line=null;

            while((line=input.readLine()) != null) {
                 System.out.println(line);
            }               
            int exitVal = pr.waitFor();
            System.out.println("Exited with error code "+exitVal);              
        } catch(Exception e) {
            System.out.println(e.toString());
            e.printStackTrace();
        }
Run Code Online (Sandbox Code Playgroud)

问题是第二个命令("whoami")的输出不显示第一个命令("su - test")上使用的当前用户!! 请问这个代码有什么问题吗?

java linux runtime

3
推荐指数
1
解决办法
1万
查看次数

标签 统计

java ×3

junit4 ×1

linux ×1

mockito ×1

runtime ×1

serialization ×1

spring-mvc ×1