Сериализация карты в JAX-B, производящая нежелательные пространства имен XML и префиксы - PullRequest
2 голосов
/ 07 июля 2011

Проблема:

Я пытаюсь выполнить простую сериализацию HashMap с JAX-B в приложении JAX-RS и получить дополнительный вывод, которого я хотел бы избежать Сериализация по умолчанию HashMap включает пространства имен XML и префиксы, которые бесполезны (для моего приложения).

Вывод, который я получаю для Карты:

<params>
  <entry>
    <key xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:type="xs:string">keyName</key>
    <value xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:type="xs:string">123</value>
  </entry>
  ...
</params>

вместо:

<params>
  <entry>
    <key>keyName</key>
    <value>123</value>
  </entry>
  ...
</params>

Класс в основном выложен так:

@XmlRootElement(name="example")
public ExampleClass
{
  private params HashMap<String,Object> = new HashMap<String,Object>();

  public ExampleClass() { }

  @XmlElementWrapper(name="params", required=true)
  public Map getParameters()
  {
    return params;
  }
}

Что можно сделать, чтобы упростить вывод XML?

Библиотечный справочник:

  • JAX-RS (Resteasy 2.0, не замужем за этой версией)
  • JAX-B (входит в Resteasy 2.0)

1 Ответ

4 голосов
/ 07 июля 2011

Поскольку ваша карта не использует универсальные шаблоны, сериализатор записывает тип данных для каждого значения элемента.

Попробуйте использовать:

public Map<String,String> getParameters()

Даже если вы используете Map<String,Object>, сериализатор должен записать соответствующий тип элемента значения.

...