我想用XStream将java类序列化为XML.
我需要使用一个下划线(canal_operateur)生成一个XML元素,但XStream在xml元素名称中添加了第二个下划线.
那么如何只保留一个下划线?
使用此类的默认配置:
public class Document implements Serializable {
private String typedoc;
private Fichier fichier;
private String canalOperateur;
//xstream.aliasField("canal_operateur", Document.class, "canalOperateur");
/*
** setter and getter
*/
}
Run Code Online (Sandbox Code Playgroud)
XStream将下划线加倍:
<document>
<canal__operateur>canal</canal__operateur>
<commentaire>commentaire</commentaire>
<metadonnees/>
</document>
Run Code Online (Sandbox Code Playgroud) 假设我有
class Student
{
String name;
int age;
String teacher;
}
Run Code Online (Sandbox Code Playgroud)
然后 :
public class App1
{
public static void main(String[] args)
{
Student st = new Student();
st.setName("toto");
XStream xs = new XStream();
xs.alias("student",Student.class);
System.out.println(xs.toXML(st));
}
Run Code Online (Sandbox Code Playgroud)
}
给我 :
<student>
<name>toto</name>
<age>0</age>
</student>
Run Code Online (Sandbox Code Playgroud)
有没有办法处理空值?我的意思是 :
<student>
<name>toto</name>
<age>0</age>
<teacher></teacher>
</student>
Run Code Online (Sandbox Code Playgroud)
如果我这样做是可能的
st.setTeacher("");
Run Code Online (Sandbox Code Playgroud)
但如果老师是空的,那就不行了
我尝试使用自定义转换器,但似乎空值不会发送到转换器.
我正在寻找一种可供Java开发人员实现将通过JSON或XML进行通信的REST服务的最佳方法.我正在寻找适合生产的产品.
我知道Spring 3.0即将推出,但还没有完成 - 没有运气.
泽西岛是一个吗?
我的应用程序由Tomcat托管,使用Spring,Jettison和XStream.
我想使用一个开源软件包,这样我就可以获得与WCF.NET类似的开发经验,在那里我可以声明Url模板,映射GET/POST并获得XML或JSON输出.接受的有效负载也应该是XML或JSON.
有什么想法吗?
我目前正在使用XStream对JSON进行反序列化,并且它一直运行良好.但是,当我有如下JSON字符串时
{
key1: { an_object: { something: 'foobar' } },
key2: { another_object: { data: 'hi' }
}
Run Code Online (Sandbox Code Playgroud)
最值得注意的是它没有根节点,我不知道如何解析它.基本上,我希望DROP_ROOT_NODE与反序列化相反.
我有一个XML文档(由Adobe XFA表单生成),其中包含如下数据:
<Position>
<PositionBorder>
<Title/>
<StartDate/>
<EndDate/>
</PositionBorder>
</Position>
Run Code Online (Sandbox Code Playgroud)
由于此文件是在其他地方定义的,因此我无权更改我获得的XML格式.
在我的Java代码中,我创建了一个包含Title,Start和End Dates的Position类.
我的问题是,当我使用XStream来解析文件时,它需要一个PositionBorder类来保存标题和日期.我想基本上忽略边框并将所有字段放入Position类.
我真正想做的是使用convertAnother方法来转换position元素的子元素.我试图这样做但它失败了,因为我的PositionConverter被调用了PositionBorder(当我调用convertAnother时).
任何人都有任何线索如何处理解析时折叠XML的结构?
我有以下XML
<search ver="3.0">
<loc id="ARBA0009" type="1">Buenos Aires, Argentina</loc>
<loc id="BRXX1283" type="1">Buenos Aires, Brazil</loc>
<loc id="ARDF0127" type="1">Aeroparque Buenos Aires, Argentina</loc>
<loc id="MXJO0669" type="1">Concepcion De Buenos Aires, Mexico</loc>
<loc id="MXPA1785" type="1">San Nicolas De Buenos Aires, Mexico</loc>
<loc id="ARBA0005" type="1">Balcarce, Argentina</loc>
<loc id="ARBA0008" type="1">Bragado, Argentina</loc>
<loc id="ARBA0010" type="1">Campana, Argentina</loc>
<loc id="ARBA0016" type="1">Chascomus, Argentina</loc>
<loc id="ARBA0019" type="1">Chivilcoy, Argentina</loc>
</search>
Run Code Online (Sandbox Code Playgroud)
和一个城市课
public class City {
private String id;
private Integer type;
private String name;
// getters & setters...
}
Run Code Online (Sandbox Code Playgroud)
我尝试了以下别名来解析XML
xStream.alias("search", List.class);
xStream.alias("loc", City.class);
xStream.useAttributeFor("id", …Run Code Online (Sandbox Code Playgroud) 我使用的XStream水壶下反序列化XML的Java对象,它总是给我的例外:
nodecom.thoughtworks.xstream.mapper.CannotResolveClassException
然后我分别从Kettle和一个简单的Java应用程序中尝试了我的代码.它工作正常.例如:
public static void main(String[] args) {
person p = new person("JJ", "MM");
XStream xstream = new XStream(new DomDriver());
xstream.alias("personname", person.class);
String xml = xstream.toXML(p);
person pp = (person) xstream.fromXML(xml);
System.out.println(pp.toString());
}
public class person {
private String firstname;
private String lastname;
public person(String first, String last) {
this.firstname = first;
this.lastname = last;
}
public String getFirstname() {
return this.firstname;
}
public String getLastname() {
return this.lastname;
}
public void setFirstname(String name) {
this.firstname = name;
} …Run Code Online (Sandbox Code Playgroud) 我有一个二进制文件,其中包含Java Serialized对象(它们是值对象),但我无法访问序列化创建这些对象的Class.没有类文件,JVM不允许我使用objectInputStreamInstance.readObject()读取对象,并正确地抛出java.lang.ClassNotFoundException.
是否有可以帮助以XML或其他标准格式提取数据的库?例如,如果下面的Person类被序列化并存储在一个文件中,我想从中提取数据:
类定义
class Person implements Serializable {
int age;
String name;
public Person(int age, int name) {
this.age = age;
this.name = name;
}
}
Run Code Online (Sandbox Code Playgroud)
必需的提取格式(无需访问类文件)
<Person>
<age>10</age>
<name>Name</name>
</Person>
Run Code Online (Sandbox Code Playgroud)
我还检查了以下但没有得到我想要的东西:
谢谢您的帮助.
此致,Gursev
所述XStream序列库的权利要求是在序列化健壮复杂Java对象框(例如,没有修改的对象或需要映射)的进行。特别是,根据XStream 文档,XStream 可以处理循环对象引用。
所以我写了一个测试来检查这个 - 我试图序列化一个有点复杂的数据结构(LinkedHashMultimap),其中包括对 iteself 的引用:
import com.google.common.collect.LinkedHashMultimap;
import com.thoughtworks.xstream.XStream;
public class SerializationTest {
public static void main(String[] args0) {
// Create LinkedHashMultimap to serialize
LinkedHashMultimap<String, Object> outObj = LinkedHashMultimap.create();
outObj.put("x", 1);
outObj.put("x", "abc");
outObj.put("y", outObj); // Add a self-reference
// Try to serialize
XStream xstream = new XStream();
String xml = xstream.toXML(outObj);
System.out.println(xml); // Print XML to console for a quick peek
// Try to deserialize - ERROR HERE!!!
LinkedHashMultimap<String, Object> …Run Code Online (Sandbox Code Playgroud)