标签: xstream

XMLEncoder和XStream的相对优势是什么?

假设我想在XML中存储许多小配置对象,我不太关心格式.内置到JDK中的XMLDecoder类可以工作,从我听到的,XStream以类似的方式工作.

每个图书馆有哪些优势?

java xml serialization xstream

5
推荐指数
2
解决办法
8653
查看次数

C++序列化Clean XML与XSTREAM类似

我需要编写一个linux c ++应用程序,它以XML格式保存设置(便于手动编辑),并通过套接字和HTTP上的XML消息与现有应用程序通信.问题是我找不到任何智能库来帮助我,我并不特别喜欢编写DOM或SAX代码来编写和阅读一些非常简单的消息.

Boost Serialization几乎是匹配,但它为它生成的xml添加了许多特定于boost的数据.这显然不适用于交换格式.我想知道是否有可能使Boost Serialization或其他一些c ++序列化库生成干净的xml.我不介意是否有一些必需的额外属性 - 比如版本属性,但我真的希望能够控制他们的命名并摆脱我不使用的'功能' - tracking_level和class_id for实例.

理想情况下,我只想在Java中使用类似于xstream的东西.我知道c ++缺乏内省,因此有必要进行一些手动编码 - 但是如果有一个干净的解决方案来读取和编写简单的XML而没有kludges会很好!

如果无法做到这一点,我也对XML模式是规范资源(合同优先)的工具感兴趣 - 一个很好的JAXB替代C++.到目前为止,我只找到了像CodeSynthesis XSD这样的商业解决方案.我更喜欢开源解决方案.我尝试过gSoap - 但是它生成了非常丑陋的代码,并且它也是特定于SOAP的.

无奈之下,我也开始研究protobuffers的替代序列化格式.这存在 - 但仅限Java!令我惊讶的是,协议缓冲区似乎是比XML更好的支持数据交换格式.

我很生气只为这个应用程序找到libs,我真的需要一些新的想法.任何人?

c++ xstream xml-serialization codesynthesis boost-serialization

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

Google应用引擎上的xstream

我知道由于安全原因,xstream在Google应用引擎上存在问题.我观察到应用了一些补丁来使它适用于xstream的gae.任何人都可以使用jar的版本,或者除了Je中的JAXP之外还有其他方法可以将xml制作成java吗?

google-app-engine xstream

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

格式化Xstream生成的XML

我想格式化Xstream生成的输出XML,使其更具可读性.目前,在每个元素之后添加换行符,但我希望在每个属性之后添加换行符.有没有办法做到这一点?

默认情况下,使用Pretty Print Writer来格式化xml的输出,但这对我来说还不够.我想在每次之后添加换行符

java xml xstream

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

使用XStream反序列化空XML元素

在我收到的XML流中,我有以下声明

<user>
    <age/>
</user>
Run Code Online (Sandbox Code Playgroud)

要插入到如下所示的对象中:

@XStreamAlias("user")
public class User {

    public int age = 0;
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,每次尝试读取此XML时都会收到XStream异常,因为age xml标记为空:

Exception in thread "main" com.thoughtworks.xstream.converters.ConversionException: For input string: "" : For input string: ""
---- Debugging information ----
message             : For input string: ""
cause-exception     : java.lang.NumberFormatException
cause-message       : For input string: ""
class               : java.lang.Integer
required-type       : java.lang.Integer
converter-type      : com.thoughtworks.xstream.converters.SingleValueConverterWrapper
wrapped-converter   : com.thoughtworks.xstream.converters.basic.IntConverter
path                : /GoodreadsResponse/user/age
line number         : 17
class[1]            : fr.riduidel.exporter.goodreads.User
converter-type[1]   : com.thoughtworks.xstream.converters.reflection.ReflectionConverter
class[2]            : fr.riduidel.exporter.goodreads.GoodreadsResponse
version …
Run Code Online (Sandbox Code Playgroud)

java xml xstream deserialization

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

XStream和Object类序列化

我的bean有对象,可以包含不同的类型.现在,当我创建XML时,它会将class属性添加到序列化对象.我想改变它的例子类简单名称.

示例Java:

public class MyParentClass {

private Object childObjectAttribute; // Can be any instance of any interface ...

// Getters & setters etc..
Run Code Online (Sandbox Code Playgroud)

XStream初始化:

public XStream getXStream()
{
    XStream xstream = new XStream();
    Class<?>[] c = { MyInterfaceImpl.class }; // MyInterfaceImpl has of course @XStreamAlias("MyInterface")
    xstream.processAnnotations(c);
    xstream.alias(MyInterface.class.getSimpleName(), MyInterface.class, MyInterfaceImpl.class);
    return xstream;
}
Run Code Online (Sandbox Code Playgroud)

示例XML:

<myParentClass>
    <childObjectAttribute class="com.example.PossibleClass"/>
</myParentClass>
Run Code Online (Sandbox Code Playgroud)

我想将com.example.PossibleClass更改为PossibleClass或其他内容.那可能吗?

java xstream

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

Xstream如何在编组时避免具有特定值的字段

我想以下列格式创建一个xml

<parm-list>
<param>
<NAME>somename</NAME>
<VALUE>somevalue</VALUE>
</param>
<param>
<NAME>somename</NAME>
<VALUE>somevalue</VALUE>
</param>
<param>
<NAME>somename</NAME>
<VALUE>somevalue</VALUE>
</param>
<param>
<NAME>somename</NAME>
<VALUE>somevalue</VALUE>
</param>
</param-list>
Run Code Online (Sandbox Code Playgroud)

如果我不想要<PARAM>具有特定字段的字段, 我该怎么办<NAME>

java xml xstream

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

如何(部分)使用XStream反序列化xml错误

假设我有一个xml文件应该如下所示:

<list>
 <item>
  <id>123</id>
  <name>someName</name>
 </item>
 <item>
  <id>234</id>
  <name>anotherName</name>
 </item>
 <item>
  <id>345</id>
  <name>aThirdName</name>
 </item>
</list>
Run Code Online (Sandbox Code Playgroud)

我使用XStream和以下类解析它:

class ListXML {
 public List<ItemXML> list;
}

class ItemXML {
 public String id;
 public String name;
}
Run Code Online (Sandbox Code Playgroud)

和以下代码:

XStream xstream = new XStream(new DomDriver());
xstream.alias("list", ListXML.class);
xstream.alias("item", ItemXML.class);
xstream.addImplicitCollection(ListXML.class, "item");
ListXML result = (ListXML) xstream.fromXML(in);
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.但是,我现在遇到了一个案例,我将以下xml作为输入:

<list>
 <item>
  <id>123</id>
  <name>someName</name>
 </item>
 <item>
  <id>234</id>
  <aTagUnknownToMe>blabla</aTagUnknownToMe>
 </item>
 <item>
  <id>345</id>
  <name>aThirdName</name>
 </item>
</list>
Run Code Online (Sandbox Code Playgroud)

有没有办法将我的代码更改为"更强大",所以我可以在不知道"aTagUnknownToMe"标签的情况下获取id为123和345的项目?

java xml xstream

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

XStream自定义转换器,可以从List生成平面XML结构?

我正在使用XStream,并且有一个类如下的字段:

private Map<String, String> data;
Run Code Online (Sandbox Code Playgroud)

我想生成这样的XML输出:

<key1>test data</key1>
<key2>test data</key2>
<key3>test data</key3>
Run Code Online (Sandbox Code Playgroud)

所以我希望map键成为元素.mapvalue是XML值,我不希望XML包含在诸如的元素中<data></data>.任何人都可以指向执行此操作的示例代码或类似的东西吗?

UPDATE

这只是一个片段,有一个根元素.

更新2

我发布的自定义转换器代码几乎可以使用.我得到一个扁平的结构,但我需要删除外部元素.有什么想法吗?

//this is the result need to remove <data>
<data>
    <key1>test data</key1>
    <key2>test data</key2>
    <key3>test data</key3>
</data>
Run Code Online (Sandbox Code Playgroud)

这是代码

public class MapToFlatConverter implements Converter{
   public MapToFlatConverter() {
    }

    @Override
    public boolean canConvert(Class type) {
        return Map.class.isAssignableFrom(type);
    }

    @Override
    public void marshal(Object source, HierarchicalStreamWriter writer, MarshallingContext context) {
        Map<String, String> map = (Map<String, String>) source;
        for (Map.Entry<String, String> entry : map.entrySet()) {
            writer.startNode(entry.getKey());
            writer.setValue(entry.getValue().toString()); …
Run Code Online (Sandbox Code Playgroud)

java xstream

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

XStreamMarshaller的漏洞警告

当使用带弹簧批的XStreamMarshaller时,我收到以下消息:

Security framework of XStream not initialized, XStream is probably vulnerable.
Run Code Online (Sandbox Code Playgroud)

首先尝试:根据文档,我试图重置所有权限,但我仍然有相同的消息.此外,在解析XML文件时我没有安全性错误...所以我认为这段代码不起作用.这是一个代码示例:

XStreamMarshaller marshaller = new XStreamMarshaller();
marshaller.getXStream().addPermission(NoTypePermission.NONE);
Run Code Online (Sandbox Code Playgroud)

第二次尝试:我也尝试过该setSupportedClasses方法,但它也不起作用(我仍然得到漏洞消息,并且不支持的类仍然无法正确排除):

XStreamMarshaller marshaller = new XStreamMarshaller();
marshaller.setSupportedClasses(FooBar.class);
Run Code Online (Sandbox Code Playgroud)

如何使用XStreamMarshaller设置安全权限?

注意:根据这个帖子,安全框架是在1.4.7中引入的,它仍然不是强制性的......但它对XStream 1.5.0是强制性的!

使用的XStream版本:1.4.10

使用的Spring Batch版本:4.0.1

有关信息,我使用的是Spring Boot(但我不确定它是否与此相关)

spring xstream spring-batch spring-oxm spring-boot

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