티스토리 뷰

Computer/XML

[JAXB] 실제 활용하기.

인생이글케쉬우냐 2009. 12. 17. 14:26
1. xsd 작성하기
xml 안에 표기할 태그들 이름을 명시하여 xsd를 만들어준다.
<?xml version="1.0" encoding="UTF-8"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"             xmlns:jxb="http://java.sun.com/xml/ns/jaxb"             jxb:version="2.1">  <xsd:element name="signal">    <xsd:complexType>      <xsd:sequence>        <xsd:element name="gps_id" type="xsd:string" />        <xsd:element name="date" type="xsd:string" />        <xsd:element name="time" type="xsd:string"/>        <xsd:element name="latitude" type="xsd:string"/>        <xsd:element name="ns" type="xsd:string"/>        <xsd:element name="longitude" type="xsd:string"/>        <xsd:element name="ew" type="xsd:string"/>        <xsd:element name="speed" type="xsd:string"/>        <xsd:element name="heading" type="xsd:string"/>        <xsd:element name="odometer" type="xsd:string"/>        <xsd:element name="idle_time" type="xsd:string"/>        <xsd:element name="gps_event_id" type="xsd:string"/>        <xsd:element name="sequence_no" type="xsd:string"/>        <xsd:element name="address_yn" type="xsd:string"/>        <xsd:element name="address" type="xsd:string"/>        <xsd:element name="city" type="xsd:string"/>        <xsd:element name="state" type="xsd:string"/>        <xsd:element name="county" type="xsd:string"/>        <xsd:element name="country" type="xsd:string"/>        <xsd:element name="authorities" minOccurs="0">            <xsd:complexType>                <xsd:sequence>                    <xsd:element name="auth_detail"  minOccurs="0" maxOccurs="unbounded">                        <xsd:complexType>                            <xsd:sequence>                                                    <xsd:element name="auth_type" type="xsd:string"/>                                <xsd:element name="auth_name" type="xsd:string"/>                                <xsd:element name="auth_number" type="xsd:string"/>                            </xsd:sequence>                        </xsd:complexType>                    </xsd:element>                </xsd:sequence>                           </xsd:complexType>                   </xsd:element>        <xsd:element name="operator_message" type="xsd:string" minOccurs="0"/>      </xsd:sequence>     </xsd:complexType>  </xsd:element></xsd:schema>

2. java 파일 자동 생성하기
플러그인을 이클립스내에 깔았두었다면 xsd파일을 우클릭하여 아래와 같이 jaxb를 실행할 수가 있다.


실행을 누르면 아래와 같은 콘솔이 뜨는데,
패키지명과 출력할 디렉토리를 선정한다.

Output directory 옆에 있는 Change라는 버튼을 누르면 아래와 같이 작은 콘솔이 뜨는데, 여기서 소스의 루트 폴더를 선택하면 된다. (보통은 src를 쓰지만 나는 src_dice라고 구분한 폴더를 쓰고 있어서;;;)


그러고 ok누른다음 next를 누르면 아래와 같은 화면이 나타나는데,
아래 AuthDetails의 경우는 엘리먼트 내의 하위 엘리먼트(sub-elements)를 넣어서 나타난것이다.;;


Finish를 누르면 Jaxb가 알아서 처리해서 아래처럼 콘솔창에 잘 생성됐다고 메세지를 뿌려준다.


그리고 패키지 내에 두개의 자바파일이 자동 생성된 것을 볼 수 있다.
(패키지나 프로젝트를 리플래쉬 해 주는 것을 잊지말자!)



3. 활용하기
호출하려는 위치에서 아래와 같이 코딩하면 된다.
   JAXBContext jc = null;   Marshaller marshaller = null;   StringWriter writer = null;   Signal signal = factory.createSignal();   ObjectFactory factory = new ObjectFactory();      signal.setGpsId( "000001");   signal.setDate( "20091208"));   signal.setTime( "033003");   signal.setLatitude( "LAT_NO");   signal.setNs( "DIR_NS");   signal.setLongitude( "LON_NO");   signal.setEw( "DIR_EW");   signal.setSpeed( "SPEED_NO");   signal.setHeading( "HEADING_DG");   signal.setOdometer("ODOMETER_NO");   signal.setIdleTime( "IDLE_TM");   signal.setGpsEventId( "EVENT_ID");   signal.setSequenceNo( "HISTORY_ID");   signal.setAddressYn( "PROC_YN");   signal.setAddress( "STREET_NM");   signal.setCity( "TOWN_NM");   signal.setState( "COUNTY_NM");   signal.setCounty( "COUNTY_NM");   signal.setCountry( "COUNTRY_NM");      Signal.Authorities.AuthDetail sd = null;   Signal.Authorities ss = null;   ss = new Signal.Authorities();      for ( int i = 0; i < nListSize ; i++)   {      sd = new Signal.Authorities.AuthDetail();      sd.setAuthName( res[ i].getName());      sd.setAuthNumber( res[ i].getPhoneNumber());      sd.setAuthType( "POLICE");      ss.getAuthDetail().add(sd);      signal.setAuthorities(ss);   }   jc = JAXBContext.newInstance( "com.twotrack.server.dice.jaxb.signal");   marshaller = jc.createMarshaller();   writer = new StringWriter();   marshaller.marshal(signal, writer);

writer.toString()해보면 xml형태로 저장된 결과를 확인해 볼 수 있다.
반응형

'Computer > XML' 카테고리의 다른 글

[JAXB]  (0) 2009.11.13
[JAXB] XML Binding을 위한 JAXB 참고 URL  (0) 2009.11.11