Как использовать константы в XML для XStream

Пожалуйста, как определить константу Java, например Integer.MAX_VALUE, в XML? Я умею пользоваться enum, но у меня сторонняя библиотека и приходится оперировать константами. Например. в xml-файле существует некоторое значение, и я хотел бы, чтобы в сгенерированном классе java он был объявлен как константа.

XML:

 <person>
  <firstname>Joe</firstname>
  <lastname>Walnes</lastname>
  <phone>
    <code>123</code>
    <number>1234-456</number>
  </phone>
  <fax>
    <code>123</code>
    <number>9999-999</number>
  </fax>
 </person>

Джава:

 public class Person {
 private String firstname;
 private String lastname;
 private PhoneNumber phone;
 private PhoneNumber fax;
 // ... constructors and methods
}

public class PhoneNumber {
private int code;
private String number;
// ... constructors and methods
 }     

Это работает. Но должно быть так:

XML:

 <person>
  <firstname>Joe</firstname>
  <lastname>Walnes</lastname>
  <phone>
    **<const>**PnoneNumber.LOCAL**</const>**
  </phone>
  <fax>
    <code>123</code>
    <number>9999-999</number>
  </fax>
 </person>

Ява должна быть:

 public class Person {
 private String firstname;
 private String lastname;
 private PhoneNumber phone;
 private PhoneNumber fax;
 // ... constructors and methods
}

public class PhoneNumber {
public static final PnoneNumber LOCAL=new PhoneNumber(123,"1234-456");
private int code;
private String number;
// ... constructors and methods
 }

Могу ли я сделать это простым способом и без специального конвертера?

Большое спасибо.


person albus.ua    schedule 19.06.2012    source источник
comment
XStream ведет себя как сериализация Java, он полностью игнорирует статические члены.   -  person user710818    schedule 20.06.2012


Ответы (1)


Я изучил несколько генераторов XML-POJO, особенно те, которые используют XML-схему (XSD) для определения классов, и, к моему удивлению, ни один из них не предлагает возможность изменять атрибуты.

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

Если вы используете что-то, что использует XML-схему, вы всегда можете использовать атрибут fixed="constant" в качестве стандартной инициализации, хотя, конечно, это не сохраняет семантику.

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

person Konrad Reiche    schedule 30.06.2012