gpt4 book ai didi

java - 通过 ID 引用字段而不是扩展它

转载 作者:太空宇宙 更新时间:2023-11-04 14:11:32 25 4
gpt4 key购买 nike

我是 XML (Java) 简单框架的新手,在序列化特定类构造时遇到了问题。

我有两门课:

@Root(name="static")
class StaticData {
@Attribute
private String id;
@Attribute
private String value;
...
}

@Root(name="listdata")
class ListData {
// Problem field
@Attribute
private StaticData ref;
@Element
private String name;
}

并接收“TransformException:不支持类 StaticData 的转换”。我希望 ListData 中的 ref-field 不要扩展到静态数据 XML 结构(那么 @Element 就可以了),而是获取引用。

<listdata ref="foo">
<name>bla bla</name>
</listdata>

其中“foo”是我的应用程序中已加载的某些 StaticData 对象中“id”的有效值。

在 JAXB 中,我将使用 XmlJavaTypeAdapter 注释

@XmlAttribute(name="id")
@XmlJavaTypeAdapter(MyStaticDataAdapter.class)

但我似乎无法在 Simple 中找到等效的工作。

最佳答案

怀疑您是否可以使用转换器来实现此类行为。

这是一个示例:

@Root(name = "listdata")
@Convert(ListData.ListDataConverter.class)
class ListData
{
@Attribute
private StaticData ref;
@Element
private String name;

// ...

// Converter implementation
static class ListDataConverter implements Converter<ListData>
{

@Override
public ListData read(InputNode node) throws Exception
{
/*
* In case you also want to read, implement this too ...
*/
throw new UnsupportedOperationException("Not supported yet.");
}

@Override
public void write(OutputNode node, ListData value) throws Exception
{
node.setAttribute("ref", value.ref.getId());
node.getChild("name").setValue(value.name);
}
}
}

用法:

Serializer ser = new Persister(new AnnotationStrategy());
/* ^----- important! -----^ */

ListData ld = ...
ser.write(ld, System.out); // Serialize to std out

输出

使用这些 ListData 值...

  • 名称 = abcdefg
  • 引用 = ...
    • id=123
    • 值 = 这是一个值

你会得到...

<listdata ref="123">
<name>def</name>
</listdata>

关于java - 通过 ID 引用字段而不是扩展它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28265598/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com