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」をご参照ください。