Java: jaxb Generircs - PullRequest
       6

Java: jaxb Generircs

1 голос
/ 16 марта 2010

Как я могу заставить jaxb привязываться к моему вектору? Кажется, я не могу заставить его связывать вектор, содержащий дженерики, так как он жалуется, что не может распознать «форму» моего класса или любой из его подтипов… »[javax.xml.bind.JAXBException: class shape.shape или любой из его Суперкласс известен в этом контексте.] "?

import java.util.Vector;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlAccessorType(XmlAccessType.NONE)
@XmlRootElement(name = "XVector")
public class XVector<shape> {

    private Vector<shape> q;

    public XVector() {}

    @XmlElement(name = "q")
    public Vector<shape> getVector() {
        return q;
    }

    public void setVector(Vector<shape> q) {
        this.q = q;
    }
}

Я получаю следующие ошибки:

javax.xml.bind.MarshalException
 - with linked exception:
[javax.xml.bind.JAXBException: class shape.Rectangle nor any of its super class is known to this context.]
        at com.sun.xml.internal.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:317)
        at com.sun.xml.internal.bind.v2.runtime.MarshallerImpl.marshal(MarshallerImpl.java:243)
        at javax.xml.bind.helpers.AbstractMarshallerImpl.marshal(AbstractMarshallerImpl.java:75)

public void saveFile(File filename) {
    try {
        FileOutputStream fout = new FileOutputStream(filename);
        objs.setVector(objVec);
        JAXBContext context = JAXBContext.newInstance(XVector.class);
        Marshaller marshaller = context.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

        marshaller.marshal(objs, fout);
        fout.close();
    } catch (JAXBException e) {
       e.printStackTrace ();
    } catch (Exception ex) {
        JOptionPane.showMessageDialog(this, ex.toString(), "Error", JOptionPane.ERROR_MESSAGE);
    }
}

1 Ответ

2 голосов
/ 16 марта 2010

Вы должны включить все обязательные классы в JAXBContext

JAXBContext context = JAXBContext.newInstance(XVector.class, shape.class);

(примечание: в соответствии с соглашением Shape следует использовать с большой буквы)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...