这是我要解析的 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)
我不知道如何为这些值指定别名......(或者如果我必须实现我自己的转换器。)。
谢谢..
我的 Web 服务使用 Spring MVC 以 xml 和 json 格式返回数据。对于 json,spring 使用 Jackson 和 XStream for XML。但是,XStream 使用字段进行序列化,而 Jackson 使用方法(setter/getter)。
我想在 xml 序列化中包含所有/一些 getter。如何通过自定义转换器或注释来实现这一点?
我在使用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中,我有:
此外,我读到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 对象是否已被修改。
我的具体问题如下:
在我的 Java 应用程序中,我使用 XStream 库将 XML 反序列化为 Java 对象,然后用户可以修改或更改它们。我想要一种方法来检查内存中的这些对象是否在某些时候与序列化的对象不同,因此我可以通知用户并询问他是否要保存更改(即使用 XStream 进行序列化)。在我的应用程序中有许多对象并且非常复杂。
请考虑到我在我的应用程序中没有使用数据库,所以我对使用 hibernate 等解决方案不感兴趣。
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 的示例吗?谢谢。
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) 我正在开发Spring Boot + Batch项目并从文件中读取数据xls,在读取数据时出现以下错误。
我已经添加了xstream版本1.4.11.1和Spring 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) 我在查找如何在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) 我有一个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)
我不知道造成这种麻烦的原因.任何帮助将不胜感激.提前致谢.
任何人都可以告诉我如何使用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实现呢?是否可以注释?
xstream ×10
java ×7
xml ×4
spring ×3
spring-batch ×2
android ×1
annotations ×1
eclipse ×1
enums ×1
gradle ×1
hashmap ×1
jackson ×1
jaxb2 ×1
jettison ×1
maven-2 ×1
parsing ×1
spring-boot ×1
spring-mvc ×1