【问题标题】:Mapping JsonObject property to XML with MOXy使用 MOXy 将 JsonObject 属性映射到 XML
【发布时间】:2015-03-06 13:36:09
【问题描述】:

我有以下课程

@XmlRootElement(name = "Root")
class MyClass {

    @XmlElement(name = "Entries")
    JsonObject getProperty() { ... }
}

我希望在编组后得到以下 XML 输出:

<Root>
  <Entries>
  <Entry>
    <Name>Age</Name>
    <Value>35</Value>
  </Entry>
  <Entry>
    <Name>Email</Name>
    <Value>test@gmail.com</Value>
  </Entry>
 </Entries>
</Root>

前提是getProperty()返回的JSON是:

{ "Age": 35, "Email": "test@gmail.com" }

我试图创建一个助手类XmlJsonEntry

@XmlAccessType(XmlAccessType.FIELD)
@XmlRootElement(name = "Entry")
class XmlJsonEntry {
   @XmlElement
   public String Name;
   @XmlElement
   public String Value;
}

并将XmlAdapter 扩展如下:

public static class JsonXmlAdapter extends XmlAdapter<XmlJsonEntry[], JsonObject>
{

    @Override
    public XmlJsonEntry[] marshal(JsonObject v) throws Exception 
    {
        List<XmlJsonEntry> entries = new ArrayList<XmlJsonEntry>();
        for (Entry<String,JsonElement> e : v.entrySet())
        {
            entries.add(new XmlJsonEntry(e.getKey(),e.getValue().toString()));
        }
        return entries.toArray(new XmlJsonEntry[entries.size()]);
    }

    @Override
    public JsonObject unmarshal(XmlJsonEntry[] v) throws Exception 
    { throw new Exception("Unmarshall not supported."); }

}

但这在编组期间引发了一个异常:

试图从对象 [[Lmy.app.$XmlJsonEntry;] 获取类型为 [java.lang.String] 的实例变量 [name] 的值。指定的对象不是声明底层字段的类或接口的实例`

我如何让它工作?是否有更简单的方法来实现这一点?

【问题讨论】:

    标签: java xml json marshalling moxy


    【解决方案1】:

    代替:

    public static class JsonXmlAdapter extends XmlAdapter<XmlJsonEntry[], JsonObject>
    

    做:

    public static class JsonXmlAdapter extends XmlAdapter<XmlJsonEntries, JsonObject>
    

    然后让XmlJsonEntries 有一个List&lt;XmlJsonEntry&gt; 类型的映射属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-15
      • 2023-04-07
      • 2016-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多