広告

Java : TransformerException (XML) - API使用例

TransformerException (Java SE 23 & JDK 23) の使い方まとめです。
ほとんどのメソッドにサンプルコードがあります。
APIドキュメントのおともにどうぞ。


概要

このクラスは、変換処理中に発生した例外条件を指定します。

クラス構成

TransformerException はチェック例外です。
XML を変換する Transformer などでエラーが発生するとスローされます。

try {
    final var factory = TransformerFactory.newInstance();
    factory.setFeature("dummy", true);
} catch (TransformerException e) {
    System.out.println("TransformerException! : " + e.getMessage());
}

// 結果
// ↓
//TransformerException! : 機能'dummy'をこのTransformerFactoryに設定できません。

コンストラクタ

TransformerException (String message)

新しいTransformerExceptionを作成します。

final var e = new TransformerException("abc");
System.out.println(e); // javax.xml.transform.TransformerException: abc

TransformerException (String message, Throwable e)

既存の例外をTransformerExceptionにラップします。

final var cause = new IOException("XYZ");
final var e = new TransformerException("abc", cause);

System.out.println(e); // javax.xml.transform.TransformerException: abc
System.out.println(e.getCause()); // java.io.IOException: XYZ

TransformerException (String message, SourceLocator locator)

メッセージとロケータから新しいTransformerExceptionを作成します。

final var locator = new SourceLocator() {
    @Override
    public String getPublicId() {
        return "public id!";
    }

    @Override
    public String getSystemId() {
        return "system id!";
    }

    @Override
    public int getLineNumber() {
        return 123;
    }

    @Override
    public int getColumnNumber() {
        return 456;
    }
};
final var e = new TransformerException("abc", locator);
System.out.println(e.getLocator() == locator); // true

// ; SystemID: system id!; Line#: 123; Column#: 456
System.out.println(e.getLocationAsString());

// abc; SystemID: system id!; Line#: 123; Column#: 456
System.out.println(e.getMessageAndLocation());

TransformerException (String message, SourceLocator locator, Throwable e)

既存の例外をTransformerExceptionにラップします。

final var locator = new SourceLocator() {
    @Override
    public String getPublicId() {
        return "public id!";
    }

    @Override
    public String getSystemId() {
        return "system id!";
    }

    @Override
    public int getLineNumber() {
        return 123;
    }

    @Override
    public int getColumnNumber() {
        return 456;
    }
};
final var cause = new IOException("XYZ");
final var e = new TransformerException("abc", locator, cause);

System.out.println(e.getLocator() == locator); // true
System.out.println(e.getCause()); // java.io.IOException: XYZ

// ; SystemID: system id!; Line#: 123; Column#: 456
System.out.println(e.getLocationAsString());

// abc; SystemID: system id!; Line#: 123; Column#: 456
System.out.println(e.getMessageAndLocation());

TransformerException (Throwable e)

既存の例外をラップする新しいTransformerExceptionを作成します。

final var cause = new IOException("XYZ");
final var e = new TransformerException(cause);

System.out.println(e); // javax.xml.transform.TransformerException: java.io.IOException: XYZ
System.out.println(e.getCause()); // java.io.IOException: XYZ
System.out.println(e.getException()); // java.io.IOException: XYZ

メソッド

Throwable getCause ()

このスロー可能オブジェクトの原因を返しますが、原因が存在しないか不明な場合はnullを返します。

final var cause = new IOException("XYZ");
final var e = new TransformerException(cause);

System.out.println(e); // javax.xml.transform.TransformerException: java.io.IOException: XYZ
System.out.println(e.getCause()); // java.io.IOException: XYZ
System.out.println(e.getException()); // java.io.IOException: XYZ

Throwable getException ()

このメソッドは、この例外がラップする例外を取得します。

final var cause = new IOException("XYZ");
final var e = new TransformerException(cause);

System.out.println(e); // javax.xml.transform.TransformerException: java.io.IOException: XYZ
System.out.println(e.getCause()); // java.io.IOException: XYZ
System.out.println(e.getException()); // java.io.IOException: XYZ

String getLocationAsString ()

位置情報を文字列として取得します。

final var locator = new SourceLocator() {
    @Override
    public String getPublicId() {
        return "public id!";
    }

    @Override
    public String getSystemId() {
        return "system id!";
    }

    @Override
    public int getLineNumber() {
        return 123;
    }

    @Override
    public int getColumnNumber() {
        return 456;
    }
};
final var e = new TransformerException("abc", locator);
System.out.println(e.getLocator() == locator); // true

// ; SystemID: system id!; Line#: 123; Column#: 456
System.out.println(e.getLocationAsString());

// abc; SystemID: system id!; Line#: 123; Column#: 456
System.out.println(e.getMessageAndLocation());

SourceLocator getLocator ()

メソッドgetLocatorは、エラーが発生した場所を指定するSourceLocatorオブジェクトのインスタンスを取得します。

final var locator = new SourceLocator() {
    @Override
    public String getPublicId() {
        return "public id!";
    }

    @Override
    public String getSystemId() {
        return "system id!";
    }

    @Override
    public int getLineNumber() {
        return 123;
    }

    @Override
    public int getColumnNumber() {
        return 456;
    }
};
final var e = new TransformerException("abc", locator);
System.out.println(e.getLocator() == locator); // true

// ; SystemID: system id!; Line#: 123; Column#: 456
System.out.println(e.getLocationAsString());

// abc; SystemID: system id!; Line#: 123; Column#: 456
System.out.println(e.getMessageAndLocation());

String getMessageAndLocation ()

位置情報が追加されたエラー・メッセージを取得します。

final var locator = new SourceLocator() {
    @Override
    public String getPublicId() {
        return "public id!";
    }

    @Override
    public String getSystemId() {
        return "system id!";
    }

    @Override
    public int getLineNumber() {
        return 123;
    }

    @Override
    public int getColumnNumber() {
        return 456;
    }
};
final var e = new TransformerException("abc", locator);
System.out.println(e.getLocator() == locator); // true

// ; SystemID: system id!; Line#: 123; Column#: 456
System.out.println(e.getLocationAsString());

// abc; SystemID: system id!; Line#: 123; Column#: 456
System.out.println(e.getMessageAndLocation());

Throwable initCause (Throwable cause)

このスロー可能オブジェクトの原因を、指定された値に初期化します。

final var e = new TransformerException("abc");
System.out.println(e.getCause()); // null
System.out.println(e.getException()); // null

final var cause = new IOException("XYZ");
e.initCause(cause);
System.out.println(e.getCause()); // java.io.IOException: XYZ
System.out.println(e.getException()); // java.io.IOException: XYZ

void printStackTrace ()

エラーの発生元のメソッドのトレースを出力します。

public class Main {

    public static void main(String[] args) {
        try {
            func1();
        } catch (TransformerException e) {
            e.printStackTrace();

            // 結果
            // ↓
            // javax.xml.transform.TransformerException: abc
            //   Main.func2 ...
            //   Main.func1 ...
            //   Main.main ...
            // ...
        }
    }

    private static void func1() throws TransformerException {
        func2();
    }

    private static void func2() throws TransformerException {
        throw new TransformerException("abc");
    }
}

void printStackTrace (PrintStream s)

エラーの発生元のメソッドのトレースを出力します。

public class Main {

    public static void main(String[] args) {
        try {
            func1();
        } catch (TransformerException e) {
            System.out.println("-- PrintStream --");
            e.printStackTrace(System.out);

            // 結果
            // ↓
            //-- PrintStream --
            // javax.xml.transform.TransformerException: abc
            //   Main.func2 ...
            //   Main.func1 ...
            //   Main.main ...
            // ...
        }
    }

    private static void func1() throws TransformerException {
        func2();
    }

    private static void func2() throws TransformerException {
        throw new TransformerException("abc");
    }
}

void printStackTrace (PrintWriter s)

エラーの発生元のメソッドのトレースを出力します。

public class Main {

    public static void main(String[] args) {
        try {
            func1();
        } catch (TransformerException e) {
            final var stringWriter = new StringWriter();
            try (final var printWriter = new PrintWriter(stringWriter)) {
                e.printStackTrace(printWriter);
            }

            System.out.println("-- PrintWriter --");
            System.out.println(stringWriter);

            // 結果
            // ↓
            //-- PrintWriter --
            // javax.xml.transform.TransformerException: abc
            //   Main.func2 ...
            //   Main.func1 ...
            //   Main.main ...
            // ...
        }
    }

    private static void func1() throws TransformerException {
        func2();
    }

    private static void func2() throws TransformerException {
        throw new TransformerException("abc");
    }
}

void setLocator (SourceLocator location)

メソッドsetLocatorは、エラーが発生した場所を指定するSourceLocatorオブジェクトのインスタンスを設定します。

final var locator = new SourceLocator() {
    @Override
    public String getPublicId() {
        return "public id!";
    }

    @Override
    public String getSystemId() {
        return "system id!";
    }

    @Override
    public int getLineNumber() {
        return 123;
    }

    @Override
    public int getColumnNumber() {
        return 456;
    }
};
final var e = new TransformerException("abc");

// null
System.out.println(e.getLocationAsString());

e.setLocator(locator);

// abc; SystemID: system id!; Line#: 123; Column#: 456
System.out.println(e.getLocationAsString());

Throwableで宣言されたメソッド

addSuppressed, fillInStackTrace, getLocalizedMessage, getMessage, getStackTrace, getSuppressed, setStackTrace, toString

Java API 使用例 : Throwable」をご参照ください。


関連記事

ページの先頭へ