Michael Owen 222 Bazza Lane, Liverpool, MN111-222-3333 michael@owen.com 720.111.2222 111.222.3333
이 기사에서 제공되는 소스코드를 다운로드 받고 싶다면 여기를 클릭해라. 코드에는 인명 및 연락처 디렉토리 뿐만 아니라 castor.properties 파일, readme 파일도 포함하고 있다. 이 코드로 작업하려면 caster.jar 또는 castor-xml.jar 파일도 있어야 한다. |
public class Person { private String name; private String address; private String ssn; private String email; private String homePhone; private String workPhone; // -- allows us to create a Person via the constructor public Person(String name, String address, String ssn, String email, String homePhone, String workPhone) { this.name = name; this.address = address; this.ssn = ssn; this.email = email; this.homePhone = homePhone; this.workPhone = workPhone; } // -- used by the data-binding framework public Person() { } // -- accessors public String getName() { return name; } public String getAddress() { return address; } public String getSsn() { return ssn; } public String getEmail() { return email; } public String getHomePhone() { return homePhone; } public String getWorkPhone() { return workPhone; } // -- mutators public void setName(String name) { this.name = name; } public void setAddress(String address) { this.address = address; } public void setSsn(String ssn) { this.ssn = ssn; } public void setEmail(String email) { this.email = email; } public void setHomePhone(String homePhone) { this.homePhone = homePhone; } public void setWorkPhone(String workPhone) { this.workPhone = workPhone; } }단계 3 : Castor XML를 사용하여 JavaBean 생성하기
import org.exolab.castor.xml.*; import java.io.FileReader; public class ReadPerson { public static void main(String args[]) { try { Person person = (Person) Unmarshaller.unmarshal(Person.class, new FileReader("person.xml")); System.out.println("Person Attributes"); System.out.println("-----------------"); System.out.println("Name: " + person.getName() ); System.out.println("Address: " + person.getAddress() ); System.out.println("SSN: " + person.getSsn() ); System.out.println("Email: " + person.getEmail() ); System.out.println("Home Phone: " + person.getHomePhone() ); System.out.println("Work Phone: " + person.getWorkPhone() ); } catch (Exception e) { System.out.println( e ); } } }
Java & XML, 2nd Edition | ||
import org.exolab.castor.xml.*; import java.io.FileWriter; public class CreatePerson { public static void main(String args[]) { try { // -- create a person to work with Person person = new Person("Bob Harris", "123 Foo Street", "222-222-2222", "bob@harris.org", "(123) 123-1234", "(123) 123-1234"); // -- marshal the person object out as a위 코드에서는 생성자에 초기값을 넘겨 연락처 객체를 생성하였다. 그런 후, Marshaller 클래스를 사용하여 생성된 연락처 객체를 bob_person.xml라는 이름을 가진 파일로 XML문서를 저장하였다.FileWriter file = new FileWriter("bob_person.xml"); Marshaller.marshal(person, file); file.close(); } catch (Exception e) { System.out.println( e ); } } }
import org.exolab.castor.xml.*; import java.io.FileWriter; import java.io.FileReader; public class ModifyPerson { public static void main(String args[]) { try { // -- read in the person Person person = (Person) Unmarshaller.unmarshal(Person.class, new FileReader("person.xml")); // -- change the name person.setName("David Beckham"); // -- marshal the changed person back to disk FileWriter file = new FileWriter("person.xml"); Marshaller.marshal(person, file); file.close(); } catch (Exception e) { System.out.println( e ); } } }이상에서 살펴본 것처럼 연락처 XML파일을 수정할 때 XML관련 API를 사용할 필요가 전혀 없다. 이제 주소록을 만드는 본격적인 작업으로 넘어가 보자.
단계 2 : 주소록을 표현하는 주소록 자바 객체 작성23 Whistlestop Ave 111-222-3333 roykeane@manutd.com 720.111.2222 111.222.3333 123 Foobar Lane 222-333-444 juanveron@manutd.com 720.111.2222 111.222.3333
import java.util.List; import java.util.ArrayList; public class Addressbook { private String addressBookName; private List persons = new ArrayList(); public Addressbook() { } // -- manipulate the List of Person objects public void addPerson(Person person) { persons.add(person); } public List getPersons() { return persons; } // -- manipulate the name of the address book public String getName() { return addressBookName; } public void setName(String name) { this.addressBookName = name; } }주소록 작업시 사용할 프로그래밍 인터페이스가 작성되고, 주소록의 XML형태가 정의 되었으니 이제 이 둘을 함께 연결할 필요가 있다. 연결해주는 작업은 mapping.xml 파일이 담당한다.
매핑 파일을 살펴보면 매핑이 자바 클래스 관점에서 작성되었다는 사실을 알 수 있다. 우리는 Person.java와 Address.java를 작성하였으며 매핑 파일은 각 클래스를 설명하는 요소를 가지고 있다.A mapping file for our Address Book application
다음 스니펫은 Castor 프레임워크가 연락처의 Collection를 사용할 수 있도록 한다. 우리의 경우는 java.util.List이다.
이 매핑 파일에 더욱 복잡한 내용을 정의할 수는 있지만 이렇게 함으로서 주제에서 벗어날 우려도 있기 때문에 이 정도만 언급하기로 한다. mapping 파일에 대한 더 자세한 사항은 Castor 웹 사이트를 방문해 보길 바란다.
import org.exolab.castor.xml.*; import org.exolab.castor.mapping.*; import java.io.FileReader; import java.util.List; import java.util.Iterator; public class ViewAddressbook { public static void main(String args[]) { try { // -- Load a mapping file Mapping mapping = new Mapping(); mapping.loadMapping("mapping.xml"); Unmarshaller un = new Unmarshaller(Addressbook.class); un.setMapping( mapping ); // -- Read in the Addressbook using the mapping FileReader in = new FileReader("addressbook.xml"); Addressbook book = (Addressbook) un.unmarshal(in); in.close(); // -- Display the addressbook System.out.println( book.getName() ); List persons = book.getPersons(); Iterator iter = persons.iterator(); while ( iter.hasNext() ) { Person person = (Person) iter.next(); System.out.println("\n" + person.getName() ); System.out.println("-----------------------------"); System.out.println("Address = "+ person.getAddress()); System.out.println("SSN = " + person.getSsn() ); System.out.println("Home Phone = " + person.getHomePhone() ); } } catch (Exception e) { System.out.println( e ); } } }앞에서 작성했던 연락처 예제와 실제적인 차이점은 더 이상 static 메소드인 Unmarshaller.unmarshal()를 사용할 필요가 없다는 것이다. 이제는 Unmarshaller 객체를 생성하고 기존에 만든 mapping.xml를 사용하여 만든 Mapping() 객체를 Unmarshaller 객체에 메시지로 넘겨주기만 하면 된다.
Mapping mapping = new Mapping(); mapping.loadMapping("mapping.xml"); Unmarshaller un = new Unmarshaller(Addressbook.class); un.setMapping( mapping );결론
이전 글 : XML과 CGI 애플리케이션
다음 글 : SVG 히스토그램
최신 콘텐츠