intra-mart Accel Platform SAStruts+S2JDBC プログラミングガイド 第17版 2020-08-01

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)
  • スキーマに基づくクラス
  • スキーマに基づくクラスのインスタンスを生成するクラス
  • 作成したクラスに関する package-info クラス

サンプル

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();
    }

}

  • 作成したクラスに関する package-info クラス
クラスパスの通っているディレクトリ配下に配置します。

package-info クラスのサンプル(jp.co.intra_mart.jaxb.sample.package-info)
@javax.xml.bind.annotation.XmlSchema(namespace = "http://intra_mart.co.jp/jaxb/sample/jaxb-config", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
package jp.co.intra_mart.jaxb.sample;

読み込み処理のサンプル

ConfigurationLoader#load メソッドを使用して追加した設定を読み込み、設定ファイルのデータを取得します。
// jaxb-config.xml を読み込んでオブジェクトを取得します。
JaxbConfig config = ConfigurationLoader.load(JaxbConfig.class);
JaxbNestedConfig nestedConfig = config.getJaxbNestedConfig();

// jaxb-config.xml に定義した「sample_value」を取得できます。
String value = nestedConfig.getValue();