Java: JAXB и символ использования

Нет, второй метод не остановится, если названо сначала. Никакие нечетные результаты не произойдут (кроме небольших издержек для проверки блокировки. Этот вопрос привычки очень. Java 6 вперед, у Вас есть огрубление блокировки в JVM - http://java.sun.com/performance/reference/whitepapers/6_performance.html )

, Например, смотрите на исходный код java.util. Вектор. Существует партия вызовов к другим синхронизированным методам из синхронизированных методов.

8
задан bdoughan 29 September 2010 в 16:56
поделиться

4 ответа

After some experimentation, there appears to be no way to configure JAXB to handle primitive chars properly. I'm having a hard time accepting it, though.

I've tried defining an XmlAdaptor to try and coerce it into a String, but the runtime seems to only accept adapters annotated on Object types, not primitives.

The only workaround I can think of is to mark the char field with @XmlTransient, and then write getters and setters which get and set the value as a String:

   @XmlTransient
   char gender = 'M';

   @XmlElement(name="gender")
   public void setGenderAsString(String gender) {
      this.gender = gender.charAt(0);
   }

   public String getGenderAsString() {
      return String.valueOf(gender);
   }

Not very nice, I'll grant you, but short of actually changing your char field tobe a String, that's all I have.

6
ответ дан 5 December 2019 в 12:59
поделиться

Первое, что я вспомнил:)

String gender = "M";
2
ответ дан 5 December 2019 в 12:59
поделиться

Это все еще кажется проблемой в Metro JAXB (RI), по крайней мере, в версии Metro, поставляемой с JDK 1.6.0_20.

EclipseLink JAXB (MOXy) правильно маршалирует char:

Чтобы использовать EclipseLink JAXB, просто добавьте eclipselink.jar в путь к классам и добавьте jaxb. properties с классами вашей модели со следующей записью:

javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory
1
ответ дан 5 December 2019 в 12:59
поделиться

создайте специализированный XmlAdapter:

package br.com.maritima.util;

import javax.xml.bind.annotation.adapters.XmlAdapter;

public class CharAdapter extends XmlAdapter<String,Character>{

 @Override
 public String marshal(Character v) throws Exception {
  return new String(new char[]{v});
 }

 @Override
 public Character unmarshal(String v) throws Exception {
   if(v.length()>0)
   return v.charAt(0);
  else return ' ';
 }

}

, затем вы можете зарегистрировать его для всего пакета с помощью package-info.java (не забудьте его внутри какого-либо другого класса) или использовать его специально для определенного поля.

см. http://blogs.oracle.com/CoreJavaTechTips/entry/exchanging_data_with_xml_and для получения дополнительной информации.

0
ответ дан 5 December 2019 в 12:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: