【问题标题】:How to catch the exception returned by saxon jar file如何捕获 saxon jar 文件返回的异常
【发布时间】:2015-04-27 10:06:22
【问题描述】:

感谢您查看我的问题。

我使用 saxon java api 作为 XSLT 处理器。很难通过 saxon jar 文件捕获异常返回。

我能够打印 javax 异常。但是需要在saxon返回的字符串中获取异常。

我用来转换 xml 的以下函数:

import java.io.File;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;

public class Main {

    /**
     * Simple transformation method.
     * @param sourcePath - Absolute path to source xml file.
     * @param xsltPath - Absolute path to xslt file.
     * @param resultDir - Directory where you want to put resulting files.
     */
    public static void simpleTransform(String sourcePath, String xsltPath,
                                       String resultDir) {
        TransformerFactory tFactory = TransformerFactory.newInstance();
        try {
            Transformer transformer =
                tFactory.newTransformer(new StreamSource(new File(xsltPath)));

            transformer.transform(new StreamSource(new File(sourcePath)),
                                  new StreamResult(new File(resultDir)));
        } catch (Exception e) {
            e.message();
        }
    }

    public static void main(String[] args) {
        //Set saxon as transformer.
        System.setProperty("javax.xml.transform.TransformerFactory",
                           "net.sf.saxon.TransformerFactoryImpl");

        simpleTransform("d:/project/hob/AppModule.xml",
                        "d:/project/hob/create-fragment.xslt", "C:/");

    }
}

你们能否建议将撒克逊异常放入字符串中。下面是异常返回的 saxon jar 文件示例。

SXJE0008:无法将 xs:yearMonthDuration 转换为所需的 Java 类型

谢谢, 迪帕克

【问题讨论】:

  • 你检查过Exception.getCause() 是否持有撒克逊例外吗?
  • @wonderb0lt: 我试过 getcause() 但它返回不返回 jar 文件异常。

标签: java saxon libxslt


【解决方案1】:

这似乎是一个非常基本的 Java 问题。

从 Java 异常中捕获消息文本的典型方法是:

String err = null;
try {
  ....
} catch (Exception e) {
  err = e.getMessage();
}

撒克逊人对此没有任何特别之处。

【讨论】:

  • 这并不总是那么简单。我遇到了 newTransformer 调用没有传递任何异常的问题,因为它们将包含在带有 factory.setErrorListener 的 errorListener 中。但是,我们不能当场抛出异常,除非我们通过这个字符串列表查找致命的字符串(而不是警告)。这很粗糙。
猜你喜欢
  • 1970-01-01
  • 2021-12-22
  • 1970-01-01
  • 2021-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-30
  • 2015-04-21
相关资源
最近更新 更多