如何从要在xstream中使用的XML Document或Node对象创建InputStream对象?我需要更换??? 用一些有意义的代码.谢谢.
Document doc = getDocument();
InputStream is = ???;
MyObject obj = (MyObject) xstream.fromXML(is);
Run Code Online (Sandbox Code Playgroud) Security framework of XStream not initialized, XStream is probably vulnerable
使用XStream(1.4.10)时,我一直将此控制台错误显示为红色
我尝试了以下方法:
XStream.setupDefaultSecurity(xs);
和
xs.addPermission(AnyTypePermission.ANY);
xs.addPermission(NoTypePermission.NONE);
没有一个摆脱它.
我不需要任何花哨的安全设置,我只想沉默那个警告.也许还准备1.5.x的代码
这是我为XML创建XStream实例的方法:
XStream xstream = new XStream();
Run Code Online (Sandbox Code Playgroud)
这适用于JSON:
private final XStream xstream = new XStream(new JsonHierarchicalStreamDriver() {
public HierarchicalStreamWriter createWriter(Writer writer) {
return new JsonWriter(writer, JsonWriter.DROP_ROOT_MODE);
}
});
Run Code Online (Sandbox Code Playgroud)
它们都是非常打印(缩进)输出.
如何让XStream禁用漂亮的打印?
看起来像XStream(com.thoughtworks.xstream - > xstream 1.4.2)以非常奇怪的方式处理元素和属性名称中的下划线.我需要从客户端获取并解析xml,这些客户的属性中包含下划线.这是我第一次尝试使用XStream,我有点失望,因为我希望避免所有丑陋的xml解析.
在这里,我提供了一个小测试样本来点亮行为.最后一个例子显示了我的问题.
public class MyTest {
public void testIt() {
C1 a = new C1();
a.a_b= "a_b";
XStream xstream = new XStream();
xstream.processAnnotations(C1.class);
String xml = xstream.toXML(a);
Logger.info(xml);
C1 b = (C1) xstream.fromXML(xml);
Logger.info(b.a_b);
C1 c = (C1) xstream.fromXML("<C1 a_b=\"a_b\"/>");
Logger.info(c.a_b);
}
}
@XStreamAlias("C1")
class C1 {
@XStreamAsAttribute
String a_b;
}
Run Code Online (Sandbox Code Playgroud)
这输出
INFO: <C1 a__b="a_b"/>
INFO: a_b
INFO: null
Run Code Online (Sandbox Code Playgroud)
现在我的问题 - 有没有办法让XStream理解一个下划线?
我有一个大型XML文档,我想将其转换为Java bean.它有很多标签和属性,但我只对少数几个感兴趣.不可思议的是,似乎XStream强制您在该bean中为每个可能在该XML中的标记声明一个属性.有没有解决的办法?
我在我们的一个 Web 应用程序中将 xstream (1.4.8) lib 更新到最新版本时遇到了此异常。异常是从使用旧版本的 xstream (1.3.1) 编译的依赖 jar 中抛出的。我使用xstream-1.4.8重新编译并构建了新的jar(依赖jar)并再次部署了war文件,但仍然得到相同的异常。最初我认为这是由于版本不匹配造成的,现在我不确定是什么导致了这个异常,而且网上没有太多文档。有什么想法吗?
谢谢,卡蒂克
抛出异常的实际调用:
TestList list = (TestList)xs.fromXML(new StringReader(testData));
Run Code Online (Sandbox Code Playgroud)
其中 testData 是 xml 字符串
TestList.java类
@XStreamAlias("Assets")
public class TestList extends ParentObject {
@XStreamImplicit(itemFieldName = "item")
protected List<Item> item= new ArrayList<Item>();
public void add(Item item) {
item.add(item);
}
public List<Item> getItems() {
if(item== null)
return new ArrayList<Item>();
else
return item;
}
@Override
public String getStringData() {
StringBuilder builder = new StringBuilder();
for (Item item : items) {
builder.append(item.getStringData());
builder.append("---------------\n");
}
return …Run Code Online (Sandbox Code Playgroud) 我想使用XStream将对象序列化为此表单的XML.
<node att="value">text</node>
Run Code Online (Sandbox Code Playgroud)
节点(文本)的值是序列化对象上的字段,以及att属性.如果没有为此对象编写转换器,这可能吗?
谢谢!
我必须处理以下场景(的变体).我的模型类是:
class Car {
String brand;
Engine engine;
}
abstract class Engine {
}
class V12Engine extends Engine {
int horsePowers;
}
class V6Engine extends Engine {
String fuelType;
}
Run Code Online (Sandbox Code Playgroud)
我必须反序列化(不需要序列化支持ATM)以下输入:
<list>
<brand id="1">
Volvo
</brand>
<car>
<brand>BMW</brand>
<v12engine horsePowers="300" />
</car>
<car>
<brand refId="1" />
<v6engine fuel="unleaded" />
</car>
</list>
Run Code Online (Sandbox Code Playgroud)
我尝试/发布的内容:
我尝试过使用XStream,但它希望我写下这样的标签:
<engine class="cars.V12Engine">
<horsePowers>300</horsePowers>
</engine>
Run Code Online (Sandbox Code Playgroud)
等等.(我不想要的<engine>-标签,我想<v6engine>-标签或一个<v12engine>-标记.
此外,我需要能够根据标识符返回"预定义"品牌,如上面的品牌ID所示.(例如,Map<Integer, String> predefinedBrands在反序列化期间保持一个).我不知道XStream是否适合这种情况.
我意识到这可以通过推或拉解析器(例如SAX或StAX)或DOM库"手动"完成.但是我希望有更多的自动化.理想情况下,我应该能够添加类(例如new Engines)并立即开始在XML中使用它们.(XStream绝不是必需品,最优雅的解决方案赢得赏金.)
我多年前使用过XStream,但我发现这些库自2008年以来没有更新(最新消息).现在是否有更现代化和最新的Java XML序列化库?
根据XStream的FAQ,它的默认解析器不保留UTF-8文档编码,并且必须提供自己的编码器.怎么做到这一点?
谢谢!