gpt4 book ai didi

apache-fop - FOP/ikvm : error "Provider com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl not found"

转载 作者:行者123 更新时间:2023-12-02 16:19:44 25 4
gpt4 key购买 nike

我使用 ikvm 从 fop-1.0 生成了 fop.dll:

ikvmc -target:library -reference:IKVM.OpenJDK.Core.dll -recurse:{myPathToJars}\*.jar -version:1.0 -out:{myPathToJars}\fop.dll


如果我在 Windows 应用程序中使用 fop.dll,一切都会完美。
如果我在类库中使用它,则会收到以下错误:

"Provider com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl not found" at javax.xml.transform.TransformerFactory.newInstance()

代码行是:

TransformerFactory factory = TransformerFactory.newInstance();
方法代码如下:

        public static void xmlToPDF(String xmlPath, String xslPath, SortedList arguments, String destPdfPath)        {            java.io.File xmlfile = new java.io.File(xmlPath);            java.io.File pdffile = new java.io.File(destPdfPath);            try            {                // configure fopFactory as desired                FopFactory fopFactory = FopFactory.newInstance();                FOUserAgent foUserAgent = fopFactory.newFOUserAgent();                // configure foUserAgent as desired                // Setup output                OutputStream outputStream = new java.io.FileOutputStream(pdffile);                outputStream = new java.io.BufferedOutputStream(outputStream);                try                {                    // Construct fop with desired output format                    Fop fop = fopFactory.newFop("application/pdf" /*MimeConstants.MIME_PDF*/, foUserAgent, outputStream);                    // Setup XSLT                    TransformerFactory factory = TransformerFactory.newInstance();                    java.io.File xsltfile = new java.io.File(xslPath);                    Transformer transformer = factory.newTransformer(new StreamSource(xsltfile.getAbsoluteFile()));                    // Set the value of a  in the stylesheet                    if (arguments != null)                    {                        IList keys = arguments.GetKeyList();                        foreach (var key in keys)                        {                            Object value = arguments[key];                            transformer.setParameter(key.ToString(), value);                        }                    }                    // Setup input for XSLT transformation                    Source src = new StreamSource(xmlfile);                    // Resulting SAX events (the generated FO) must be piped through to FOP                    Result res = new SAXResult(fop.getDefaultHandler());                    // Start XSLT transformation and FOP processing                    transformer.transform(src, res);                }                catch (Exception e1)                {                    System.Console.WriteLine(e1.Message);                }                finally                {                    outputStream.close();                }            }            catch (Exception ex)            {                System.Console.WriteLine(ex.Message);            }        }

我使用ikvm-0.46.0.1来制作我的fop.dll(基于fop 1.0)。我包含以下 jar :

avalon-framework-4.2.0.jarbatik-all-1.7.jarcommons-io-1.3.1.jarcommons-logging-1.0.4.jarfop.jarserializer-2.7.0.jarxalan-2.7.0.jarxercesImpl-2.7.1.jarxml-apis-1.3.04.jarxml-apis-ext-1.3.04.jarxmlgraphics-commons-1.4.jar

知道为什么会出现此错误吗?为什么 Windows 应用程序和类库之间的行为不同?

添加 2011 年 10 月 19 日:
我设法完成以下工作:

  • MyMainPrg(Windows 窗体应用程序)
  • MyFopWrapper(调用 fop.dll 的类库)

但对于我的情况,这不是解决方案,因为在我的目标项目中,我有以下结构:

  • MainCmdLinePrg(控制台应用程序;调用 DLL_1)
  • DLL_1(调用 DLLsharedFop){有多个 DLL 可以调用 DLLsharedFop}
  • DLLsharedFop(直接调用 fop.dll;或者 - 我不在乎 - 可能会调用 MyFopWrapper)

不幸的是,这个构造会导致错误。
您可以缩短为一对(ACmdLinePrg,MyFopWrapper):这已经不起作用了!但是 (MyMainPrg,MyFopWrapper) 确实...

最佳答案

以下是我遇到该错误的原因以及解决方法:

我的解决方案如下所示:

ClientApp (references)--> ClassLibrary1

我的 ClassLibrary1 公共(public)函数正在使用,但未公开任何 IKVM 相关对象,因此调用者 (ClientApp) 不必添加 IKVM 引用。编译时一切都很好。

但是在运行时,情况就不同了。我遇到了同样的异常,并意识到 ClientApp 还需要引用包含“com.sun.org.apache.xalan”的正确 IKVM dll (IKVM.OpenJDK.XML.Transform.dll) .@internal.xsltc.trax”命名空间。

关于apache-fop - FOP/ikvm : error "Provider com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl not found",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7804138/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com