javax.xml.bind.Marshaller, кодирующий символы Юникода с их десятичными значениями - PullRequest
4 голосов
/ 16 июля 2011

У меня есть сервис, который должен генерировать XML. В настоящее время я использую jaxb и Marshaller для создания XML с использованием StringWriter.

Вот текущий вывод, который я получаю.

<CompanyName>Bakery é &amp;</CompanyName>

Хотя это может быть хорошо для некоторых веб-сервисов, мне нужно экранировать специальные символы Юникода. Служба, которая потребляет мой xml, должна иметь следующее:

<CompanyName>Bakery &#233; &amp;</CompanyName>

Если я использую StringEscapeUtils из commons-lang, я получаю что-то вроде следующего. Этот тоже не работает:

<CompanyName>Bakery &amp;#233; &amp;amp;</CompanyName>

Существуют ли какие-то настройки для Marshaller, которые позволят мне кодировать эти специальные символы как их десятичные значения?

Ответы [ 2 ]

5 голосов
/ 16 июля 2011

Поскольку Эд Стауб предлагает , попробуйте установить свойство jaxb.encoding. Кодировка US-ASCII вызовет экранирование чего-либо выше первых 128 кодовых точек.

@XmlRootElement(name = "Company")
public class Company {
  private String companyName = "Bakery \u00E9 &";

  @XmlElement(name = "CompanyName")
  public String getCompanyName() { return companyName; }
  public void setCompanyName(String bar) { this.companyName = bar; }

  public static void main(String[] args) throws Exception {
    JAXBContext ctxt = JAXBContext.newInstance(Company.class);
    Marshaller m = ctxt.createMarshaller();
    m.setProperty("jaxb.encoding", "US-ASCII");
    m.marshal(new Company(), System.out);
  }
}
5 голосов
/ 16 июля 2011

Да, Marshaller.setProperty (jaxb.encoding, encoding ) установит кодировку для использования в документе. Я предполагаю, что вы хотите "US-ASCII".

...