Ausgangslage:
Ich habe mir aus den fop-1.0 jar's mit ikvmc eine dll gemacht:
ikvmc -target:library -reference:IKVM.OpenJDK.Core.dll -recurse:{myPathToJars}\*.jar -version:1.0 -out:{myPathToJars}\fop.dll
Das hat funktioniert. So weit so gut.
Problem:
Wenn ich nun meine fop.dll von einer Windows Form Application aus anspreche, funktioniert alles bestens.
Wenn ich aber die fop.dll in einer anderen DLL (Class Library) oder einer Console Application einbinde, bekomme ich zur Runtime den folgenden Fehler:
"Provider com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl not found" at javax.xml.transform.TransformerFactory.newInstance()
Meine Methode (ja, das ist C#

):
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63:
| 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 { FopFactory fopFactory = FopFactory.newInstance();
FOUserAgent foUserAgent = fopFactory.newFOUserAgent(); OutputStream outputStream = new java.io.FileOutputStream(pdffile); outputStream = new java.io.BufferedOutputStream(outputStream);
try { Fop fop = fopFactory.newFop("application/pdf" , foUserAgent, outputStream);
TransformerFactory factory = TransformerFactory.newInstance();
java.io.File xsltfile = new java.io.File(xslPath); Transformer transformer = factory.newTransformer(new StreamSource(xsltfile.getAbsoluteFile()));
if (arguments != null) { IList keys = arguments.GetKeyList(); foreach (var key in keys) { Object value = arguments[key]; transformer.setParameter(key.ToString(), value); }
}
Source src = new StreamSource(xmlfile);
Result res = new SAXResult(fop.getDefaultHandler());
transformer.transform(src, res); } catch (Exception e1) { System.Console.WriteLine(e1.Message); } finally { outputStream.close(); }
} catch (Exception ex) { System.Console.WriteLine(ex.Message); } } |
Der Fehler passiert in der Zeile 23:
C#-Quelltext
1:
| TransformerFactory factory = TransformerFactory.newInstance(); |
Verwendete IKVM-Version: 0.46.0.1
Eingebundene jar's:
avalon-framework-4.2.0.jar
batik-all-1.7.jar
commons-io-1.3.1.jar
commons-logging-1.0.4.jar
fop.jar
serializer-2.7.0.jar
xalan-2.7.0.jar
xercesImpl-2.7.1.jar
xml-apis-1.3.04.jar
xml-apis-ext-1.3.04.jar
xmlgraphics-commons-1.4.jar
Was ist hier falsch???
Worin liegt der Fehler? Habe ich etwas vergessen einzubinden?
Moderiert von
Christian S.: Code- durch C#-Tags ersetzt