2014-07-14 2 views
0

JAXB를 사용하여 Java 객체를 XML로 정렬합니다. Windows OS에서 JDeveloper 11.1.1.7.0을 사용하고 있습니다. 나는 특정 자바 코드를 실행할 때마다 내가 코드에 오류 아직도 내가 ..JAXB를 사용하여 Java 객체를 XML로 마샬링

원하는 output..Please 도움말을 얻을 수 아니에요있을 것 같지에도 불구하고

"Error(1,1): file:/C:/JDeveloper/mywork/bugdashboard/Model/src/model/BugReport.xml<Line 1, Column 1>: XML-20108: (Fatal Error) Start of root element expected." 

를라는 오류 메시지가

내 자바 코드 ..

 package model; 


    import java.io.File; 

    import java.util.ArrayList; 
    import java.util.List; 
    import javax.xml.bind.JAXBContext; 
    import javax.xml.bind.JAXBException; 
    import javax.xml.bind.Marshaller; 


    public class JavaObvjecttoXml { 



    public void xmlGenerator() { 

    //super(); 
    JavaServiceFacade fcd = new JavaServiceFacade(); 
    bugvalue track, track1, track2; 
    List<ReportDto> bugReport, bugrePort1, bugrePort2; 
    List<bugvalue> reportMetaData= new ArrayList<bugvalue>();  
    ReportMetaData rmd = new ReportMetaData(); 



    try { 
     rmd.setBugreportmetadata(new ArrayList<bugvalue>()); 
     JAXBContext context = JAXBContext.newInstance(ReportMetaData.class); 

     Marshaller marshaller; 
     marshaller = context.createMarshaller(); 
     marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 

     track = new bugvalue(); 
     bugReport = fcd.getBugSeverityReport(); 
     track.setBugReport(bugReport); 
     track.setLabel("Bug by severity"); 
     track.setTile("severity"); 
     track.setChatType("PIE"); 
     track.setXAxisLabel("Label"); 
     track.setYAxisLAbel("Label Count"); 

     track1 = new bugvalue(); 
     bugrePort1 = fcd.getBugStatusReport(); 
     track1.setBugReport(bugrePort1); 
     track1.setLabel("Bug by Status"); 
     track1.setTile("status"); 
     track1.setChatType("bar"); 
     track1.setXAxisLabel("count"); 
     track1.setYAxisLAbel("Label"); 

     track2 = new bugvalue(); 
     bugrePort2 = fcd.getBugCategoryReport(); 
     track2.setBugReport(bugrePort2); 
     track2.setLabel("Bug by Category"); 
     track2.setTile("category"); 
     track2.setChatType("PIE"); 
     track2.setXAxisLabel("count"); 
     track2.setYAxisLAbel("Label"); 

     reportMetaData.add(track); 
     reportMetaData.add(track1); 
     reportMetaData.add(track2); 
     rmd.setBugreportmetadata(reportMetaData); 
     File output = new File("C:\\JDeveloper\\mywork\\bugdashboard\\Model\\src\\model\\BugReport.xml"); 
     marshaller.marshal(rmd, output); 

     } 
    catch(JAXBException e){ 
     e.printStackTrace(); 

    } 







    } 


    /** 
    * @param args 
    */ 

    public static void main(String[] args) { 

    JavaObvjecttoXml obj = new JavaObvjecttoXml(); 
     obj.xmlGenerator(); 
    } 


    } 

파일 ReportMetaData.java

package model; 

    import java.util.ArrayList; 
    import java.util.List; 
    import javax.xml.bind.annotation.XmlRootElement; 

    @ XmlRootElement(name = "ReportMetaData") 

    public class ReportMetaData { 

    private List<bugvalue> bugreportmetadata = new ArrayList<bugvalue>(); 

    public List<bugvalue> getBugreportmetadata() { 
     return bugreportmetadata; 
    } 

    */ @param bugreportmetadata 
    */ 
    public void setBugreportmetadata(List<bugvalue> bugreportmetadata) { 
     this.bugreportmetadata = bugreportmetadata; 
    } 

    public ReportMetaData() { 
    super(); 
    } 
    } 

ERR 또는 메시지 ..

위의 화면에서 볼 수 있듯이 파일 BugReport.xml

xml

가 BugReport.xml가 생성되는 파일을 촬영하지만이 비어

error

..

+0

'ReportMetaData' 클래스를 게시하십시오. – AlexR

+0

@AlexR ReportMetaData 클래스를 추가했습니다 .. – Lucy

+0

오류 메시지와 혼동 스러웠습니다. 생성 된 파일'BugReport.xml'을 보내주십시오. – AlexR

답변

0

개체를 XML로 변환 할 때 출력 할 필드에 주석을 달아야한다고 생각합니다. 잭스-B 스키마 컴파일러에 의해 생성 된 Java ™ 소스가 나는 속성 정의 개체에 다음과 같은 주석을 적용 사용 :이 경우

@XmlElement(required = true) 

, 당신의 ReportMetaData 클래스의 관련 섹션은 다음과 같다 :

@XmlElement(required = true) 
private List<bugvalue> bugreportmetadata = new ArrayList<bugvalue>(); 

JAX-B 스키마 컴파일러는 또한 @XmlRootElement 주석 전에 두 개의 추가 주석 생성

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "", propOrder = { 
    "bugreportmetadata" 
}) 

I을 n JAX-B 생성 클래스 구조, 각 클래스 정의에는 이러한 주석이 있습니다. bugvalue의

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "bugvalue", propOrder = { 
    // TODO: list the fields for BugValue as defined 
}) 

모든 소문자 정의를에 따라, 상기 bugvalue 클래스에 대한 주석이 다음과 같을 수 있도록 또한, 중첩 클래스 정의에 대한 @XmlType 주석은, 유형의 이름을 포함 JAX-B 마샬 러를 코딩 할 때 문제가 발생할 수도있다. 객체를 마샬링 할 때 JAX-B 프로세서는 동적으로 액세스하고 클래스 정의를 정의하고 요소 정의를 생성해야합니다. JAX-B 프로세서가이를 수행하기 위해 Java 명명 규칙을 사용하는 경우,이 규칙을 준수하지 않는 코드는 잠재적으로 실패 할 수 있습니다.

관련 문제