相关疑难解决方法(0)

JAXB:如何将地图编组为<key> value </ key>

问题是关于JAXB Map编组 - 有很多关于如何将Map转换为如下结构的示例:

<map>
  <entry>
    <key> KEY </key>
    <value> VALUE </value>
  </entry>
  <entry>
    <key> KEY2 </key>
    <value> VALUE2 </value>
  </entry>
  <entry>
  ...
</map>
Run Code Online (Sandbox Code Playgroud)

实际上,这是JAXB原生支持的.但是,我需要的是XML,其中key是元素名称,value是其内容:

<map>
  <key> VALUE </key>
  <key2> VALUE2 </key2>
 ...
</map>
Run Code Online (Sandbox Code Playgroud)

我没有按照JAXB开发人员推荐的方式(https://jaxb.dev.java.net/guide/Mapping_your_favorite_class.html)成功实现我的Map适配器,因为我需要,他 - 动态属性名称:)

那有什么解决方案吗?

PS目前我必须为每个我想要编组的典型键值对创建一个专用的容器类 - 它可以工作,但是我必须创建太多这些辅助容器.

java xml jaxb jaxb2

64
推荐指数
4
解决办法
10万
查看次数

使用JAXB的动态标记名称

我正在使用Jersey和JAXB构建一个简单的RESTful Web服务我有一个'String'的HashMap到'Integer':

2010-04 -> 24 
2010-05 -> 45
Run Code Online (Sandbox Code Playgroud)

我需要生成一个如下所示的XML响应:

 <map>
   <2010-04>24</2010-04>
   <2010-05>45</2010-05>
 </map>
Run Code Online (Sandbox Code Playgroud)

使用JAXB生成动态标记名称的最佳方法是什么?

java xml jaxb

15
推荐指数
3
解决办法
2万
查看次数

使用@XmlAnyElement进行HashMap JAXB映射

我正在尝试实现涉及HashMap的XML映射.这是我的用例:我想得到这个:

<userParameters>
    <KEY_1>VALUE_1</KEY_1>
    <KEY_2>VALUE_2</KEY_2>
    <KEY_3>VALUE_3</KEY_3>
</userParameters>
Run Code Online (Sandbox Code Playgroud)

我的UserParameters类看起来像这样:

@XmlRootElement
public class UserParameters {

    private final Map<QName, String> params = new HashMap<>();

    @XmlAnyElement
    public Map<QName, String> getParams() {
        return params;
    }

}
Run Code Online (Sandbox Code Playgroud)

编组时出现以下错误:

Caused by: javax.xml.bind.JAXBException: class java.util.HashMap nor any of its super class is known to this context.
    at com.sun.xml.bind.v2.runtime.JAXBContextImpl.getBeanInfo(JAXBContextImpl.java:593)
    at com.sun.xml.bind.v2.runtime.property.SingleReferenceNodeProperty.serializeBody(SingleReferenceNodeProperty.java:109)
    ... 54 more
Run Code Online (Sandbox Code Playgroud)

它工作正常,@XmlAnyAttribute我得到:<userParameters KEY_1="VALUE_1" ... />

从我看到的答案来看,似乎我必须自己制作,XmlAdapter但对于这种简单而常见的需求感觉有些过分.

---更新---

我在这里找到了一个很有前途的解决方案:JAXB HashMap是不可映射的

唯一不方便的是它似乎搞乱了名称空间.

这是我的新UserParameters类:

@XmlAnyElement
public List<JAXBElement> getParams() {
    return params;
}

public void …
Run Code Online (Sandbox Code Playgroud)

java jaxb

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

标签 统计

java ×3

jaxb ×3

xml ×2

jaxb2 ×1