Переходный процесс Xml не работает jaxb (Moxy).?

Временная аннотация Xml не работает для следующей модели:

@XmlRootElement
public class JdfValidation {
private String name;
private String dataType;
private String errorMessage;
private String javaValidationLogic;
protected String displayName;
private boolean isCustom;
private List<ValidationInputParam> validationInputParams = new ArrayList<ValidationInputParam>();
public IFile container;

public JdfValidation() {

}

public JdfValidation(String name, String displayName, boolean isCustom) {
    this.name = name;
    this.displayName = displayName;
    this.isCustom = isCustom;
}

@XmlTransient
public IFile getContainer() {
    return container;
}

public void setContainer(IFile container) {
    this.container = container;
}

/**
 * @return the validationInputParams
 */
@XmlElement
public List<ValidationInputParam> getValidationInputParams() {
    return validationInputParams;
}

/**
 * @param validationInputParams
 *            the validationInputParams to set
 */
public void setValidationInputParams(
        List<ValidationInputParam> validationInputParams) {
    this.validationInputParams = validationInputParams;
}

@XmlAttribute
public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

@XmlAttribute
public String getDataType() {
    return dataType;
}

public void setDataType(String dataType) {
    this.dataType = dataType;
}

@XmlAttribute
public String getErrorMessage() {
    return errorMessage;
}

public void setErrorMessage(String errorMessage) {
    this.errorMessage = errorMessage;
}

@XmlElement(name = "logic")
public String getJavaValidationLogic() {
    return javaValidationLogic;
}

public void setJavaValidationLogic(String javaValidationLogic) {
    this.javaValidationLogic = javaValidationLogic;
}

@XmlAttribute
public String getDisplayName() {
    return displayName;
}

public void setDisplayName(String displayName) {
    this.displayName = displayName;
}

@XmlAttribute
public boolean isCustom() {
    return isCustom;
}

public void setCustom(boolean isCustom) {
    this.isCustom = isCustom;
}

}

Я также пробовал @XmlAccessorType (XmlAccessType.NONE), но все еще такое же исключение, выше работает с реализацией jaxb по умолчанию. Пожалуйста, помогите.

Причина: Исключение [EclipseLink-50089] (Eclipse Persistence Services — 2.5.0.v20130507-3faac2b): org.eclipse.persistence.exceptions.JAXBException Описание исключения: Интерфейс Java org.eclipse.core.resources.IFile не может быть сопоставляется JAXB, поскольку он имеет несколько сопоставляемых родительских интерфейсов. Множественное наследование не поддерживается


person vishal    schedule 01.07.2013    source источник


Ответы (2)


ОБНОВЛЕНИЕ

Мы исправили ошибку, стоящую за этой проблемой (см.: http://bugs.eclipse.org/411993). он будет доступен в потоках EclipseLink 2.5.1 и 2.6.0, начиная с 4 июля 2013 г.. Вы можете скачать ночную сборку по следующей ссылке:


ПРОБЛЕМА

Кажется, есть ошибка, когда MOXy говорят (с @XmlTransient) игнорировать свойство, если тип является интерфейсом с несколькими суперинтерфейсами.

1 суперинтерфейс — работает

public interface IFile extends IFoo  {

}

Более одного суперинтерфейса — не работает

public interface IFile extends IFoo, IBar {

}

Вы можете использовать следующую ошибку, чтобы отслеживать наш прогресс в решении этой проблемы.


ВРЕМЕННОЕ РЕШЕНИЕ

Вы можете использовать внешний документ сопоставления MOXy, чтобы переопределить супертип IFile, чтобы ваш вариант использования работал (см.: http://blog.bdoughan.com/2010/12/extending-jaxb-representing-annotations.html):

oxm.xml

<?xml version="1.0"?>
<xml-bindings
    xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/oxm"
    package-name="forum17399333">
    <java-types>
        <java-type name="IFile" super-type="java.lang.Object"/>
    </java-types>
</xml-bindings>

Демо

import java.util.*;
import javax.xml.bind.JAXBContext;
import org.eclipse.persistence.jaxb.JAXBContextProperties;

public class Demo {

    public static void main(String[] args) throws Exception {
        Map<String, Object> properties = new HashMap<String, Object>(1);
        properties.put(JAXBContextProperties.OXM_METADATA_SOURCE, "forum17399333/oxm.xml");
        JAXBContext jc = JAXBContext.newInstance(new Class[] {JdfValidation.class}, properties);
    }

}
person bdoughan    schedule 01.07.2013

Другая работа может быть -

@XmlRootElement(name = "Validator")
public class JdfValidation {


private Object container; //Cast this to appropriate type

@Transient
public Object getContainer() {
    return container;
}

public void setContainer(Object container) {
    this.container = container;
}
}

Демо-

public class Demo {

public static void main(String[] args) throws Exception {
    JAXBContext jc = JAXBContext.newInstance(JdfValidation.class);

    JdfValidation jdfValidation  = new JdfValidation();
            IFile file=getFile();
            jdfValidation.setContainer(file);
            Marshaller marshaller = jc.createMarshaller();
    marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
    marshaller.marshal(jdfValidation, System.out);
}

    }
person vishal    schedule 03.07.2013