ошибки сортировки аннотированного класса с помощью moxy

Хорошо, я пробовал это несколько дней подряд, но не могу понять, что не так. Основная идея здесь заключается в том, что я пытаюсь создать спокойный веб-сервис, который будет отображать свойства двух компонентов сущностей, имеющих множество двунаправленных отношений друг с другом. Теперь я хочу использовать moxy-реализацию JAXB, чтобы воспользоваться аннотацией @XmlInverseReference для поддержания ссылочной целостности, но продолжаю придумывать исключения. ниже приведено исключение из моих классов. Я использую стеклянную рыбу 3.1.1 и moxy eclipselink 2.3.0.

Passenger Class:

package kharesoft.sita;

import java.io.Serializable;
import java.util.Date;
import java.util.List;
import java.util.Set;
import javax.persistence.*;
import javax.xml.bind.annotation.*;


@XmlRootElement
@XmlType(propOrder = {"id", "firstName", "lastName", "boardingNo", "seatNo", "flightNo", "dateOfFlight", "bags"})
@Entity
@NamedQuery(name = "findPaxByBagTag", query = "select p from Passenger p,IN (p.bags) b where b.bagTagNo=:bagTagNo")
@XmlAccessorType(XmlAccessType.FIELD)
public class Passenger implements Serializable {

    @XmlElement
    private String firstName;
    @XmlElement
    private String lastName;
    @XmlElement
    private String boardingNo;
    @XmlElement
    private String seatNo;
    @XmlElement
    private String flightNo;
    @XmlElement
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date dateOfFlight;
    @XmlElementWrapper  
    @XmlElements({
    @XmlElement(name = "bagtag")})
    @OneToMany(mappedBy = "passenger")
    private Set<Bag> bags;
    private static final long serialVersionUID = 1L;
    @XmlElement
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Set<Bag> getBags() {
        return bags;
    }

    public void setBags(Set<Bag> bags) {
        this.bags = bags;
    }

    //Remaining getters and setters not shown

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Passenger)) {
            return false;
        }
        Passenger other = (Passenger) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "kharesoft.sita.Passenger[ id=" + id + " ]";
    }
}


Bag Class:


package kharesoft.sita;

import java.io.Serializable;
import javax.persistence.*;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import org.eclipse.persistence.oxm.annotations.XmlInverseReference;


@XmlRootElement
@Entity
@NamedQuery(name = "findBagWithTagNo", query = "select b from Bag b where b.bagTagNo=:bagTagNo")
@XmlAccessorType(XmlAccessType.FIELD)
public class Bag implements Serializable {

    private static final long serialVersionUID = 1L;
    @XmlElement
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    @XmlElement
    private String bagTagNo;
    @XmlElement
    @ManyToOne
    private Passenger passenger;


    //other getters and setters not shown

    @XmlInverseReference(mappedBy = "bags")
    public Passenger getPassenger() {
        return passenger;
    }

    public void setPassenger(Passenger passenger) {
        this.passenger = passenger;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Bag)) {
            return false;
        }
        Bag other = (Bag) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {        
        return bagTagNo;
    }
}

Исключение:

Элементы вашего экрана скрыты от просмотра. Нажмите Esc или переместите указатель в центр экрана, чтобы вернуться в Почту. Нажмите Esc или переместите указатель сюда, чтобы вернуться в Mail.от on  от WineSo свежее и такое чистое. ВсеФотоЦвет

Поскольку вы указали

Passenger Class:

package kharesoft.sita;

import java.io.Serializable;
import java.util.Date;
import java.util.List;
import java.util.Set;
import javax.persistence.*;
import javax.xml.bind.annotation.*;


@XmlRootElement
@XmlType(propOrder = {"id", "firstName", "lastName", "boardingNo", "seatNo", "flightNo", "dateOfFlight", "bags"})
@Entity
@NamedQuery(name = "findPaxByBagTag", query = "select p from Passenger p,IN (p.bags) b where b.bagTagNo=:bagTagNo")
@XmlAccessorType(XmlAccessType.FIELD)
public class Passenger implements Serializable {

    @XmlElement
    private String firstName;
    @XmlElement
    private String lastName;
    @XmlElement
    private String boardingNo;
    @XmlElement
    private String seatNo;
    @XmlElement
    private String flightNo;
    @XmlElement
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date dateOfFlight;
    @XmlElementWrapper  
    @XmlElements({
    @XmlElement(name = "bagtag")})
    @OneToMany(mappedBy = "passenger")
    private Set<Bag> bags;
    private static final long serialVersionUID = 1L;
    @XmlElement
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Set<Bag> getBags() {
        return bags;
    }

    public void setBags(Set<Bag> bags) {
        this.bags = bags;
    }

    //Remaining getters and setters not shown

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Passenger)) {
            return false;
        }
        Passenger other = (Passenger) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "kharesoft.sita.Passenger[ id=" + id + " ]";
    }
}


Bag Class:


package kharesoft.sita;

import java.io.Serializable;
import javax.persistence.*;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import org.eclipse.persistence.oxm.annotations.XmlInverseReference;


@XmlRootElement
@Entity
@NamedQuery(name = "findBagWithTagNo", query = "select b from Bag b where b.bagTagNo=:bagTagNo")
@XmlAccessorType(XmlAccessType.FIELD)
public class Bag implements Serializable {

    private static final long serialVersionUID = 1L;
    @XmlElement
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    @XmlElement
    private String bagTagNo;
    @XmlElement
    @ManyToOne
    private Passenger passenger;


    //other getters and setters not shown

    @XmlInverseReference(mappedBy = "bags")
    public Passenger getPassenger() {
        return passenger;
    }

    public void setPassenger(Passenger passenger) {
        this.passenger = passenger;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Bag)) {
            return false;
        }
        Bag other = (Bag) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {        
        return bagTagNo;
    }
}
в классе _2_, вы должны переместить аннотацию _3_ в поле. Поскольку оно находится в свойстве, MOXy думает, что вы хотите отобразить и поле, и свойство, и жалуется, потому что они оба имеют одно и то же имя.


person kharesoft    schedule 08.02.2014    source источник


Ответы (1)


Спасибо Дуган. Я уже сделал это, но получил исключение unsupportedProperty.

person bdoughan    schedule 08.02.2014
comment
СЕРЬЕЗНЫЙ: сопоставленное исключение с ответом: 500 (внутренняя ошибка сервера) javax.ws.rs.WebApplicationException: javax.xml.bind.JAXBException: описание исключения: повторяющееся свойство с именем [passenger] найдено в классе [kharesoft.sita.Bag] — с связанное исключение: [Исключение [EclipseLink-50072] (Eclipse Persistence Services — 2.3.0.v20110604-r9504): org.eclipse.persistence.exceptions.JAXBException Описание исключения: повторяющееся свойство с именем [passenger] найдено в классе [kharesoft.sita. Bag]] на com.sun.jersey.core.provider.jaxb.AbstractListElementProvider.writeTo(AbstractListElementProvider.java:183) на com.sun.jersey.spi.container.ContainerResponse.write(ContainerResponse.java:306) на com. sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1437) на com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1349) на com.sun.jersey. server.impl.application.WebApplicationImpl.handleRequest(WebApplication tionImpl.java:1339) по адресу com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:416) по адресу com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java: 537) в com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:699) в javax.servlet.http.HttpServlet.service(HttpServlet.java:847) в org.apache.catalina.core .StandardWrapper.service(StandardWrapper.java:1539) по адресу org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281) по адресу org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) по адресу org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655) в org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595) в com.sun.enterprise.web.WebPipeline.invoke( WebPipeline.java:98) в com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:91) в org.apache .catalina.core.StandardHostValve.invoke(StandardHostValve.java:162) в org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:330) в org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java :231) в com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:174) в com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:828) в com.sun. grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:725) на com.sun.grizzly.http. ProcessorTask.process(ProcessorTask.java:1019) на com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225) на com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137) на com.sun .grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104) на com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90) на com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79) на com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54) в com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59) в com.sun.grizzly.ContextTask.run(ContextTask.java:71) на com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532) на com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513) на java.lang.Thread.run (Thread.java:722) Причина: javax.xml.bind.JAXBException: Описание исключения: Повторяющееся свойство с именем [passenger] найдено в классе [kharesoft.sita.Bag] — со связанным исключением: [Exception [EclipseLink-50072] (Eclipse Persistence Services — 2.3.0.v20110604-r9504): org.eclipse.persistence.exceptions. Описание исключения JAXBException: повторяющееся свойство с именем [passenger] найдено в классе [kharesoft.sita.Bag]] в org.eclipse.persistence.jaxb.JAXBContext$TypeMappingInfoInput.createContextState(JAXBContext.java:825) в org.eclipse.persistence.jaxb .JAXBContext.(JAXBContext.java:136) в org.eclipse.persistence.jaxb.JAXBContextFactory.createContext(JAXBContextFactory.java:142) в org.eclipse.persistence.jaxb.JAXBContextFactory.createContext(JAXBContextFactory.java:129) в org. .eclipse.persistence.jaxb.JAXBContextFactory.createContext(JAXBContextFactory.java:93) в org.eclipse.persistence.jaxb.JAXBContextFactory.createContext(JAXBContextFactory.java:83) в sun.reflect.NativeMethodAccessorImpl.invoke0(собственный метод) на солнце .reflect.NativeMeth odAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) в sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) в java.lang.reflect.Method.invoke(Method.java:601) в javax.xml.bind.ContextFinder .newInstance(ContextFinder.java:263) в javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:250) в javax.xml.bind.ContextFinder.find(ContextFinder.java:400) в javax.xml.bind. JAXBContext.newInstance(JAXBContext.java:652) в javax.xml.bind. JAXBContext.newInstance(JAXBContext.java:599) в com.sun.jersey.core.provider.jaxb.AbstractJAXBProvider.getStoredJAXBContext(AbstractJAXBProvider.java:189) в com.sun.jersey.core.provider.jaxb.AbstractJAXBProvider.getJAXBContext( AbstractJAXBProvider.java:182) по адресу com.sun.jersey.core.provider.jaxb.AbstractJAXBProvider.getMarshaller(AbstractJAXBProvider.java:160) по адресу com.sun.jersey.core.provider.jaxb.AbstractJAXBProvider.getMarshaller(AbstractJAXBProvider.java: 139) в com.sun.jersey.core.provider.jaxb.AbstractListElementProvider.writeTo(AbstractListElementProvider.java:175) ... еще 33 Причина: Исключение [EclipseLink-50072] (Eclipse Persistence Services — 2.3.0.v20110604- r9504): org.eclipse.persistence.exceptions.JAXBException Описание исключения: повторяющееся свойство с именем [passenger] найдено в классе [kharesoft.sita.Bag] в org.eclipse.persistence.exceptions.JAXBException.duplicatePropertyName(JAXBException.java:943) на org.eclipse.persistence.jaxb.compile r.TypeInfo.addProperty(TypeInfo.java:265) в org.eclipse.persistence.jaxb.compiler.TypeInfo.setProperties(TypeInfo.java:292) в org.eclipse.persistence.jaxb.compiler.AnnotationsProcessor.buildTypeInfo(AnnotationsProcessor. java:677) в org.eclipse.persistence.jaxb.compiler.AnnotationsProcessor.postBuildTypeInfo(AnnotationsProcessor.java:591) в org.eclipse.persistence.jaxb.compiler.AnnotationsProcessor.buildNewTypeInfo(AnnotationsProcessor.java:4050) в org.eclipse .persistence.jaxb.compiler.AnnotationsProcessor.processPropertyTypes(AnnotationsProcessor.java:858) в org.eclipse.persistence.jaxb.compiler.AnnotationsProcessor.processClassesAndProperties(AnnotationsProcessor.java:233) в org.eclipse.persistence.jaxb.compiler.Generator .(Generator.java:147) в org.eclipse.persistence.jaxb.JAXBContext$TypeMappingInfoInput.createContextState(JAXBContext.java:822) ... еще 52 - person kharesoft; 09.02.2014