小编eip*_*ark的帖子

在XStream中为不在XML中的字段设置默认值

有没有办法创建转换器或在每次转换后执行的某些操作?对于上下文,我试图填充不在我的XML中的字段的默认值,以便在我的数据模型更改时保持向后兼容性.例如,如果我有这个对象:

class A {
    private String b;
    private String c;
    private String d;
}
Run Code Online (Sandbox Code Playgroud)

我的XML是这样的:

<a>
 <b>b</b>
 <d>d</d>
</a>
Run Code Online (Sandbox Code Playgroud)

我希望我的XML的进口知道有该字段的默认值c"c",放在A这样.这应该是一个通用操作,我可以将默认值添加到非常复杂的图形的任何字段.如果在每次转换后都有某种方法可以触发函数,它可以根据我想要设置默认值的对象图检查当前对象.

另请注意,使用readResolve/readObject似乎不是一个选项,因为1. readObject()似乎根本不适合我.2.readResolve将使用默认值覆盖该字段,即使它实际包含在XML中.如果我的假设在这里是错误的,请告诉我.

编辑::我在用户邮件列表中找到了这个相关的主题:http: //article.gmane.org/gmane.comp.java.xstream.user/4619/match=default+value

似乎唯一建议的解决方案是使用readResolve()我已经说过的不是有效的解决方案.

java import xstream

9
推荐指数
2
解决办法
3947
查看次数

在Hibernate中使用瞬态实体来更新/合并现有的持久对象

我在数据库中处理一个相当复杂的对象图.我正在使用XStream来序列化和反序列化这个对象图,它工作正常.当我导入数据库中存在的对象的对象图时,它最初是瞬态的,因为没有ID,而hibernate对此一无所知.然后我有业务逻辑,通过确定新瞬态导入对象中的哪些对象映射到现有持久对象,在我的对象图的部分上设置ID.然后我使用Hibernate的merge()和saveOrUpdate().

一些伪代码可以让你更好地了解我在做什么:

ComplexObject transObj = xstream.import("object.xml");
ComplexObject persistObj = someService.getObjByName(transObj.getName());
for (OtherObject o : c.getObjects()) {
    if (persistObj.getObjects().contains(o.getName())) {
        o.setId(persistObj.getObjectByName(o.getName()).getId())
    }
    ... set a bunch of other IDs deeper in the object graph ...
}

transObj = session.merge(transObj);
session.saveOrUpdate(transObj);
Run Code Online (Sandbox Code Playgroud)

现在这不起作用,因为我得到如下错误:

   org.springframework.dao.InvalidDataAccessApiUsageException: deleted object would be re-saved by cascade (remove deleted object from associations): [com.......SomeObject#353296]; nested exception is org.hibernate.ObjectDeletedException: deleted object would be re-saved by cascade (remove deleted object from associations): [com.......SomeObject#353296]
Run Code Online (Sandbox Code Playgroud)

似乎hibernate merge并不意味着将瞬态对象与持久对象相关联.

有没有办法实现我想做的事情,而不必在会话中获取持久对象,并修改它,而不是修改瞬态对象,并尝试保存并覆盖现有的持久对象?

java merge hibernate xstream transient

8
推荐指数
1
解决办法
9129
查看次数

将HTML5 Canvas序列转换为视频文件

我想将HTML5画布中的动画转换为可以上传到YouTube的视频文件.是否有任何类型的屏幕捕获API或某些东西可以允许我以编程方式执行此操作?

html5 canvas youtube-api screen-capture

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

Maven 在 Test-Jar 中找不到包

我试图在测试期间在另一个 Maven 模块中使用 test-jar 依赖项。因此,就像在这个问题(多模块项目中的 Maven 测试依赖项)和 Maven 指南中一样,我在模块 A 中放置了一个 test-jar 目标,并在模块 B 中放置了对其的依赖项,我想在其中使用 A 中的一些类在我的测试中。Eclipse 可以正确识别我的所有类,当我从项目根目录运行全新安装,然后mvn dependency:tree在模块 B 中运行时,我会看到模块 A。

然而,当我运行 时mvn clean install,maven 抱怨说

... package 'my.package.in.module.A' does not exist
Run Code Online (Sandbox Code Playgroud)

我的项目的结构是

reactor
--module A
--module B
Run Code Online (Sandbox Code Playgroud)

波姆A:

  ...
  <plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-jar-plugin</artifactId>
   <version>2.2</version>
   <executions>
     <execution>
       <goals>
         <goal>test-jar</goal>
       </goals>
     </execution>
   </executions>
  </plugin>
</plugins>
...
Run Code Online (Sandbox Code Playgroud)

波姆B:

 ...
<dependency>
  <groupId>com.company.moduleA</groupId>
  <artifactId>module-A</artifactId>
  <version>moduleA-version</version>
  <type>test-jar</type>
  <scope>test</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)

为了隐私,我省略了版本/工件/等,但它们匹配正确。

我错过了什么吗?

编辑:这可能不是这个问题的正确解决方案,但我只是删除了它<type>test-jar</type>并在不使用它的情况下让它工作。

java eclipse testing maven

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