Castor (ram)

Hjul
Stabil frisättning
1.4.1 / 15 maj 2016 ; för 6 år sedan ( 2016-05-15 )
Skrivet i Java
Operativ system Cross-platform ( JVM )
Plattform Java Virtual Machine
Typ Databindning
Licens Apache 2.0
Hemsida castor-data-binding .github .io /castor /

Castor är ett databindningsramverk för Java med vissa funktioner som Java till Java-till-XML-bindning, Java-till-SQL-beständighet, sökvägar mellan Java-objekt, XML- dokument, relationstabeller, etc. Castor är ett av de äldsta databindningsprojekten .

Process flöde

Grundläggande processflöden inkluderar klassgenerering, rangering , unmarshalling, etc. Marshalling-ramverket inkluderar en uppsättning ClassDescriptors och FieldDescription för att beskriva objekt.

Klassgenerering

Klassgenerering liknar JAXB och Zeus. Castor stöder XML Schema istället för DTDs (DTDs stöds inte av Castor).

Unmarshalling och rangering

Unmarshalling och marshalling behandlas med marshall() respektive unmarshall() metoder. Under rangering utförs konverteringsprocess från Java till XML, och under unmarshalling utförs konverteringsprocess från XML till Java. Mappningsfiler är motsvarigheten till ett bindningsschema, som gör det möjligt att omvandla namn från XML till Java och vice versa.

Ytterligare egenskaper

Castor erbjuder några ytterligare funktioner som inte finns i JAXB. Ytterligare funktioner inkluderar:

  • Databas- och katalogservermappningar - mappning mellan databaser och katalogservrar till Java
  • JDO - Caster stöder Java Data Objects .

Kodprover

Koden för rangering kan se ut som följer:

 
 
 
 
 

 
 

 
   
    
      
            
        
            
        
            
        
        
        
        
        
            
        
        
        
            
        
            
        
        
        
        
        
        
        
        
        
        
         
    
         
         
                
                
 
                    
                
            
               
                  0 

            
            
            
            
        
       
 paket  javajaxb  ;  importera  java.io.File  ;  importera  java.io.FileReader  ;  importera  java.io.FileWriter  ;  importera  java.io.IOException  ;  // Castor  import  org.exolab.castor.xml.MarshalException  ;  import  org.exolab.castor.xml.ValidationException  ;  // Genererade hr.xml-klasser  importerar  javajaxb.generated.hr.*  ;  public  class  EmployeeLister  {  // Befintliga metoder  public  void  modify  ()  kastar  IOException  ,  MarshalException  ,  ValidationException  {  // Lägg till en ny anställd  Anställd  anställd  =  ny  anställd  ();  anställd  .  setName  (  "Ben Rochester"  );  Adressadress  =  ny  adress  ()  ;  adress  .  setStreet1  (  "708 Teakwood Drive" )  ;  adress  .  setCity  (  "Flower Mound"  );  adress  .  setState  (  "TX"  );  adress  .  setZipCode  (  "75028"  );  anställd  .  addAddress  (  adress  );  Organisation  organisation  =  ny  organisation  ();  organisation  .  setId  (  43  );  organisation  .  setName  (  "Tekniska tjänster"  );  anställd  .  setOrganization  (  organisation  );  Office  office  =  new  Office  ();  kontor  .  setId  (  241  );  Adress  officeAddress  =  ny  adress  ();  kontorsadress  .  setStreet1  (  "1202 Business Square"  );  kontorsadress  .  setStreet2  (  "Suite 302"  );  kontorsadress  .  setCity  (  "Dallas"  );  kontorsadress  .  setState  (  "TX"  );  kontorsadress  .  setZipCode  (  "75218-8921"  );  kontor  .  setAddress  (  officeAddress  );  anställd  .  setOffice  (  kontor  );  // Lägg till medarbetare i listan  anställda  .  addEmployee  (  anställd  );  //  marskalkanställda  .  marshal  (  ny  FileWriter  (  outputFile  ));  }  public  static  void  main  (  String  []  args  )  {  try  {  if  (  args  .  length  !=  2  )  {  System  .  ut  .  println  (  "Användning: java javajaxb.EmployeeLister  "  +  "[web.xml filnamn] [output.xml filnamn]")  ;  återvända  ;  }  EmployeeLister  lister  =  new  EmployeeLister  (  ny  fil  (  args  [  ]  ),  ny  fil  (  args  [  1  ]  ));  lister  .  lista  (  sant  );  lister  .  ändra  ();  }  catch  (  Undantag  e  )  {  e  .  printStackTrace  ();  }  }  } 

Koden för avmarshalling kan se ut så här:

 
 
 
 

 
 

 
   
    
      
    

      
    
      
         
          
          
          
    
        
            
        
           
        
        
           
          0   
               
              
              
                
              
                   
                  
        
    
         
         
                
                
 
                    
                
            
               
                  0 

            
            
            
        
       
 paket  javajaxb  ;  importera  java.io.File  ;  importera  java.io.FileReader  ;  importera  java.io.IOException  ;  // Castor  import  org.exolab.castor.xml.MarshalException  ;  import  org.exolab.castor.xml.ValidationException  ;  // Genererade hr.xml-klasser  importerar  javajaxb.generated.hr.*  ;  public  class  EmployeeLister  {  /** Beskrivningen att läsa i */  private  File  descriptor  ;  /** Utdatafilen att skriva till */  150  private  File  outputFile  ;  /** Objektträdet läst i */  privata  Anställda  anställda  ;  public  EmployeeLister  (  File  descriptor  ,  File  outputFile  )  {  anställda  =  null  ;  detta  .  deskriptor  =  deskriptor  ;  detta  .  outputFile  =  outputFile  ;  }  public  void  list  (  boolean  validate  )  kastar  IOException  ,  MarshalException  ,  ValidationException  {  // Unmarshall  anställda  =  Anställda  .  unmarshal  (  ny  FileReader  (  descriptor  ));  // Gör något grundläggande  utskriftssystem  .  ut  .  println  (  "--- Medarbetarlista ---\n" )  ;  Anställd  []  anställdList  =  anställda  .  getEmployee  ();  for  (  int  i  =  ;  i  <  anställdList  .  längd  ;  i  ++  )  {  Anställd  anställd  =  anställd Lista  [  i  ]  ;  System  .  ut  .  println  (  "Anställd: "  +  anställd  .  getName  ());  System  .  ut  .  println  (  "Organisation: "  +  anställd  .  getOrganization  ().  getName  ());  System  .  ut  .  println  (  "Office: "  +  anställd  .  getOffice  ().  getAddress  ().  getCity  ()  +  ", "  +  anställd  .  getOffice  ().  getAddress  ().  getState  ()  +  "\n"  );  }  }  public  static  void  main  (  String  [ ]  args  )  {  try  {  if  (  args  .  length  !=  2  )  {  System  .  ut  .  println  (  "Användning: java javajaxb.EmployeeLister  "  +  "[web.xml filnamn] [output.xml filnamn]")  ;  återvända  ;  }  EmployeeLister  lister  =  new  EmployeeLister  (  ny  fil  (  args  [  ]  ),  ny  fil  (  args  [  1  ]  ));  lister  .  lista  (  sant  );  }  catch  (  Undantag  e  )  {  e  .  printStackTrace  ();  }  }  } 

Exempelmappningsfil kan se ut så här:




   
     
     
           
        
    
  
   
     
           
        
    
     
           
        
    
     
           
        
    
     
           
       
    
     
           
       
    
  
   
     
           
        
    
     
           
        
    
     
           
        
    
     
           
        
    
     
           
        
    
  
   
     
           
        
    
     
           
        
    
  
   
     
           
        
    
     
           
        
    
  
 <?xml version="1.0"?>  <!DOCTYPE mapping PUBLIC "-//EXOLAB/Castor Object Mapping DTD Version 1.0//EN" "http://Castor.exolab.org/mapping.dtd">  <mapping>  <class  name=  "javajaxb.generated.hr.Employees"  >  <map-to  xml=  "emp-list"  />  <field  name=  "Employee"  type=  "javajaxb.generated.hr.Employee"  >  <bind-xml  name=  "emp"  />  </field>  </class>  <class  name=  "javajaxb.generated.hr.Employee"  >  <field  name=  "Id"  type=  "integer"  >  <bind-xml  name=  "emp -id"  node=  "attribute"  />  </field>  <field  name=  "name"  type=  "java.lang.String"  >  <bind-xml  name=  "emp-name"  node=  "attribute"  />  < /field>  <field  name=  "Address"  type=  "javajaxb.generated.hr.Address"  >  <bind-xml  name=  "emp-address"  />  </field>  <field  name=  "Organisation"  type=  "javajaxb .generated.hr.Organization"  >  <bind-xml  name=  "emp-org"  />  </field>  <field  name=  "Office"  type=  "javajaxb.generated.hr.Office"  >  <bind-xml  name=  "emp-office"  />  </field>  </class>  <class  name=  "javajaxb.generated.hr.Address"  >  <field  name=  "Street1"  type=  "java.lang.String"  >  <bind-xml  name=  "line-1"  node=  "element"  />  </field>  <field  name=  "Street2"  type=  "java.lang.String"  >  <bind-xml  name=  "line-2"  node=  "element "  />  </field>  <field  name=  "City"  type=  "java.lang.String"  >  <bind-xml  name=  "city"  node=  "element"  />  </field>  <field  name=  "State "  type=  "java.lang.String"  >  <bind-xml  name=  "state"  node=  "element"  />  </field>  <field  name=  "Postkod"  type=  "java.lang.String"  >  <bind -xml  name=  "zip-code"  node=  "element"  />  </field>  </class>  <class  name=  "javajaxb.generated.hr.Office"  >  <field  name=  "Id"  type=  "heltal"  >  <bind-xml  name=  "office-id"  node=  "attribute"  />  </field>  <field  name=  "Address"  type=  "javajaxb.generated.hr.Address"  >  <bind-xml  name=  "kontor -address"  node=  "element"  />  </field>  </class>  <class  name=  "javajaxb.generated.hr.Organization"  >  <field  name=  "Id"  type=  "integer"  >  <bind-xml  name =  "org-id"  node=  "element"  />  </field>  <field  name=  "Name"  type=  "java.lang.String"  >  <bind-xml  name=  "org-name"  node=  "element"  />  </field>  </class>  </mapping> 

Se även

externa länkar