トップページ -> 実践知識 -> XML ドキュメントのリレーショナルデータベースへのマッピング -> XMLドキュメントとリレーショナルデータベースのマッピング
[サイトマップへ]  

XMLドキュメントとリレーショナルデータベースのマッピング

サイト構成 連絡先,業績など 実践知識 データの扱い コンピュータ 教材 サポートページ

JAXB と Ant を使い,XMLドキュメントのDTDファイルから,Java のクラスを自動生成することを行います.


マッピングを行うクラス

評価投稿マッピング.java を、以下のように作る

package hoge.hoge.com;

import hoge.hoge.com.*;

import javax.xml.bind.*;

import java.io.*;
import java.util.*;

public class ConvertDsoSample {

	private static ファイルDso ファイルDso;
	private static 投稿者Dso 投稿者Dso;
	private static List<作品評価Dso> 作品評価Dsoリスト;
	private static 評価投稿 評価投稿;
	
	
	
	public static void input評価投稿(String ファイル名){
		try {
			JAXBContext context = JAXBContext.newInstance("hoge.hoge.com");
			Unmarshaller unmarshaller = context.createUnmarshaller();
			評価投稿 = (評価投稿)unmarshaller.unmarshal(new FileReader(ファイル名));
		}
		catch (JAXBException e) {
			// TODO Auto-generated catch block
			System.err.println("JAXB Error");
			e.printStackTrace();
		}
		catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			System.err.println("Not Found " + ファイル名);
			e.printStackTrace();
		}
	}
	
	public static void output評価投稿(OutputStream out){
		try {
			JAXBContext context = JAXBContext.newInstance("hoge.hoge.com");
			Marshaller marshaller = context.createMarshaller();
			marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
			marshaller.setProperty(Marshaller.JAXB_ENCODING, "shift-jis");
			// marshaller.setProperty("com.sun.xml.bind.xmlDeclaration", Boolean.FALSE);
			
			PrintWriter printWriter = new PrintWriter(out);
			printWriter.println("");
			printWriter.println("");
			printWriter.flush();
			marshaller.marshal(評価投稿, out);
			
		}
		catch (JAXBException e) {
			// TODO Auto-generated catch block
			System.err.println("JAXB Error");
			e.printStackTrace();
		}
	}
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String readFile = "sample1.xml";
		String writeFile = "sample3.xml";
		
		// ファイルからの読み込み
		input評価投稿(readFile);
		
		System.out.println("読み込んだファイル : " + readFile);
		System.out.println("----------------------------------------------------------");
		output評価投稿(System.out);
		System.out.println("----------------------------------------------------------");
		
		// 各Dsoへの受け渡し
		ファイルDso = 評価投稿マッピング.setファイルDso(評価投稿, readFile);
		投稿者Dso = 評価投稿マッピング.set投稿者Dso(評価投稿);
		作品評価Dsoリスト = new ArrayList<作品評価Dso>();
		Iterator<作品評価> iterator = 評価投稿.get作品評価リスト().get作品評価().iterator();
		while(iterator.hasNext()){
			作品評価 作品評価 = iterator.next();
			作品評価Dsoリスト.add(評価投稿マッピング.set作品評価Dso(評価投稿, 作品評価));
		}
		
		// 処理
		投稿者Dso.set漢字姓("田中");
		投稿者Dso.setかな姓("たなか");
		投稿者Dso.set漢字名("一郎");
		投稿者Dso.setかな名("いちろう");
		
		// 各Dsoからの受け渡し
		評価投稿 = 評価投稿マッピング.set評価投稿(投稿者Dso, 作品評価Dsoリスト.iterator());
		
		// コンソールへの出力
		System.out.println();
		System.out.println("出力内容 : " + writeFile);
		System.out.println("----------------------------------------------------------");
		output評価投稿(System.out);
		System.out.println("----------------------------------------------------------");
		
		// ファイルへの出力
		try {
			output評価投稿(new FileOutputStream(writeFile));
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			System.err.println("Cannot write " + writeFile);
			e.printStackTrace();
		}
	}

}

テスト用クラス

上記で作った「評価投稿マッピング.java」の動作チェックのためのクラス.以下の順序で実行が行われる

  1. sample1.xmlから評価投稿オブジェクト(自動生成されたクラス)へ格納   (JAXBによるアンマーシャリング)
  2. 評価投稿オブジェクトから各Dsoのオブジェクトへのデータの受け渡し   (評価投稿マッピング.setファイルDso 等を実行)
  3. Dsoオブジェクトの編集(今回は名前の変更)
  4. Dsoのオブジェクトから評価投稿オブジェクトへのデータの受け渡し   (評価投稿マッピング.set評価投稿 を実行)
  5. データをsapmle3.xmlのファイルとして出力   (JAXBによるマーシャリング)

「import hoge.hoge.com.*;」(1箇所) と 「JAXBContext context = JAXBContext.newInstance("hoge.hoge.com");」(2箇所)は,Ant でクラスを生成したときのパッケージ名と一致させてください.

package hoge.hoge.com;

import hoge.hoge.com.*;

import javax.xml.bind.*;

import java.io.*;
import java.util.*;

public class ConvertDsoSample {

	private static ファイルDso ファイルDso;
	private static 投稿者Dso 投稿者Dso;
	private static List<作品評価Dso> 作品評価Dsoリスト;
	private static 評価投稿 評価投稿;
	
	
	
	public static void input評価投稿(String ファイル名){
		try {
			JAXBContext context = JAXBContext.newInstance("hoge.hoge.com");
			Unmarshaller unmarshaller = context.createUnmarshaller();
			評価投稿 = (評価投稿)unmarshaller.unmarshal(new FileReader(ファイル名));
		}
		catch (JAXBException e) {
			// TODO Auto-generated catch block
			System.err.println("JAXB Error");
			e.printStackTrace();
		}
		catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			System.err.println("Not Found " + ファイル名);
			e.printStackTrace();
		}
	}
	
	public static void output評価投稿(OutputStream out){
		try {
			JAXBContext context = JAXBContext.newInstance("jp.ac.kyushu_u.is.db.test");
			Marshaller marshaller = context.createMarshaller();
			marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
			marshaller.setProperty(Marshaller.JAXB_ENCODING, "shift-jis");
			marshaller.setProperty("com.sun.xml.bind.xmlDeclaration", Boolean.FALSE);
			
			PrintWriter printWriter = new PrintWriter(out);
			printWriter.println("");
			printWriter.println("");
			printWriter.flush();
			marshaller.marshal(評価投稿, out);
			
		}
		catch (JAXBException e) {
			// TODO Auto-generated catch block
			System.err.println("JAXB Error");
			e.printStackTrace();
		}
	}
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String readFile = "sample1.xml";
		String writeFile = "sample3.xml";
		
		// ファイルからの読み込み
		input評価投稿(readFile);
		
		System.out.println("読み込んだファイル : " + readFile);
		System.out.println("----------------------------------------------------------");
		output評価投稿(System.out);
		System.out.println("----------------------------------------------------------");
		
		// 各Dsoへの受け渡し
		ファイルDso = ConvertDso.setファイルDso(評価投稿, readFile);
		投稿者Dso = ConvertDso.set投稿者Dso(評価投稿);
		作品評価Dsoリスト = new ArrayList<作品評価Dso>();
		Iterator<作品評価> iterator = 評価投稿.get作品評価リスト().get作品評価().iterator();
		while(iterator.hasNext()){
			作品評価 作品評価 = iterator.next();
			作品評価Dsoリスト.add(ConvertDso.set作品評価Dso(評価投稿, 作品評価));
		}
		
		// 処理
		投稿者Dso.set漢字姓("田中");
		投稿者Dso.setかな姓("たなか");
		投稿者Dso.set漢字名("一郎");
		投稿者Dso.setかな名("いちろう");
		
		// 各Dsoからの受け渡し
		評価投稿 = ConvertDso.set評価投稿(投稿者Dso, 作品評価Dsoリスト.iterator());
		
		// コンソールへの出力
		System.out.println();
		System.out.println("出力内容 : " + writeFile);
		System.out.println("----------------------------------------------------------");
		output評価投稿(System.out);
		System.out.println("----------------------------------------------------------");
		
		// ファイルへの出力
		try {
			output評価投稿(new FileOutputStream(writeFile));
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			System.err.println("Cannot write " + writeFile);
			e.printStackTrace();
		}
	}

}

実行手順