Menu

J2EE etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
J2EE etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

18 Mart 2013 Pazartesi

Weblogic ile authentication ve authorization

        Merhaba bu yazimizda, weblogic server uzerinde olusturdugumuz kullanicilara yetki nasil verebiliriz ve uygulama bolumde nasil kullanabiliriz bunu paylasacam. Yine diger makalelerimde oldugu gibi, ekran goruntuleri ile birlikte verecegim daha anlasilir olmasi acisindan. Simdiden herkese faydali olmasi dilegiyle. 

Ve baslayalim :)

1. Weblogic Admin Konsola login oluyoruz

2. Security Realms linkini seciyoruz.

3. myrealm`i linkini secerek devam ediyoruz.

4. User and Groups tabinda New diyerek yeni bir kullanici olusturalim

5. ertugrul isminde bir kullanici eklerek devam ediyorum

6. Yeni bir kullanici daha ekleyelim

7.Ok

8. Welogic kismindaki yapilacaklari bitirdik simdi uygulama tarafina geciyoruz. Bir Jsf uygulamasi olacak

9. Ve asagidaki adimlari takip edelim.

10.

11.

12. uygulamamizin web.xml icerisine asagidaki bolumu ekliyoruz.


13. weblogic.xml icerside asagidaki gibi olacak


14.login.xhtml olusturuyoruz.


15. login.xhtml icerisi


16. LoginBean.java classimizi olusturuyoruz.


17. LoginBean.java classi ici

18.index.xhtml

19. Uygulamamizi weblogic server`a deploy ettikden sonra index sayfasina gitmek istesek bile bizi login sayfasina yonlendirecektir.


20.

Uygulamanin kodlari : 

28 Aralık 2012 Cuma

EJB Lite kullanarak Java SE uygulamasi icersinde JPA ornegi

Bu makalemizde, bir java SE uygulamasi icersinde EJB calistiracaz, evet yanlis okumadiniz, herhangi bir uygulama sunucusu kullanmadan ejb`yi nasil kullandigimizi gorecegiz. Aslinda, daha once yaptiysaniz bir EJB module olusturmadan, ejb 3.1 ile birlikte herhangi bir web uygulamasi icerisindede EJB kullanabiliyorduk, bizim burada yapacagmizla web uygulamasi icersinde calisan EJB mantigi ayni ikiside EJB lite kullaniyor. Simdi ornek uygulamamiza gecelim..

    Uygulama gereksinimleri

    The following is a list of hardware and software requirements:
    • JDK 7
    • NetBeans 7.2 Java EE version IDE
    • GlassFish 3.1.1 (jar`i kullanacagimiz icin gerekli)
  1. From the NetBeans Menu bar, click File > New Project
    In the New Project dialog box, select Categories > Java, select Projects: > Java Application and click Next















    8. Product.java entity`imiz.
    @Entity
    
    public class Product implements Serializable {
    
    
    
        private static final long serialVersionUID = 1L;
    
        @Id
    
        @GeneratedValue(strategy = GenerationType.AUTO)
    
        private Long id;
    
        private String code;
    
        private String name;
    
    
    
        public String getCode() {
    
            return code;
    
        }
    
    
    
        public void setCode(String code) {
    
            this.code = code;
    
        }
    
    
    
        public String getName() {
    
            return name;
    
        }
    
    
    
        public void setName(String name) {
    
            this.name = name;
    
        }
    
    
    
        public Long getId() {
    
            return id;
    
        }
    
    
    
        public void setId(Long id) {
    
            this.id = id;
    
        }
    
    }











    arguments




1 Aralık 2011 Perşembe

JPQL`de SUM fonksiyonunda aritmetik islemler

Bilindigi gibi jpqlde sum fonksiyonunda aritmetiksel ismler yapmamiza izin vermiyor. Ama biz bunun gecici bir cozumunu asagidaki yontemle bulabiliriz.
Mesala ben asagidaki bir sql yazdigimda syntax error verecektir.
String sql = "SELECT SUM(p.price*l.quantity) FROM purchaseorders o JOIN orderlineitems l ON o.pono=l.pono JOIN products p ON l.prod_id=p.prod_id JOIN suppliers s ON p.sup_id=s.sup_id"
Ama biz asagidaki gibi bir class yaratip onu kullandigimizda sorunumuz cozulmus olacaktir.
    package jpqlexample.servlets;
    ...
    class LineItemSum {
           private Double price;
           private Integer quantity;
           private Double rslt;
           public LineItemSum (Double price, Integer quantity){
                 this.rslt = quantity*price;
           }
           public Double getRslt () {
                return this.rslt;
           }
           public void setRslt (Double rslt) {
                this.rslt = rslt;
           }
        }
Kullanimi :
String sql = "SELECT NEW jpqlexample.servlets.LineItemSum(p.price, l.quantity)
                       FROM PurchaseOrder o
                        JOIN o.orderLineItems l JOIN l.product p JOIN p.supplier"

16 Mayıs 2011 Pazartesi

jsf 2.0 ile gelen yenikler

Merhaba, bu makalemizde jsf 2.0 ile gelen yeniklerden ve Jsf 1.2 ile farklarindan, jsf 1.2 ile uyguladigimiz kodlari jsf 2.0 ile nasil
yaptigimizdan bahsetmeye calisacagim. Oncelikle jsf 2.0`in bize cok buyuk kolayliklar sagladigini belirtmek isterim, mesala artik applicatin.xml
dedigimiz diger bi adiyla faces-config.xml dosyasini jsf 2.0 ile kullanmamiza gerek kalmiyor, herseyi annotation`lar yardimi ile
kolaylikla yapiyoruz, ve bize xml ayar dosyalari ile ugrasmak degil, rahat rahat kod olusturmak kaliyor. Ilk karsilastirmamizdan baslayalim isterseniz.

Diyelim ki, birtane Backing Bean`imin olsun.

jsf 1.2 ile asagidaki sekilde kullaniyorduk.

UserBean.java
public class UserBean{

 private String name;

 getter / setter;
}


faces-config.xml


        userBean
        net.aslan.UserBean
        request


bu sekilde kullaniyorduk, ama jsf 2.0 ile yapacagimiz sey cok basit, tek yapmamiz gereken classimiz uzerinde annotation olarak gostermek :)

Jsf 2.0 ile

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;


@ManagedBean(name="userBean")
@RequestScoped
public class UserBean{

 @ManagedProperty("Ertugrul")
 private String name;

 getter / setter;
}


hepsi bukadar. Artik UserBean backing beanimiz hazir. normal bi sekilde kullanabiliriz. Ve tabiki istenildi
durumda projede faces-config.xml dosyasi kullanilabilinir.



Bu sekilde annotationlar yardimi ile converter`larimizi, validator`larimizi olusturabiliriz, bunlarida karsilastiracak olursak

Jsf 1.2 ile kullanimi


        DateConverter
        net.aslan.jsf.converters.DateConverter


   
        emailValidator
        net.aslan.jsf.validators.EmailValidator
   


bu sekilde faces-config.xml icinde olusturuyorduk ve, kullanirken


       


ve validatorlarida ayni sekilde kullaniyorduk. simdi jsf 2.0 ile ne kadar kolay yapilidigina bakalim.

import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;


@FacesConverter(value = "dateConverter")
public class DateConverter implements Converter {

}

bu sekilde classimizi converter olarak gosteriyoruz ve,



yapmamiz gereken bukadar. validatorlarimizida ayni sekilde kullaniyoruz

import javax.faces.validator.FacesValidator;

@FacesValidator(value = "emailValidator")
public class EmailValidator implements Validator {

}

bu sekilde,

Kendi olusturdugumuz custom componentlerimizide, diger http://www.jtpd.org/wiki/257311 makalemizde oldugu gibi yine annotation ile belirtiyoruz ve kullanabiliyoruz.

Gordugunuz gibi faces-config.xml ayar dosyasina hic bi sekilde ihtiyacimiz kalmadi..

Peki jsf 1.2 ile jsf 2.0 farklar bu kadar, elbetteki hayir. Simdi tek tek inceleyelim.
Oncelikle benimde daha once cok sorun yasadigim, url`nin diger sayfaya gittiginde degismeden kalmasi, diger sayfaya giderken url`nin
degismesi icin yapiyorduk, bu defada diger sayfaya giderken veriyi koruyamiyorduk.
Jsf 2.0 ile birlikte cok guzel bi cozum yolunu bulunmus ve benimde cok hosuma gitti :)

kullanimi asagidaki sekilde,

 
       
            edit
            /edit.xhtml
           
       

   

 tek yapmamiz gereken bu satiri kullanmamiz, bu sekilde kullaninca artik url`i istedigimizde sekilde
 degistirebiliyoruz ve en guzelide verileri kaybetmiyoruz :).
 Bu kismi ayrintili bi sekilde incelemek icin, asagidaki linkden faydalanabilirsiniz.

 
http://blogs.sun.com/enterprisetechtips/entry/post_redirect_get_and_jsf

 Ve bu ozelliklerden daha dogrusunu soylemek gerekirse, J2EE 6 ile gelen yeniklerden ve JSP page`inin yerine facelets`lar gibi cok hizli calisan ve cok cok kullanisli olan bi teknolojilenin J2ee specification`a eklemesi.


 facelets`larin bize ne gibi yararlar saglandigi baska bir makalede genis
 ve uygulamali bir sekilde gorecez. burada facelets`lar ile gelen template ozelliginden biraz bahsetmek istiyorum. Uygulamamiz icin sablaon olusturmak ve bunu jsp`de oldugu gibi her sayfada tekrar tekrar kullanmak gibi cok buyuk bi zahmetten kurtariyor bizi, butun bunlari diger bi makelede uyuglamali
 bi sekilde gorecegiz. faceletsler ile jsf 2.0 asagidaki gibi kullaniyoruz.

 template.xhtml sayfamiz.

  http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
http://www.w3.org/1999/xhtml"
      xmlns:ui="
http://java.sun.com/jsf/facelets"
      xmlns:h="
http://java.sun.com/jsf/html">
 
   
    Facelets - Template Example
 

 

 
   


      Howto Samples
   


   
     
        Welcome
     

 


 ve bu template`i

 
http://www.w3.org/1999/xhtml"
      xmlns:ui="
http://java.sun.com/jsf/facelets"
      xmlns:h="
http://java.sun.com/jsf/html"
      xmlns:f="
http://java.sun.com/jsf/core">
template="/template.xhtml">
 
    Sayfa ust Kismi
 
 
   


#{userBean.name}

 


bu sekilde cok cok rahat bi sekilde kullaniyoruz. dedigim gibi diger makalede cok genis bi sekilde kullanacaz.
Burada dikkat ettiyseniz,

bu sekilde bi satirimiz var, burada

Diger bi yenilikden bahsedecek olursak, jsf 1.2`de metodlarin parametre degerlerini kullanamiyorduk, yani parametre alan bi metodu cagrip parametre veremiyorduk. Jsf 2.0 ile parametre alan metodlara parametre gonderip kullanabiliyoruz, hemen basit ve bizim icin cok faydali olacak bi ornek uzeriden gosterirsek.

Mesala list.xhtml sayfamizda, datatable ile listenen satirlarinin birinin uzerine tikladigimizda detay sayfasinda verinin gosterilmesi

jsf 1.2 ile bunu,

HtlmDataTable`i kullanarak, getRowData metodunu cagrip secilen satirdaki nesneyim bizim Object nesnemiz`e atiyorduk, yani


public class UserBean{
User selectedUser;
HtmlDatatable dataTable;


public HtmlDatatable getDataTable(){
 return dataTable;
}

public void setDataTable(HtmlDatatable dataTable){
 this.dataTable = dataTable;
}


public String detail(){
 selectedUser = dataTable.getRowData();
 return "detail";
}


binding="#{userBean.dataTable}" value="#{userBean.list}" var="user">







.......
......

genel itibariyle busekilde kullaniyorduk, yani HtmlDatatable componentinin ozellikleri kullanip, datatable`imizi buna binding yaparak yapmaya calisiyorduk. ve birde bunun faces-config.xml ayar dosyalari falani var :)..

Peki ayni ornegi jsf 2.0 nasil yapabiliriz,

@ManagedBean
public class UserBean{

User selectedUser;

public String detail(User user){
 selectedUser = user;
 return "detail";
}









="#{userBean.detail(user)}" value="user.name"/>


......
.....


gordugunuz gibi bu kadar basit, yani datatable`dan gelen user nesnesini, commandLinki`imizin action`unda parametre olarak giriyoruz ve bunu detail metodumuza parametre olarak gondererek ve esitliyoruz :).
Bu uygulamaya asagidaki sekilde... Netbeans`de kullanimi..


DataBean.java

package net.aslan.jsf.controller;

import java.io.Serializable;
import java.util.List;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import net.aslan.beans.Person;
import net.aslan.beans.PersonRemote;

/**
 *
 */
@ManagedBean
@SessionScoped
public class DataBean implements Serializable {


    @EJB
    private PersonRemote pr;
    private Person selectedPerson;


    public List getPersons() {
        return pr.findAll();
    }


    public String detail(Person person) {
        selectedPerson = person;
        return "detail?faces-redirect=true&includeViewParams=true";
        // bu sekilde kullaninca veriyi kabetmeden url`i oldugu sayfada gosterebiliriz.
        // istenildigi durumda faces-config.xml`de navigation`lardada kullanilabilir
.
    }


    public Person getSelectedPerson() {
        return selectedPerson;
    }


    public void setSelectedPerson(Person selectedPerson) {
        this.selectedPerson = selectedPerson;
    }

}


Person.java

package net.aslan.beans;

import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

/**
 *
 * @author ertugrul
 */
@Entity
public class Person implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private String name;
    private String lastname;
    private String email;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getLastname() {
        return lastname;
    }

    public void setLastname(String lastname) {
        this.lastname = lastname;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Person)) {
            return false;
        }
        Person other = (Person) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "accr.beans.Person[id=" + id + "]";
    }
}



PersonRemote.java

package net.aslan.beans;
import java.util.List;
/**
 *
 * @author ertugrul
 */
public interface PersonRemote {

    public void create(Person Person);
    public void edit(Person Person);
    public List findAll();

}

PersonEJB.java

package net.aslan.beans;

import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
/**
 *
 * @author ertugrul
 */
@Stateless
public class PersonEJB implements PersonRemote {

    @PersistenceContext
    EntityManager em;

    public void create(Person Person) {
        em.persist(Person);
    }

    public void edit(Person Person) {
        em.merge(Person);
    }

    public List findAll() {
        return em.createQuery("select object(o) from Person as o").getResultList();
    }
}



index.xhtml


http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core">

   
       
       
                                     styleClass="datatable" cellpadding="2"
                         cellspacing="0" rowClasses="row-odd, row-even">
               
                   
                       
                   

                   
               

               
                   
                       
                   

                   
               

           

       

   



detail.xhtml


http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
http://www.w3.org/1999/xhtml"
      xmlns:h="
http://java.sun.com/jsf/html">

   

Detail Person


   
       
           
           
           
           
           
           
       

       
   



datatablestyle.css

.datatable{
    border: 1px solid olive;
}
.datatable thead th{
    background-color: #dfdfdf;
    border-bottom: 1px solid olive;
    padding: 4px;
}
.row-odd td{
    padding: 4px;
    background-color: #ddffcc;
}
.row-even td{
    padding: 4px;
    background-color: #cceebb;
}

dataTable tfoot {
    background-color: #999;
}

9 Nisan 2011 Cumartesi

java.sql.SQLException: ORA-00604: error occurred at recursive SQL level 1 ORA-12705: invalid or unknown NLS parameter value specified

java.sql.SQLException: ORA-00604: error occurred at recursive SQL level 1
ORA-12705: invalid or unknown NLS parameter value specified
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java :112)
        at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
        at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:283)
        at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java :278)
        at oracle.jdbc.driver.T4CTTIoauthenticate.receiveOauth(T4CTTIoauthenticate.java:790)
        at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:362)
        at oracle.jdbc.driver.PhysicalConnection .(PhysicalConnection.java:420)
Error en la conexion

Eger Oracle XE database`e baglanirkenyukaridaki hatayi aliyorsuk, sorun, WIndows`un dil ve region ayarlarindandir.

Cozum :
> Control Panel-> Region and Language - > Buradan formati, English(United State ) yapip bilgisayir restart verenden sonra duzelecektir..

4 Mart 2011 Cuma

double`da virgulden sonraki sayilari yuvarlama

Asagidaki metodu yazip, toplamdan cikan double degeri gonderdigimizde virgulden sonra yanliz 2 rakam gosterecektir.

public double round(double value) {
        int decimalPlace = 2;
        BigDecimal bd = new BigDecimal(value);
        bd = bd.setScale(decimalPlace, BigDecimal.ROUND_UP);
        return bd.doubleValue();
    }

25 Şubat 2011 Cuma

Java DB

connect 'jdbc:derby://localhost:1527/testDB;create=true;user=APP;password=APP';

16 Şubat 2011 Çarşamba

Groovy ile Java Objectlerini XML cevirme

Person.java

public class Person {

    private String name;
    private String surname;
    private Contact[] contacts;

    public Person(String name, String surname, Contact[] contacts) {
        this.name = name;
        this.surname = surname;
        this.contacts = contacts;
    }
..

}

Contact.java

public class Contact {

    private String address;
    private String city;

    public Contact(String address, String city) {
        this.address = address;
        this.city = city;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }
}

Test.groovy

def writer = new StringWriter()
def xml = new groovy.xml.MarkupBuilder(writer)

Contact[] cts = new Contact[1];
cts[0] = new Contact("Resid Beh","Baku");
Person per = new Person("Ertugrul", "Aslan",cts)
Contact[] cts2 = new Contact[2];
cts2[0] = new Contact("Nizami","Gence");
cts2[1] = new Contact("Merkez","Sumgayit");
Person per2 = new Person("Hakan", "Dogan",cts2)

java.util.List prs = new java.util.ArrayList()
prs.add(per)
prs.add(per2)

def ob = prs

xml.truck(id:'TestData'){
    persons(){
        ob.eachWithIndex(){
            obj, i ->
            person(){
                name(ob.get(i).getName())
                surname(ob.get(i).getSurname())
                contacts(){
                    ob.get(i).getContacts().eachWithIndex(){
                        objx, x ->
                        contact(){
                            address(objx.getAddress())
                            city(objx.getCity())
                        }
                    }
                }
            }
        }
    }
}

println writer.toString()

//def target = "c:/test.xml"
//File file= new File(target)
//PrintWriter pw = new PrintWriter(file)
//pw.write("\n")
//pw.write(writer.toString())
//pw.flush()
//pw.close()

22 Aralık 2010 Çarşamba

JSF 2 Tutorial Dokuman

http://www.coreservlets.com/JSF-Tutorial/jsf2/


http://www.mkyong.com/tutorials/jsf-2-0-tutorials/

25 Kasım 2010 Perşembe

Apache Digester Example

package dgstudent;

import java.util.ArrayList;
import java.util.List;

public class Academy {

    private List students;
    private List teachers;
    private String name;

    public Academy() {
        students = new ArrayList();
        teachers = new ArrayList();
    }

    public void addStudent(Student student) {
        students.add(student);
    }

    public void addTeacher(Teacher teacher) {
        teachers.add(teacher);
    }

    public List getStudents() {
        return students;
    }

    public void setStudents(List students) {
        this.students = students;
    }

    public List getTeachers() {
        return teachers;
    }

    public void setTeachers(List teachers) {
        this.teachers = teachers;
    }

    public String getName() {
        return name;
    }

    public void setName(String newName) {
        name = newName;
    }
}



package dgstudent;

public class Course {

    private String id;
    private String name;

    public Course() {
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}


package dgstudent;

import java.util.ArrayList;
import java.util.List;

public class Student {

    private List courses;
    private String name;
    private String division;

    public Student() {
        courses = new ArrayList();
    }

    public void addCourse(Course course) {
        courses.add(course);
    }

    public String getName() {
        return name;
    }

    public void setName(String newName) {
        name = newName;
    }

    public String getDivision() {
        return division;
    }

    public void setDivision(String newDivision) {
        division = newDivision;
    }

    public List getCourses() {
        return courses;
    }

    public void setCourses(List courses) {
        this.courses = courses;
    }
}



package dgstudent;

import java.util.ArrayList;
import java.util.List;

public class Teacher {

    private String name;
    private List certifications;

    public Teacher() {
        certifications = new ArrayList();
    }

    public void addCertification(String certification) {
        certifications.add(certification);
    }

    public String getName() {
        return name;
    }

    public void setName(String newName) {
        name = newName;
    }

    public List getCertifications() {
        return certifications;
    }

    public void setCertifications(List certifications) {
        this.certifications = certifications;
    }
}

package dgstudent;

import java.net.URL;
import java.util.List;
import org.apache.commons.digester.Digester;
import org.apache.commons.digester.xmlrules.DigesterLoader;

public class DigestXMLJavaAcademy {

    public void digest() {
        try {
            //Create Digester using rules defined in academyRules.xml
            URL rules = DigestXMLJavaAcademy.class.getResource("./academy-rules.xml");
            Digester digester = DigesterLoader.createDigester(rules);
            //Parse academy.xml using the Digester to get an instance of Academy
            Academy a = (Academy) digester.parse(DigestXMLJavaAcademy.class.getResourceAsStream("./academy.xml"));

            List vStudents = a.getStudents();
            List vTeachers = a.getTeachers();
           
            for(Student s : vStudents){
                System.out.println(s.getCourses().get(0).getName());
            }


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

    public static void main(String[] args) {
        DigestXMLJavaAcademy xmlDigest = new DigestXMLJavaAcademy();
        xmlDigest.digest();
    }
}








14 Eylül 2010 Salı

JAXB (Java Xml Binding)

JAXB (Java Xml Binding – https://jaxb.dev.java.net/) frameworkü kullanılarak Xml–>Java, Java–>Xml mapping işlemlerini gerçekleştirmek mümkündür. Bu yazılımcıya, Xml dosyalarının ihtiva ettiği verileri Java sınıflarıyla modelleme imkanı sunmakta ve verilerın işlenmesini kolaylaştırmaktadır.

Simdi daha once`den olusturmus oldugumuz schema1.xsd dosyasini kullanarak,  Xml–>Java mapping islemini yapacagiz... XJC kutuphanesinden yararlanarak yukaridaki bahsettigimiz islemleri gerceklestirmeye calisacagiz...



NOT : CLASSPATH ayarlarini oldugunu varsayarak yapilmistir, bundan onceki konumuzda, classpath icin gereken ayarlamalardan bahsedilmektedir....

JAXB tarafından oluşturulan sınıflar aşağıda yer almaktadır.
Student
package gensrc;

import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlType;


/**
 *
Java class for student complex type.
 *
 *
The following schema fragment specifies the expected content contained within this class.
 *
 *
 * <complexType name="student">
 *   <complexContent>
 *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
 *       <sequence>
 *         <element name="exams" type="{}exam" maxOccurs="unbounded" minOccurs="0"/>
 *         <element name="fullName" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
 *         <element name="id" type="{http://www.w3.org/2001/XMLSchema}long" minOccurs="0"/>
 *       </sequence>
 *     </restriction>
 *   </complexContent>
 * </complexType>
 * 

 *
 *
 */
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "student", propOrder = {
    "exams",
    "fullName",
    "id"
})
public class Student {

    @XmlElement(nillable = true)
    protected List exams;
    protected String fullName;
    protected Long id;

    /**
     * Gets the value of the exams property.
     *
     *
     * This accessor method returns a reference to the live list,
     * not a snapshot. Therefore any modification you make to the
     * returned list will be present inside the JAXB object.
     * This is why there is not a set method for the exams property.
     *
     *

     * For example, to add a new item, do as follows:
     *

     *    getExams().add(newItem);
     * 

     *
     *
     *
     * Objects of the following type(s) are allowed in the list
     * {@link Exam }
     *
     *
     */
    public List getExams() {
        if (exams == null) {
            exams = new ArrayList();
        }
        return this.exams;
    }

    /**
     * Gets the value of the fullName property.
     *
     * @return
     *     possible object is
     *     {@link String }
     *    
     */
    public String getFullName() {
        return fullName;
    }

    /**
     * Sets the value of the fullName property.
     *
     * @param value
     *     allowed object is
     *     {@link String }
     *    
     */
    public void setFullName(String value) {
        this.fullName = value;
    }

    /**
     * Gets the value of the id property.
     *
     * @return
     *     possible object is
     *     {@link Long }
     *    
     */
    public Long getId() {
        return id;
    }

    /**
     * Sets the value of the id property.
     *
     * @param value
     *     allowed object is
     *     {@link Long }
     *    
     */
    public void setId(Long value) {
        this.id = value;
    }

}



Exam.java

package gensrc;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlSchemaType;
import javax.xml.bind.annotation.XmlType;
import javax.xml.datatype.XMLGregorianCalendar;


/**
 *
Java class for exam complex type.
 *
 *
The following schema fragment specifies the expected content contained within this class.
 *
 *

 * <complexType name="exam">
 *   <complexContent>
 *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
 *       <sequence>
 *         <element name="examDate" type="{http://www.w3.org/2001/XMLSchema}dateTime" minOccurs="0"/>
 *         <element name="examScore" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
 *         <element name="name" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
 *       </sequence>
 *     </restriction>
 *   </complexContent>
 * </complexType>
 * 

 *
 *
 */
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "exam", propOrder = {
    "examDate",
    "examScore",
    "name"
})
public class Exam {

    @XmlSchemaType(name = "dateTime")
    protected XMLGregorianCalendar examDate;
    protected String examScore;
    protected String name;

    /**
     * Gets the value of the examDate property.
     *
     * @return
     *     possible object is
     *     {@link XMLGregorianCalendar }
     *    
     */
    public XMLGregorianCalendar getExamDate() {
        return examDate;
    }

    /**
     * Sets the value of the examDate property.
     *
     * @param value
     *     allowed object is
     *     {@link XMLGregorianCalendar }
     *    
     */
    public void setExamDate(XMLGregorianCalendar value) {
        this.examDate = value;
    }

    /**
     * Gets the value of the examScore property.
     *
     * @return
     *     possible object is
     *     {@link String }
     *    
     */
    public String getExamScore() {
        return examScore;
    }

    /**
     * Sets the value of the examScore property.
     *
     * @param value
     *     allowed object is
     *     {@link String }
     *    
     */
    public void setExamScore(String value) {
        this.examScore = value;
    }

    /**
     * Gets the value of the name property.
     *
     * @return
     *     possible object is
     *     {@link String }
     *    
     */
    public String getName() {
        return name;
    }

    /**
     * Sets the value of the name property.
     *
     * @param value
     *     allowed object is
     *     {@link String }
     *    
     */
    public void setName(String value) {
        this.name = value;
    }

}


ObjectFactory

package gensrc;

import javax.xml.bind.annotation.XmlRegistry;


/**
 * This object contains factory methods for each
 * Java content interface and Java element interface
 * generated in the gensrc package.
 * An ObjectFactory allows you to programatically
 * construct new instances of the Java representation
 * for XML content. The Java representation of XML
 * content can consist of schema derived interfaces
 * and classes representing the binding of schema
 * type definitions, element declarations and model
 * groups.  Factory methods for each of these are
 * provided in this class.
 *
 */
@XmlRegistry
public class ObjectFactory {


    /**
     * Create a new ObjectFactory that can be used to create new instances of schema derived classes for package: gensrc
     *
     */
    public ObjectFactory() {
    }

    /**
     * Create an instance of {@link Exam }
     *
     */
    public Exam createExam() {
        return new Exam();
    }

    /**
     * Create an instance of {@link Student }
     *
     */
    public Student createStudent() {
        return new Student();
    }
}


Simdide olusan class`larimi kullanarak, classlarimiza uygun XML data oluturalim 

import gensrc.Exam;
import gensrc.Student;
import java.io.StringWriter;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;

public class Main {
   
    public static void main(String[] args) throws Exception {

        Student student = new Student();
        student.setFullName("Ertugrul Aslan");
        student.setId(new Long(3123123));
        Exam e = new Exam();
        e.setExamDate(null);
        e.setExamScore("PASS");
        e.setName("Matematik");
        student.getExams().add(e);

        e = new Exam();
        e.setExamDate(null);
        e.setExamScore("PASS");
        e.setName("Fizik");
        student.getExams().add(e);

        Marshaller marshaller =  null;

        marshaller = JAXBContext.newInstance(Student.class).createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        StringWriter writer = new StringWriter();
        marshaller.marshal(student, writer);

        System.out.println(writer.getBuffer().toString());

    }
}