2014-02-21 5 views
1

Добрый вечер всем. У меня проблемы с лабораторией для школы. По сути, мне пришлось создать XML-схему, запустить компилятор JAXB, а затем создать класс java для сериализации записи en employee.xml не заселяющий - используя JAXB

Так вот, что я до сих пор: Файл называется «employeeSchema.xsd»

<?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

Есть у использоваться Команда XJC для генерации классов Java из XSD? – Naren

+0

@Naren: да, после создания XSD я сделал следующее: jxc -p employeeSchema employeeSchema.xsd ... он отлично выполнил и создал OjbectFactory и связанные файлы. –

ответ

2

Вы можете сделать как этот

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(); 
      } 


    } 

} 

Если не в Ваш чек Стиль это

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); 
} 
} 

Выход: -

<?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

Ваш приветственный @EssiJoon – Naren