мой текущий код идеально подходит, и я получаю нужный элемент внутри полученного XML.то есть <food>Beef</food>
Однако проблема возникает, когда мне нужно отменить это обратно в Java-объект.Все возвращается нормально, кроме переменной питания.Изначально у меня не было XmlElement(required = true)
сверху, и элемент питания всегда возвращался к нулю.Затем я добавил раздел required = true и у меня возникли проблемы с интерфейсом.Я немного покопался, и из того, что я могу собрать, jaxb не может в действительности разархивировать интерфейс, так как он не знает конкретный тип для маршаллинга.
Текущая ошибка, если это поможет:
Can not set FoodInterface field BigPayload.food to
com.sun.org.apache.xerces.internal.dom.ElementNSImpl
Мои классы Java выглядят следующим образом:
@XmlSeeAlso({MeatFoods.class, VeggieFoods.class})
@XmlType(name ="BigPayload", propOrder = //stuff goes here
@XmlRootElement(name = foodPayload)
public class BigPayload implements Payload{
@XmlElements({@XmlElement(type = MeatFoods.class),
@XmlElement(type = VeggieFoods.class),
@XmlElement(required = true)})
protected FoodInterface food;
protected Grade grade;
//grade/food setters and getters
}
@XmlTransient //If this isn't here, I get the jaxB cannot handle interfaces and no default constructor error
public interface FoodInterface{ //stuff here}
@XmlType(name = "MeatFoods")
@XmlEnum
public enum MeatFoods implements FoodInterface{
Chicken(1, Chicken)
Beef(2, Beef)
Pork(3, Pork)
int value;
String name;
@Override
public int getValue()
@Override
public String getName()
public static FoodInterface getEnumFromValue(int value){//gets stuff}
public static FoodInterface getEnumFromName(String name){//gets stuff}
}
Я просто хотел знать, если этоправильно, и нет действительно хорошего способа разобрать тип интерфейса.Это правда?Я видел много других вопросов о маршаллинговых интерфейсах, и неубедительные вопросы не получили ответов на мое удовлетворение.Любой ответ приветствуется, и я знаю, что это не минимальный воспроизводимый пример, но я больше ищу словесный ответ, а не исправление кода или что-то еще.Хотя, если в коде что-то явно не так, пожалуйста, дайте мне знать!