ConfigurationLoader の設定ファイル読み込み¶
概要¶
ConfigurationLoader(jp.co.intra_mart.foundation.config.ConfigurationLoader)を使用した設定ファイルの読み込みについて説明します。
設定ファイルの読み込み¶
設定ファイルの読み込みには ConfigurationLoader#load or #loadAll メソッドを使用し、スキーマ定義に基づいた Java オブジェクトに変換されて取得できます。// 設定ファイルのデータを読み込み、スキーマ定義に基づいた Java オブジェクトを作成します JaxbConfig config = ConfigurationLoader.load(JaxbConfig.class);
コラム
ConfigurationLoader#load or #loadAll メソッドの設定ファイルから Java オブジェクトへの変換はJAXB(Java Architecture for XML Binding)を利用しています。intra-mart が提供している設定以外を ConfigurationLoader で読み込む場合は以下のファイルが必要です。
- スキーマ定義(xsd)
- スキーマに基づく設定ファイル(xml)
- スキーマに基づくクラス
- スキーマに基づくクラスのインスタンスを生成するクラス
サンプル¶
ConfigurationLoader を使用して設定ファイルのデータを取得するサンプルです。
読み込み対象のサンプル¶
スキーマの定義(xsd)WEB-INF/schema ディレクトリ配下に配置します。スキーマのサンプル(WEB-INF/schema/jaxb-config.xsd)<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://intra_mart.co.jp/jaxb/sample/jaxb-config" xmlns:tns="http://intra_mart.co.jp/jaxb/sample/jaxb-config" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" jaxb:version="2.0" elementFormDefault="qualified"> <xs:annotation> <xs:appinfo> <jaxb:schemaBindings> <jaxb:package name="jp.co.intra_mart.jaxb.sample" /> </jaxb:schemaBindings> </xs:appinfo> </xs:annotation> <xs:element name="jaxb-config"> <xs:complexType> <xs:sequence> <xs:element name="jaxbNestedConfig"> <xs:complexType> <xs:sequence> <xs:element name="value" type="xs:string" /> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
スキーマに基づく設定ファイル(xml)WEB-INF/conf ディレクトリ配下に配置します。設定ファイルのサンプル(WEB-INF/conf/jaxb-config.xml)<?xml version="1.0" encoding="UTF-8"?> <jaxb-config xmlns="http://intra_mart.co.jp/jaxb/sample/jaxb-config" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://intra_mart.co.jp/jaxb/sample/jaxb-config"> <jaxbNestedConfig> <value>sample_value</value> </jaxbNestedConfig> </jaxb-config>
スキーマに基づくクラスクラスパスの通っているディレクトリ配下に配置します。スキーマに基づくクラスのサンプル(jp.co.intra_mart.jaxb.sample.JaxbConfig)package jp.co.intra_mart.jaxb.sample; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlType; @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "", propOrder = { "jaxbNestedConfig" }, factoryClass = ObjectFactory.class , factoryMethod = "createJaxbConfig") @XmlRootElement(name = "jaxb-config") public class JaxbConfig { @XmlElement(required = true) protected JaxbConfig.JaxbNestedConfig jaxbNestedConfig; public JaxbConfig.JaxbNestedConfig getJaxbNestedConfig() { return jaxbNestedConfig; } public void setJaxbNestedConfig(JaxbConfig.JaxbNestedConfig value) { this.jaxbNestedConfig = value; } @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "", propOrder = { "value" }, factoryClass = ObjectFactory.class , factoryMethod = "createJaxbConfigJaxbNestedConfig") public static class JaxbNestedConfig { @XmlElement(required = true) protected String value; public String getValue() { return value; } public void setValue(String value) { this.value = value; } } }
スキーマに基づくクラスのインスタンスを生成するクラスクラスパスの通っているディレクトリ配下に配置します。インスタンスを生成するクラスのサンプル(jp.co.intra_mart.jaxb.sample.ObjectFactory)package jp.co.intra_mart.jaxb.sample; import javax.xml.bind.annotation.XmlRegistry; @XmlRegistry public class ObjectFactory { public ObjectFactory() { } public static JaxbConfig createJaxbConfig() { return new JaxbConfig(); } public static JaxbConfig.JaxbNestedConfig createJaxbConfigJaxbNestedConfig() { return new JaxbConfig.JaxbNestedConfig(); } }
読み込み処理のサンプル¶
ConfigurationLoader#load メソッドを使用して追加した設定を読み込み、設定ファイルのデータを取得します。// jaxb-config.xml を読み込んでオブジェクトを取得します。 JaxbConfig config = ConfigurationLoader.load(JaxbConfig.class); JaxbNestedConfig nestedConfig = config.getJaxbNestedConfig(); // jaxb-config.xml に定義した「sample_value」を取得できます。 String value = nestedConfig.getValue();