2014-02-21 4 views
1

안녕하세요. 학교 실험실에서 문제가 좀 있습니다. 본질적으로 XML 스키마를 작성하고 JAXB 컴파일러를 실행 한 다음 Java 클래스를 작성하여 직원 레코드를 직렬화해야했습니다. "employeeSchema.xsd"xml이 채워지지 않습니다. - JAXB를 사용합니다.

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
     xmlns:jxb="http://java.sun.com/xml/ns/jaxb" 
     jxb:version="2.0"> 

<xs:element name="employee" type="employeeType"/> 

<xs:complexType name="jobListType"> 
    <xs:sequence> 
     <xs:element name="job_id" type="xs:positiveInteger"/> 
     <xs:element name="job_title" type="xs:string"/> 
     <xs:element name="min_salary" type="xs:positiveInteger"/> 
     <xs:element name="max_salary" type="xs:positiveInteger"/> 
    </xs:sequence> 
</xs:complexType> 

<xs:complexType name="departmentType"> 
    <xs:sequence> 
     <xs:element name="department_id" type="xs:positiveInteger"/> 
     <xs:element name="department_name" type="xs:string"/> 
     <xs:element name="manager_id" type="xs:positiveInteger"/> 
     <xs:element name="location_id" type="xs:positiveInteger"/> 
    </xs:sequence> 
</xs:complexType> 

<xs:complexType name="employeeType"> 
    <xs:sequence> 
     <xs:element name="employee_id" type="xs:positiveInteger"/> 
     <xs:element name="first_name" type="xs:string"/> 
     <xs:element name="last_name" type="xs:string"/> 
     <xs:element name="email" type="xs:string"/> 
     <xs:element name="phone_number" type="xs:string"/> 
     <xs:element name="hire_date" type="xs:date"/> 
     <xs:element name="job" type="jobListType"/> 
     <xs:element name="salary" type="xs:positiveInteger"/>  
     <xs:element name="commission_pct" type="xs:decimal"/> 
     <xs:element name="manager_id" type="xs:positiveInteger"/> 
     <xs:element name="department" type="departmentType"/>    
    </xs:sequence> 
</xs:complexType> 

</xs:schema> 

라는 파일 그리고 나는 그것이 JAXB를 사용하여 준수하면, 나는 "employee.java"

package employeeSchema; 

import java.text.DateFormat; 
import java.text.SimpleDateFormat; 
import java.util.*; 
import javax.xml.bind.*; 
import javax.xml.datatype.DatatypeFactory; 
import javax.xml.datatype.XMLGregorianCalendar; 
import java.math.*; 

public class employee { 

private ObjectFactory of; 
private EmployeeType myEmployee; 

public employee(){ 
    of = new ObjectFactory(); 
    myEmployee = of.createEmployeeType(); 
} 

public void make(BigInteger empID, String firstName, String lastName, String email, String phoneNumber, 
     Date hireDate, JobListType jobID, BigInteger salary, BigDecimal commPct, 
     BigInteger managerID/*, DepartmentType departmentID*/){ 

    try{ 
     GregorianCalendar gcal = new GregorianCalendar(); 
     gcal.setTime(hireDate); 
     XMLGregorianCalendar xgcal = DatatypeFactory.newInstance().newXMLGregorianCalendar(gcal); 


     EmployeeType emp = of.createEmployeeType(); 

     emp.setEmployeeId(empID); 
     emp.setFirstName(firstName); 
     emp.setLastName(lastName); 
     emp.setEmail(email); 
     emp.setPhoneNumber(phoneNumber); 
     emp.setHireDate(xgcal); 
     emp.setJob(jobID); 
     emp.setSalary(salary); 
     emp.setCommissionPct(commPct); 
     emp.setManagerId(managerID); 

    } 

    catch (Exception e){ 
    } 
} 

public void marshal() { 
    try { 
     JAXBElement<EmployeeType> em = 
      of.createEmployee(myEmployee); 
     JAXBContext jc = JAXBContext.newInstance("employeeSchema"); 
     Marshaller m = jc.createMarshaller(); 
     m.marshal(em, System.out); 
    } catch(JAXBException jbe){ 
     // ... 
    } 
} 


public static void main(String args[]) 
{ 
    int employeeID = 123456;   
    BigInteger empID = BigInteger.valueOf(employeeID); 


    String firstName = "Ehssan"; 
    String lastName = "Tehrani"; 
    String email = "[email protected]"; 

    Date hireDate = null; 
    try{ 
     DateFormat df=new SimpleDateFormat("dd/MM/yyyy"); 
     hireDate=df.parse("20/02/2014"); 
    } 

    catch (Exception e){ 
    } 


    String phoneNumber = "647-588-3774"; 

    JobListType jList = new JobListType(); 

    int theJobId = 12345; 
    BigInteger jID = BigInteger.valueOf(theJobId); 
    jList.setJobId(jID); 

    jList.setJobTitle("Java Developer"); 

    int theMinSal = 50000; 
    BigInteger jMinSal = BigInteger.valueOf(theMinSal); 
    jList.setMinSalary(jMinSal); 

    int theMaxSal = 150000; 
    BigInteger jMaxSal = BigInteger.valueOf(theMaxSal); 
    jList.setMinSalary(jMaxSal); 

    int theSalary = 90000; 
    BigInteger salary = BigInteger.valueOf(theSalary); 

    BigDecimal commPct = new BigDecimal(5.0); 

    int theManagerID = 12345; 
    BigInteger managerID = BigInteger.valueOf(theManagerID); 

//DepartmentType departmentID 
    //setDepartmentID 

    employee myEmp = new employee(); 

    myEmp.make(empID, firstName, lastName, email, phoneNumber, hireDate, jList, salary, commPct, managerID); 

    myEmp.marshal(); 
} 
} 
이라는 클래스를 생성 : 그래서 여기

는 내가 지금까지 무엇을 가지고 나는 employee.java을 실행할 때

는하지만, 내 출력은 다음과 같습니다 :

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><employee/> 

을하지만 목적은 표시하는 것입니다 내가 본부에서 정의한 직원. 모든 종류의 조언이나 도움이 크게 감사하겠습니다.

대단히 감사합니다.

건배

+0

유 사용한 적이 XSD에서 Java 클래스를 생성하는 XJC 명령? – Naren

+0

@Naren : XSD를 작성한 후에 예 jxc -p employeeSchema employeeSchema.xsd ... OjbectFactory 및 관련 파일을 작성하여 작성했습니다. –

답변

2

하지 여러분 스타일에 확인이

package generated; 

import java.text.DateFormat; 
import java.text.SimpleDateFormat; 
import java.util.*; 
import javax.xml.bind.*; 
import javax.xml.datatype.DatatypeFactory; 
import javax.xml.datatype.XMLGregorianCalendar; 
import java.math.*; 

public class employee { 

private ObjectFactory of; 
private EmployeeType myEmployee; 

public employee(){ 
    of = new ObjectFactory(); 
    myEmployee = of.createEmployeeType(); 
} 

public EmployeeType make(BigInteger empID, String firstName, String lastName, String email, String phoneNumber, 
     Date hireDate, JobListType jobID, BigInteger salary, BigDecimal commPct, 
     BigInteger managerID/*, DepartmentType departmentID*/){ 
    EmployeeType emp=null; 
    try{ 
     GregorianCalendar gcal = new GregorianCalendar(); 
     gcal.setTime(hireDate); 
     XMLGregorianCalendar xgcal = DatatypeFactory.newInstance().newXMLGregorianCalendar(gcal); 


     emp = of.createEmployeeType(); 

     emp.setEmployeeId(empID); 
     emp.setFirstName(firstName); 
     emp.setLastName(lastName); 
     emp.setEmail(email); 
     emp.setPhoneNumber(phoneNumber); 
     emp.setHireDate(xgcal); 
     emp.setJob(jobID); 
     emp.setSalary(salary); 
     emp.setCommissionPct(commPct); 
     emp.setManagerId(managerID); 


     DepartmentType departmentType=new DepartmentType(); 
     int theDepId = 1001; 
     BigInteger theDepIdb = BigInteger.valueOf(theDepId); 
     departmentType.setDepartmentId(theDepIdb); 
     int theLocId = 1001; 
     BigInteger theLocIdb = BigInteger.valueOf(theLocId); 
     departmentType.setLocationId(theLocIdb); 
     int theMagId = 1001; 
     BigInteger theMagIdb = BigInteger.valueOf(theDepId); 
     departmentType.setManagerId(theMagIdb); 
     departmentType.setDepartmentName("tsetDepmName"); 

     emp.setDepartment(departmentType); 

    } 

    catch (Exception e){ 
    } 

    return emp; 
} 

public void marshal(JAXBElement<EmployeeType> employeeType) { 
    try { 


     JAXBContext jaxbContext = JAXBContext.newInstance(EmployeeType.class); 
     Marshaller jaxbMarshaller = jaxbContext.createMarshaller(); 

     // output pretty printed 
     jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 


     jaxbMarshaller.marshal(employeeType, System.out); 
    } catch(JAXBException jbe){ 
     // ... 
    } 
} 


public static void main(String args[]) 
{ 
    int employeeID = 123456;   
    BigInteger empID = BigInteger.valueOf(employeeID); 


    String firstName = "Ehssan"; 
    String lastName = "Tehrani"; 
    String email = "[email protected]"; 

    Date hireDate = null; 
    try{ 
     DateFormat df=new SimpleDateFormat("dd/MM/yyyy"); 
     hireDate=df.parse("20/02/2014"); 
    } 

    catch (Exception e){ 
    } 


    String phoneNumber = "647-588-3774"; 

    JobListType jList = new JobListType(); 

    int theJobId = 12345; 
    BigInteger jID = BigInteger.valueOf(theJobId); 
    jList.setJobId(jID); 

    jList.setJobTitle("Java Developer"); 

    int theMinSal = 50000; 
    BigInteger jMinSal = BigInteger.valueOf(theMinSal); 
    jList.setMinSalary(jMinSal); 

    int theMaxSal = 150000; 
    BigInteger jMaxSal = BigInteger.valueOf(theMaxSal); 
    jList.setMinSalary(jMaxSal); 

    int theSalary = 90000; 
    BigInteger salary = BigInteger.valueOf(theSalary); 

    BigDecimal commPct = new BigDecimal(5.0); 

    int theManagerID = 12345; 
    BigInteger managerID = BigInteger.valueOf(theManagerID); 

//DepartmentType departmentID 
    //setDepartmentID 

    employee myEmp = new employee(); 

    EmployeeType temp=myEmp.make(empID, firstName, lastName, email, phoneNumber, hireDate, jList, salary, commPct, managerID); 

    ObjectFactory factory=new ObjectFactory(); 
    JAXBElement<EmployeeType> test=factory.createEmployee(temp); 
    myEmp.marshal(test); 
} 
} 

출력 인 경우 당신이

package generated; 

import java.math.BigDecimal; 
import java.math.BigInteger; 
import java.text.DateFormat; 
import java.text.SimpleDateFormat; 
import java.util.Date; 
import java.util.GregorianCalendar; 

import javax.xml.bind.JAXBContext; 
import javax.xml.bind.JAXBElement; 
import javax.xml.bind.JAXBException; 
import javax.xml.bind.Marshaller; 
import javax.xml.datatype.DatatypeConfigurationException; 
import javax.xml.datatype.DatatypeFactory; 
import javax.xml.datatype.XMLGregorianCalendar; 

public class Test { 

    public static void main(String[] args) throws DatatypeConfigurationException { 


     int employeeID = 123456;   
     BigInteger empID = BigInteger.valueOf(employeeID); 


     String firstName = "Ehssan"; 
     String lastName = "Tehrani"; 
     String email = "[email protected]"; 

     Date hireDate = null; 
     try{ 
      DateFormat df=new SimpleDateFormat("dd/MM/yyyy"); 
      hireDate=df.parse("20/02/2014"); 
     } 

     catch (Exception e){ 
     } 


     String phoneNumber = "647-588-3774"; 

     JobListType jList = new JobListType(); 

     int theJobId = 12345; 
     BigInteger jID = BigInteger.valueOf(theJobId); 
     jList.setJobId(jID); 

     jList.setJobTitle("Java Developer"); 

     int theMinSal = 50000; 
     BigInteger jMinSal = BigInteger.valueOf(theMinSal); 
     jList.setMinSalary(jMinSal); 

     int theMaxSal = 150000; 
     BigInteger jMaxSal = BigInteger.valueOf(theMaxSal); 
     jList.setMinSalary(jMaxSal); 

     int theSalary = 90000; 
     BigInteger salary = BigInteger.valueOf(theSalary); 

     BigDecimal commPct = new BigDecimal(5.0); 

     int theManagerID = 12345; 
     BigInteger managerID = BigInteger.valueOf(theManagerID); 

     DepartmentType departmentType=new DepartmentType(); 
     int theDepId = 1001; 
     BigInteger theDepIdb = BigInteger.valueOf(theDepId); 
     departmentType.setDepartmentId(theDepIdb); 
     int theLocId = 1001; 
     BigInteger theLocIdb = BigInteger.valueOf(theLocId); 
     departmentType.setLocationId(theLocIdb); 
     int theMagId = 1001; 
     BigInteger theMagIdb = BigInteger.valueOf(theDepId); 
     departmentType.setManagerId(theMagIdb); 
     departmentType.setDepartmentName("tsetDepmName"); 

    //DepartmentType departmentID 
     //setDepartmentID 
     GregorianCalendar gcal = new GregorianCalendar(); 
     gcal.setTime(hireDate); 
     XMLGregorianCalendar xgcal = DatatypeFactory.newInstance().newXMLGregorianCalendar(gcal); 
     ObjectFactory factory=new ObjectFactory(); 

     EmployeeType emp=factory.createEmployeeType(); 
     emp.setJob(jList); 
     emp.setDepartment(departmentType); 

     emp.setEmployeeId(empID); 
     emp.setFirstName(firstName); 
     emp.setLastName(lastName); 
     emp.setEmail(email); 
     emp.setPhoneNumber(phoneNumber); 
     emp.setHireDate(xgcal); 

     emp.setSalary(salary); 
     emp.setCommissionPct(commPct); 
     emp.setManagerId(managerID); 
     JAXBElement<EmployeeType> temp=factory.createEmployee(emp); 

     try { 


     JAXBContext jaxbContext = JAXBContext.newInstance(EmployeeType.class); 
     Marshaller jaxbMarshaller = jaxbContext.createMarshaller(); 

     // output pretty printed 
     jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 


     jaxbMarshaller.marshal(temp, System.out); 

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


    } 

} 

같이 할 수 있습니다 : -

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<employee> 
    <employee_id>123456</employee_id> 
    <first_name>Ehssan</first_name> 
    <last_name>Tehrani</last_name> 
    <email>[email protected]</email> 
    <phone_number>647-588-3774</phone_number> 
    <hire_date>2014-02-20+05:30</hire_date> 
    <job> 
     <job_id>12345</job_id> 
     <job_title>Java Developer</job_title> 
     <min_salary>150000</min_salary> 
    </job> 
    <salary>90000</salary> 
    <commission_pct>5</commission_pct> 
    <manager_id>12345</manager_id> 
    <department> 
     <department_id>1001</department_id> 
     <department_name>tsetDepmName</department_name> 
     <manager_id>1001</manager_id> 
     <location_id>1001</location_id> 
    </department> 
</employee> 
+0

@Naren, 감사합니다. 강사가 우리에게 제공 한 템플릿 (사용법을 게시 한 방식)을 사용하기를 원합니다. 예제가 작동하지만, 어떤 이유로 든 내 기능이 작동하지 않습니다. 연결을 유지하려고합니다. 멀리 ... 귀하의 의견에 진심으로 감사드립니다. 나는 그들을 더 잘 이해하기 위해 나의 관행에 당신의 방법을 시도 할 것입니다. 감사합니다. –

+0

환영합니다 @ 에시 준 – Naren

관련 문제