Java のサンプル

JavaXML のファイルを処理するテスト。
単なるテストなため、コメントと内容が大きく食い違っているのは無視してください。

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Iterator;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamConstants;
import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.events.Attribute;
import javax.xml.stream.events.XMLEvent;
import javax.xml.stream.events.StartElement;

/** Tomcat の context.xml を読み込んで、必要な情報を取り出すクラス(未完成)。
 * 本来は、サーブレットコンテナからJNDI経由で取得するのだが、
 * バッチ処理などコンテナを利用しない場合に対応するために用意した。
 * (DIコンテナが活用できれば不要?)
 *
 * Resource: データベース情報。
 * url, username, password を利用。
 * Environment: 環境変数。
 * name, value を利用。JNDI 経由だとオブジェクトの type も指定できる。
 */
public class ContextParser {
    public ContextParser(String xmlfile)
      throws FileNotFoundException, XMLStreamException {
        XMLInputFactory factory = XMLInputFactory.newInstance();

        BufferedInputStream stream =
            new BufferedInputStream(new FileInputStream(xmlfile));
        XMLEventReader reader = factory.createXMLEventReader(stream);

        while (reader.hasNext()) {
            XMLEvent event = reader.nextEvent();

            if (event.isStartElement()) {
                StartElement element = event.asStartElement();
                System.out.println("Name: " + element.getName());
                for (Iterator i = element.getAttributes(); i.hasNext();) {
                    Attribute attr = (Attribute)i.next();
                    System.out.println("Attribute: " + attr.getName() + "=" + attr.getValue());
                }
            }
        }

    public static void main(String[] args) throws FileNotFoundException, XMLStreamException {
        new ContextParser(args[0]);
    }
}