标签: xstream

Xstream 和枚举解组:没有枚举常量

这是我要解析的 XML 的摘录:

<node version="1.0.7" errorCode="0" message="">
Run Code Online (Sandbox Code Playgroud)

errorCode 实际上是一组固定的常量,所以我认为将它表示为 enum 是个好主意:

public enum ErrorCode {
 OK (0,"ok"),
 ERR (1,"Error"),
 BIGERR (2,"Big Error");

 private int code;

 private String name;

 ErrorCode(int code, String name) {...}
}
Run Code Online (Sandbox Code Playgroud)

我不知道如何使用枚举中定义的各种常量映射 xml 文件中的“0”......我不断收到没有枚举常量的转换异常:

com.thoughtworks.xstream.converters.ConversionException: No enum constant my.package.ErrorCode.0
Run Code Online (Sandbox Code Playgroud)

我不知道如何为这些值指定别名......(或者如果我必须实现我自己的转换器。)。

谢谢..

java xml enums xstream

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

XStream 使用 getter 进行序列化

我的 Web 服务使用 Spring MVC 以 xml 和 json 格式返回数据。对于 json,spring 使用 Jackson 和 XStream for XML。但是,XStream 使用字段进行序列化,而 Jackson 使用方法(setter/getter)。

我想在 xml 序列化中包含所有/一些 getter。如何通过自定义转换器或注释来实现这一点?

java xml spring xstream

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

Spring Batch,JdbcExecutionContextDao java.util.Map $ Entry反序列化器问题,xstream 1.4.1

我在使用Spring Batch 2.1.9时遇到问题:当我使用jobExplorer.getJobExecution(jobExecutionId)时,当DAO必须反序列化一个字符串时,我发现了一个问题:

{"map":[{"entry":{"string":"parsedComparingDate","date":"2014-03-08 23:00:00.0 UTC"}}]}
Run Code Online (Sandbox Code Playgroud)

使用方法从BATCH_JOB_EXECUTION_CONTEXT表中获取JdbcJobExecutionDao.getJobExecution()

我知道spring批处理使用xstream 1.3,但是在我的Pom中,我有:

  • 春季批次2.1.9 ;
  • xstream 1.4.1(从smook继承);
  • 抛弃1.3.3(继承自cxf);

此外,我读到xstream 1.3不能与jettison 1.3.3一起正常工作,但是使用xstream 1.3(不包括pom的xstream 1.4.1)可以正常工作,而使用xstream 1.4.1或主要版本时,我发现以下异常:

Caused by: java.lang.InstantiationError: java.util.Map$Entry
        at sun.reflect.GeneratedSerializationConstructorAccessor1.newInstance(Unknown Source) [:1.6.0_23]
        at java.lang.reflect.Constructor.newInstance(Constructor.java:513) [rt.jar:1.6.0_23]
        at com.thoughtworks.xstream.converters.reflection.Sun14ReflectionProvider.newInstance(Sun14ReflectionProvider.java:75) [xstream-1.4.1.jar:]
        at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.instantiateNewInstance(AbstractReflectionConverter.java:424) [xstream-1.4.1.jar:]
        at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshal(AbstractReflectionConverter.java:229) [xstream-1.4.1.jar:]
        at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72) [xstream-1.4.1.jar:]
        at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:65) [xstream-1.4.1.jar:]
        at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66) [xstream-1.4.1.jar:]
        at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:50) [xstream-1.4.1.jar:]
        at com.thoughtworks.xstream.converters.collections.AbstractCollectionConverter.readItem(AbstractCollectionConverter.java:71) [xstream-1.4.1.jar:]
        at com.thoughtworks.xstream.converters.collections.MapConverter.putCurrentEntryIntoMap(MapConverter.java:85) [xstream-1.4.1.jar:]
        at com.thoughtworks.xstream.converters.collections.MapConverter.populateMap(MapConverter.java:77) [xstream-1.4.1.jar:]
        at com.thoughtworks.xstream.converters.collections.MapConverter.populateMap(MapConverter.java:71) [xstream-1.4.1.jar:]
        at com.thoughtworks.xstream.converters.collections.MapConverter.unmarshal(MapConverter.java:66) [xstream-1.4.1.jar:]
        at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72) [xstream-1.4.1.jar:]
        at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:65) …
Run Code Online (Sandbox Code Playgroud)

java maven-2 xstream jettison spring-batch

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

检查 Java Object 是否已被修改

我想使用一种干净/自动的方式来检查 Java 对象是否已被修改。
我的具体问题如下:

在我的 Java 应用程序中,我使用 XStream 库将 XML 反序列化为 Java 对象,然后用户可以修改或更改它们。我想要一种方法来检查内存中的这些对象是否在某些时候与序列化的对象不同,因此我可以通知用户并询问他是否要保存更改(即使用 XStream 进行序列化)。在我的应用程序中有许多对象并且非常复杂。

请考虑到我在我的应用程序中没有使用数据库,所以我对使用 hibernate 等解决方案不感兴趣。

java xml xstream

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

如何使用命名空间前缀将 POJO 序列化为 xml

Spring 提供了几种通过 HttpMessageConverter 将 POJO 转换为 XML 的方法。但是,我很难找到一个支持带前缀的自定义命名空间。

例如从

public class Student {
   String name;
   String address;
   Integer score;
}
Run Code Online (Sandbox Code Playgroud)

<?xml version="1.0" encoding="UTF-8"?> 
<foo:Student xmlns:foo="http://schemas.foo.com/student">
   <foo:name>Some Name</foo:name>
   <foo:address>Address</foo:address>
   <foo:score>95</foo:score>
</foo:Student>
Run Code Online (Sandbox Code Playgroud)

我很高兴将 MappingJackson2HttpMessageConverter 与 jackson-dataformat-xml 一起使用,直到我意识到它不支持自定义前缀。

然后我研究将 MarshallingHttpMessageConverter 与 XStreamMarshaller 一起使用,结果发现 XStream 也不支持自定义前缀。

任何人都可以参考我如何使用自定义命名空间前缀将 POJO 序列化为 xml 的示例吗?谢谢。

spring xstream spring-mvc jaxb2 jackson

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

gradle 中的组、模块和工件是什么?

gradle 文档不会花时间解释他们正在处理的实体。这就是为什么我想问这样一个基本问题。

我需要详细了解术语“组”、“模块”和“工件”对于更改此代码的真正含义:

compile('com.thoughtworks.xstream:xstream:1.4.7') {
    exclude group: 'xmlpull', module: 'xmlpull'
}
Run Code Online (Sandbox Code Playgroud)

大约一年前,我使用从Android dalvik 转换中为 xmlpullparser获取的排除语句来修复多个 dex 文件故障。

但是升级到Android Studio 3.0后又出现这个错误!现在它说:Multiple dex files define Lorg/xmlpull/mxp1/MXParser有时...XmlPullParserException.java所以,我想了解我给出的参数exclude必须如何形成。

阅读文档,人们可能会认为组是包名称,而工件是类

//excluding a particular transitive dependency:
exclude module: 'cglib' //by artifact name
exclude group: 'org.jmock' //by group
exclude group: 'org.unwanted', module: 'iAmBuggy' //by both name and group
Run Code Online (Sandbox Code Playgroud)

另一个中文页面翻译)使用了那些排除项

 compile ( 'com.thoughtworks.xstream: xstream: 1.4.7' ) {
       exclude group : …
Run Code Online (Sandbox Code Playgroud)

android xstream gradle xmlpullparser android-gradle-plugin

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

引起:java.lang.ClassNotFoundException:com.thoughtworks.xstream.core.DefaultConverterLookup - Spring Batch + Stream

我正在开发Spring Boot + Batch项目并从文件中读取数据xls,在读取数据时出现以下错误。

我已经添加了xstream版本1.4.11.1Spring OXM依赖项,但仍然出现错误。启动版本是2.1.1.RELEASE.

错误:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'customerItemReader' defined in class path resource [com/example/config/JobConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.batch.item.xml.StaxEventItemReader]: Factory method 'customerItemReader' threw exception; nested exception is java.lang.NoClassDefFoundError: com/thoughtworks/xstream/core/DefaultConverterLookup
    at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:627) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:456) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1288) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1127) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:538) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:498) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE] …
Run Code Online (Sandbox Code Playgroud)

spring xstream spring-batch spring-boot

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

如何在eclipse中使用xstream进行xml序列化

我在查找如何在eclipse中下载和使用xstream时遇到了一些麻烦.当我从网站下载二进制发行版时,我得到一个zip文件.我应该在哪里提取它,我该如何使用它?

编辑:

好的,我已经将它添加到我的构建路径中,但是现在当我尝试使用XStream序列化ArrayList<Earmark>where Earmark我是已定义的类时,我收到以下错误消息:

Exception in thread "main" java.lang.NoClassDefFoundError: org/xmlpull/v1/XmlPullParserException
at com.thoughtworks.xstream.XStream.<init>(XStream.java:334)
at examples.TestEarmarkExtractor.SerializeEarmarks(TestEarmarkExtractor.java:19)
at examples.TestEarmarkExtractor.main(TestEarmarkExtractor.java:48)
Caused by: java.lang.ClassNotFoundException: org.xmlpull.v1.XmlPullParserException
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 3 more
Run Code Online (Sandbox Code Playgroud)

更新:尝试序列化之前发生错误.它发生在线上

XStream xs = new XStream();
Run Code Online (Sandbox Code Playgroud)

java xml eclipse xstream

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

Xstream在输出中插入奇怪的标签

我有一个XML处理应用程序(用java编码),它应该采用2个JavaNcss工具报告并编译它们的差异.

示例XML如下:

<objects>
<object>
<name>Object Name</name>
<ncss>8</ncss>
<functions>2</functions>
<classes>0</classes>
<javadocs>2</javadocs>
</object>
</objects>
Run Code Online (Sandbox Code Playgroud)

虽然应用程序本身工作正常,但我注意到输出中包含以下标记:

    <object reference="../object[18]"/>
    <object reference="../object[41]"/>
    <object reference="../object[10]"/>
    <object reference="../object[41]"/>
    <object reference="../object[12]"/>
    <object reference="../object[41]"/>
    <object reference="../object[14]"/>
Run Code Online (Sandbox Code Playgroud)

我不知道造成这种麻烦的原因.任何帮助将不胜感激.提前致谢.

java serialization parsing xstream

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

带有HashMap的XStream <String,String>

任何人都可以告诉我如何使用XStream序列化HashMap?

private HashMap<String,String> attributes;
attributes = new HashMap<String,String>();
attributes.put("Description","Value");
attributes.put("Description2","Value2");
attributes.put("Description3","Value3");
Run Code Online (Sandbox Code Playgroud)

我的xml看起来像

<attributes>
       <entry>
           <string>Description</string>
           <string>value</string>
       </entry>
       <entry>
           <string>Description2</string>
           <string>Value2</string>
       </entry>
       <entry>
           <string>Description3</string>
           <string>Value3</string>
       </entry>
    </attributes>
Run Code Online (Sandbox Code Playgroud)

我想要一个输出

<attributes>
    <attr>
        <description>Description</description>
        <value>Value</value>
    </attr>
    <attr>
        <description>Description2</description>
        <value>Value2</value>
    </attr>
    <attr>
        <description>Description3</description>
        <value>Value</value>
    </attr>
</attributes>
Run Code Online (Sandbox Code Playgroud)

怎么用XStream实现呢?是否可以注释?

java annotations xstream hashmap xml-serialization

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