アキはフリーランスのプログラマーです >> Java
Sponsored link

このエントリーを含むはてなブックマーク このエントリーを含むECナビ人気ニュース

はじめてのJakarta Commons Betwixt

BetwixtはJavaBeansを簡単にXMLに書き出すためのAPIです。また読み込むことも可能です。(厳密にはCommons Digesterを使うのだけど)

 Primitive(intとかString)だけなら、とにかく非常に簡単に始められます。

XMLスキーマやDTDがないXMLを読み書きするならBetwixtがいい選択になると思います。

ここでは ver0.6を元に説明します。

【公式サイト】

http://jakarta.apache.org/commons/betwixt/

準備

以下のパッケージ(API)をダウンロードしてjarファイルをパスに追加する必要があります。

ダウンロードはhttp://jakarta.apache.org/site/binindex.cgiから行えます。

バージョンはその時点で一番近いものを、ファイル形式はzipでもtar.gzでも同じです。


■Commons BetWixt 0.6

commons-betwixt-0.6.jar

■BeanUtils 1.7.0

commons-beanutils.jar

■Commons Collections 2.1.1

commons-collections-2.1.1.jar

■Commons Digester 1.6

commons-digester.jar

■Commons Logging 1.0.4

commons-logging.jar


サンプル

実行すると以下のようにファイル c:\tmp\p.xml と画面に以下のように出力されます。

<?xml version="1.0" encoding="Shift_Jis"?>
<user name="Huck" age="25">
<friends>
<friend>
<name>Tom</name>
</friend>
<frend>
<name>Jim</name>
</friend>
</friends>
</user>

Java Code

配列を扱うときは、addとgetを用いますが、getの場合は、後にsをつけるとか、Listをつけるなどした方がすっきりします。

public void addFrend(Frend num);

public Frend[] getFrends();public Frend[] getFrendList();


■test.Person.java

/*
 * Created on 2004/10/05
 * Author aki@www.xucker.jpn.org
 * License Apache2.0 or Common Public License
 */

package test;
import java.io.File;
import java.io.FileWriter;
import java.util.List;
import java.util.Vector;

import org.apache.commons.betwixt.BindingConfiguration;
import org.apache.commons.betwixt.io.BeanReader;
import org.apache.commons.betwixt.io.BeanWriter;

public class Person {
    
    public static final void main(String args[]) throws Exception{
        
        
        String path="c:\\tmp\\p.xml";
        
        
        //Configを作成 (idを出力しない) 省いてもいい。
        BindingConfiguration config=new BindingConfiguration();
        config.setMapIDs(false);
        
        
        
        BeanWriter writer = new BeanWriter(new FileWriter(path));
        writer.setBindingConfiguration(config);
        
        writer.writeXmlDeclaration("<?xml version=\"1.0\" encoding=\"Shift_Jis\"?>");
        
        //JavaBeanの値を設定
        Person person=new Person();
        person.setName("Huck");
        person.addFrend(new Frend("Tom"));
        person.addFrend(new Frend("Jim"));
        
        //書き出し
        writer.write(person);
        writer.close();
        
        
	   
        //XMLからJavaBeanを作成
        BeanReader reader=new BeanReader();
        reader.registerBeanClass(Person.class);
        Person map=(Person)reader.parse(new File(path));
       
        //コンソールに出力して内容を確認
        BeanWriter writer2 = new BeanWriter();
        writer2.writeXmlDeclaration("<?xml version=\"1.0\" encoding=\"Shift_Jis\"?>");
        writer2.setBindingConfiguration(config);
        writer2.write(map);
        writer2.close();
    }
    
  
    
    
        
        
public Person(){
    
    frendList=new Vector();
    
   
            }
    
        public int getAge() {
            return age;
        }
        public void setAge(int value) {
            this.age = value;
        }
        
        

        private String name;
        private int age=25;
        
        
        List frendList;
      
        public void addFrend(Frend num){
            
            frendList.add(num);
        }
        
        public Frend[] getFriends(){
            Friend number[]=new Friend[friendList.size()];
            for (int i = 0; i < number.length; i++) {
                number[i]=((Friend)friendList.get(i));
            }
            return number;
        }
        
   
        
        
       
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        
        
      

        
}

■test.Friend.java

package test;
/*
 * Created on 2004/10/05
 * Author aki@www.xucker.jpn.org
 * License Apache2.0 or Common Public License
 */

/**
 * 
 *
 */
public class Friend {
   
        String name;
        
        public Friend(){
            
        }
        public Friend(String v){
            this.name=v;
        }
                public String getName() {
            return name;
        }
        public void setName(String v) {
            this.name = v;
        }

}

FAQ

XML宣言はどうやって書くのか

writer.writeXmlDeclaration("<?xml version=\"1.0\" encoding=\"Shift_Jis\"?>");

出力時のid属性はどうやって消すの?

BindingConfiguration config=new BindingConfiguration();
config.setMapIDs(false);
BeanWriter writer = new BeanWriter(fw);
writer.setBindingConfiguration(config);


関連

Jakarta Commons Betwixt .betwixt ファイルの記述の仕方


このエントリーを含むはてなブックマーク このエントリーを含むECナビ人気ニュース