2013-11-13 3 views
2

У меня есть этот файл:Как установить pojo как moxy?

@XmlRootElement(name="Projects") 
public class Projects extends ResponseWrapper { 
    private ArrayList<Project> project; 
    @XmlElement(name="Project") 
    public ArrayList<Project> getProject() { 
     return project; 
    } 

    public void setProject(List<Project> list) { 
     this.project = (ArrayList<Project>)list; 
    } 

} 

Проект имеет @XMLInverseReference

System.out.println(JAXBContext.newInstance(Projects.class).getClass()); //error 

Exception Description: The method [setProject] or [getProject] is not defined in the object [com.tps.www.data.Projects]. 

При печати из Project.class:

System.out.println(JAXBContext.newInstance(Project.class).getClass()); //OK 
20:27:01,118 INFO [stdout] (http-localhost-127.0.0.1-8180-1) class org.eclipse.persistence.jaxb.JAXBContext 



package com.tps.www.data; 

import java.io.Serializable; 
import java.util.Date; 
import java.util.List; 

import javax.persistence.CascadeType; 
import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.FetchType; 
import javax.persistence.GeneratedValue; 
import javax.persistence.Id; 
import javax.persistence.JoinColumn; 
import javax.persistence.OneToMany; 
import javax.persistence.OneToOne; 
import javax.persistence.Table; 
import javax.xml.bind.annotation.XmlElement; 
import javax.xml.bind.annotation.XmlRootElement; 

import org.eclipse.persistence.oxm.annotations.XmlInverseReference; 
import org.hibernate.annotations.LazyCollection; 
import org.hibernate.annotations.LazyCollectionOption; 
import org.hibernate.annotations.NamedQueries; 
import org.hibernate.annotations.NamedQuery; 

import com.tps.www.util.ResponseWrapper; 

@NamedQueries({ 
@NamedQuery(name = "findProjectById", query = "select p from Project p where p.projectCode = ?"), 
@NamedQuery(name="findAllProject",query="from Project p")}) 

@Entity 
@Table(name = "Project") 
@XmlRootElement(name = "Project",namespace="http://www.w3.org/2001/XMLSchema-instance") 
public class Project extends ResponseWrapper implements Serializable { 
    @Id 
    @GeneratedValue 
    @Column(name = "Project_Code") 
    private String projectCode; 

    @Column(name = "Project_Name") 
    private String projectName; 
    @Column(name = "Starting_Date") 
    private Date startingDate; 
    @Column(name = "Expected_End_Date") 
    private Date expectedEndDate; 
    @Column(name = "Created_By") 
    private String createdBy; 

    @LazyCollection(LazyCollectionOption.FALSE) 
    @OneToOne(mappedBy = "project",fetch = FetchType.EAGER,cascade=CascadeType.ALL) 
    private Contract contract; 

    @OneToOne(fetch = FetchType.EAGER) 
    @JoinColumn(name = "Service_Id") 
    private Service service; 

    @OneToOne(mappedBy = "project",fetch = FetchType.EAGER,cascade=CascadeType.ALL) 
    private BudgetRequestInfo budgetRequestInfo; 
    @LazyCollection(LazyCollectionOption.FALSE) 
    @OneToMany(mappedBy = "project",cascade=CascadeType.ALL) 
    private List<MaterialRequestAssignment> materialRequestAssignment; 

    @XmlElement(name = "Project_Code", nillable=true) 
    public String getProjectCode() { 
     return projectCode; 
    } 

    public void setProjectCode(String projectCode) { 
     this.projectCode = projectCode; 
    } 

    @XmlElement(name = "Project_Name", nillable=true) 
    public String getProjectName() { 
     return projectName; 
    } 

    public void setProjectName(String projectName) { 
     this.projectName = projectName; 
    } 

    @XmlElement(name = "Starting_Date", nillable=true) 
    public Date getStartingDate() { 
     return startingDate; 
    } 

    public void setStartingDate(Date startingDate) { 
     this.startingDate = startingDate; 
    } 

    @XmlElement(name = "Expected_End_Date", nillable=true) 
    public Date getExpectedEndDate() { 
     return expectedEndDate; 
    } 

    public void setExpectedEndDate(Date expectedEndDate) { 
     this.expectedEndDate = expectedEndDate; 
    } 

    @XmlElement(name = "Created_By", nillable=true) 
    public String getCreatedBy() { 
     return createdBy; 
    } 

    public void setCreatedBy(String createdBy) { 
     this.createdBy = createdBy; 
    } 

    @XmlElement(name = "Contract", nillable=true) 
    @XmlInverseReference(mappedBy="project") 
    public Contract getContract() { 
     return contract; 
    } 

    public void setContract(Contract contract) { 
     this.contract = contract; 
    } 

    @XmlElement(name = "Service_Id", nillable=true) 
    @XmlInverseReference(mappedBy="project") 
    public Service getService() { 
     return service; 
    } 

    public void setService(Service service) { 
     this.service = service; 
    } 

    @XmlElement(name = "Budget_Request_Info", nillable=true) 
    @XmlInverseReference(mappedBy="project") 
    public BudgetRequestInfo getBudgetRequestInfo() { 
     return budgetRequestInfo; 
    } 

    public void setBudgetRequestInfo(BudgetRequestInfo budgetRequestInfo) { 
     this.budgetRequestInfo = budgetRequestInfo; 
    } 
    @XmlElement(name = "Material_Request_Assignment", nillable=true) 
    @XmlInverseReference(mappedBy="project") 
    public List<MaterialRequestAssignment> getMaterialRequestAssignment() { 
     return materialRequestAssignment; 
    } 

    public void setMaterialRequestAssignment(
      List<MaterialRequestAssignment> materialRequestAssignment) { 
     this.materialRequestAssignment = materialRequestAssignment; 
    } 




} 
+2

Вы можете разместить источник ' project'? –

+0

@BlaiseDoughan только что опубликовал проект, он также имеет несколько зависимостей – mel3kings

ответ

0

Примечание: Я EclipseLink JAXB (MOXy) свинца и членом группы экспертов JAXB (JSR-22).

Я не смог воспроизвести проблему, которую вы видите. Не могли бы вы предоставить дополнительную информацию, чтобы я мог воспроизвести проблему? Вот то, что я пробовал:

  1. Удалены JPA & Hibernate аннотации от Project класса, чтобы получить его для компиляции.
  2. Создан пустой ResponseWrapper класс для Project и Projects для продления.
  3. Созданы классы для каждого класса, на которые ссылается Project.
  4. Когда свойство помечается @XmlInverseReference добавил project свойство на соответствующий тип:

    public class Contract { 
    
        private Project project; 
    
        public Project getProject() { 
         return project; 
        } 
    
        public void setProject(Project project) { 
         this.project = project; 
        } 
    
    } 
    
  5. Побежал следующий демонстрационный код:

    import java.io.File; 
    import javax.xml.bind.*; 
    
    public class Demo { 
    
        public static void main(String[] args) throws Exception { 
         JAXBContext jc = JAXBContext.newInstance(Projects.class); 
    
         Unmarshaller unmarshaller = jc.createUnmarshaller(); 
         File xml = new File("src/forum19953731/input.xml"); 
         Projects projects = (Projects) unmarshaller.unmarshal(xml); 
        } 
    
    } 
    
Смежные вопросы