Intereting Posts
Как вы устанавливаете значения одного массива для значений другого массива в Java? Служба таймера в ejb 3.1 – расписание вызова тайм-аута Доступ к переменным среды AWS Lambda в Java-коде Шаблоны использования для частных, статических, конечных, общедоступных, абстрактных ключевых слов в java Почему class подclassа classа должен быть статическим, чтобы инициализировать подclass в конструкторе classа? Какие свойства в компоненте поддержки JSF могут быть заданы пользователем? Возможно ли отключение jToggleButton на протяжении всего выполнения? Может ли Gradle объединить несколько проектов в одну банку? Понимание шаблона MVC Эффективность Java foreach GSON: как предотвратить StackOverflowError, сохраняя циркулярные ссылки? Как установить log4j.properties в Eclipse? Взаимодействие между C # и Java с помощью веб-служб без сервера приложений Java EE? Где разместить конфигурационный файл ServiceLoader в веб-приложении Абстракция и аннотация в java

Отображение элементов JAXB

У меня есть xml, похожий на:

  abcd   

Я хочу отобразить элемент theta в свойство thetaValue в classе MyBean

 @XmlRootElement(name = "alpha") public class MyBean { private String thetaValue; public String getThetaValue() { return this.thetaValue; } public void setThetaValue(String thetaValue) { this.thetaValue= thetaValue; } } 

есть ли способ, которым я могу это сделать? Я использую jaxb, который поставляется с JDK 1.6

Примечание. Я являюсь лидером EclipseLink JAXB (MOXy) и членом экспертной группы JAXB (JSR-222) .


Использование любой реализации JAXB (JSR-222)

Используя любую реализацию JAXB (JSR-222), вы можете использовать XmlAdapter для сопоставления этого XmlAdapter использования.

ThetaValueAdapter

 package forum9799081; import javax.xml.bind.annotation.adapters.XmlAdapter; public class ThetaValueAdapter extends XmlAdapter { @Override public Beta marshal(String string) throws Exception { Beta beta = new Beta(); beta.theta = string; return beta; } @Override public String unmarshal(Beta beta) throws Exception { return beta.theta; } public static class Beta { public String theta; } } 

MyBean

 package forum9799081; import javax.xml.bind.annotation.*; import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; @XmlRootElement(name = "alpha") public class MyBean { private String thetaValue; @XmlElement(name="beta") @XmlJavaTypeAdapter(ThetaValueAdapter.class) public String getThetaValue() { return this.thetaValue; } public void setThetaValue(String thetaValue) { this.thetaValue = thetaValue; } } 

демонстрация

 package forum9799081; import java.io.File; import javax.xml.bind.*; public class Demo { public static void main(String[] args) throws Exception { JAXBContext jc = JAXBContext.newInstance(MyBean.class); File xml = new File("src/forum9799081/input.xml"); Unmarshaller unmarshaller = jc.createUnmarshaller(); MyBean myBean = (MyBean) unmarshaller.unmarshal(xml); Marshaller marshaller = jc.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); marshaller.marshal(myBean, System.out); } } 

Input.xml / выход

    abcd   

Использование EclipseLink JAXB (MOXy)

Используя MOXy, вы можете использовать расширение @XmlPath для достижения того же сопоставления:

 package forum9799081; import javax.xml.bind.annotation.*; import org.eclipse.persistence.oxm.annotations.XmlPath; @XmlRootElement(name = "alpha") public class MyBean { private String thetaValue; @XmlPath("beta/theta/text()") public String getThetaValue() { return this.thetaValue; } public void setThetaValue(String thetaValue) { this.thetaValue = thetaValue; } } 

Чтобы получить больше информации