Confirming that jar files are being loaded

How can I confirm that my JAR files have been loaded in Coldfusion? I'm on CF10.

I'm currently getting this error:

Could not find the ColdFusion component or interface org.apache.batik.transcoder.image.PNGTranscoder. 

My site structure goes as follow:

/root
/root/application.cfc
/root/jar/batik-1.7/

In my application.cfc, I have the following code:

<cfset This.javaSettings = {loadPaths: ["jar/"],loadColdFusionClassPath: true,reloadOnChange: true,watchInterval: 2}>

Here is my code in terms of calling everything:

<cffunction name="getPng" access="public" output="true">        
    <cfsavecontent variable="out">
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
         width="612px" height="792px" viewBox="0 0 612 792" enable-background="new 0 0 612 792" xml:space="preserve">
    <path fill="##006838" stroke="##414042" stroke-miterlimit="10" d="M416.413,388.223c0,6.627-5.373,12-12,12H140.317
        c-6.627,0-12-5.373-12-12V272.54c0-6.627,5.373-12,12-12h264.096c6.627,0,12,5.373,12,12V388.223z"/>
    <text id="HomeScore" transform="matrix(1 0 0 1 358.5391 361.333)" fill="##F1F2F2" font-family="'ArialMT'" font-size="24">3</text>
    <text id="Home" transform="matrix(1 0 0 1 155.3018 361.333)" fill="##F1F2F2" font-family="'ArialMT'" font-size="24">TEAM B</text>
    <text id="VisitorScore" transform="matrix(1 0 0 1 358.5391 301.8096)" fill="##F1F2F2" font-family="'ArialMT'" font-size="24">2</text>
    <text id="Visitor" transform="matrix(1 0 0 1 155.3018 301.8096)" fill="##F1F2F2" font-family="'ArialMT'" font-size="24">TEAM A</text>
    </svg>
    </cfsavecontent>

    <cfreturn out>
</cffunction>

<cffunction name="renderPng" access="public" output="false">
    <cfscript>

        /*http://cfsearching.blogspot.ca/2008/02/cool-text-effects-with-svg-and-batik.html*/
        pngPath = "test.png";
        pngFile = expandPath(pngPath);

        transcoder = createObject("java", "org.apache.batik.transcoder.image.PNGTranscoder").init();
        inputStream = createObject("java", "java.io.StringBufferInputStream").init(getPng());
        input = createObject("java", "org.apache.batik.transcoder.TranscoderInput").init(inputStream);
        outputStream = createObject("java", "java.io.FileOutputStream").init(ExpandPath(pngFile));
        output = createObject("java", "org.apache.batik.transcoder.TranscoderOutput").init(outputStream);
        transcoder.transcode(input, output);
        outputStream.close();

        return pngFile;
    </cfscript>

</cffunction>

<cfscript>
    // CREATE OBJECT 
    obj = createObject("component", "#request.cfcPath#.utils");
    // CALL THE FUNCTION
    png = obj.renderPng();
</cfscript>

Update #1

I was checking in the administor and found Settings Summary , which listed CF Server Java Class Path . I added the location of my jar files and rebooted the server. Even though the path is present in the class path in the Administrator, I still get that same error.

Update 2

Added the missing attribute "type" and getting the following error:

java.lang.NoClassDefFoundError: org/apache/batik/dom/util/DocumentFactory

Line 554: transcoder = createObject("java", "org.apache.batik.transcoder.image.PNGTranscoder").init();

Full stack trace

java.lang.ClassNotFoundException: org.apache.batik.dom.util.DocumentFactory at coldfusion.bootstrap.BootstrapClassLoader.loadClass(BootstrapClassLoader.java:235) at java.lang.ClassLoader.loadClass(ClassLoader.java:356) at java.lang.Class.getDeclaredFields0(Native Method) at java.lang.Class.privateGetDeclaredFields(Class.java:2317) at java.lang.Class.privateGetPublicFields(Class.java:2350) at java.lang.Class.getFields(Class.java:1378) at coldfusion.runtime.java.ObjectHandler.Initialize(ObjectHandler.java:35) at coldfusion.runtime.java.ObjectHandler.(ObjectHandler.java:30) at coldfusion.runtime.java.ReflectionCache.get(ReflectionCache.java:38) at coldfusion.runtime.java.JavaProxy.(JavaProxy.java:35) at coldfusion.runtime.java.JavaProxyFactory.getProxy(JavaProxyFactory.java:117) at coldfusion.runtime.ProxyFactory.getProxy(ProxyFactory.java:65) at coldfusion.runtime.CFPage.createObjectProxy(CFPage.java:5747) at coldfusion.runtime.CFPage.CreateObject(CFPage.java:5710) at coldfusion.runtime. CFPage.CreateObject(CFPage.java:5644) at coldfusion.runtime.CFPage.CreateObject(CFPage.java:5619) at coldfusion.runtime.CFPage.CreateObject(CFPage.java:5566) at cfutils2ecfc521921384$funcRENDERPNG.runFunction(C:websitesmgs_bootstrapbasiccfcutils.cfc:554) at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:472) at coldfusion.filter.SilentFilter.invoke(SilentFilter.java:47) at coldfusion.runtime.UDFMethod$ArgumentCollectionFilter.invoke(UDFMethod.java:368) at coldfusion.filter.FunctionAccessFilter.invoke(FunctionAccessFilter.java:55) at coldfusion.runtime.UDFMethod.runFilterChain(UDFMethod.java:321) at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:220) at coldfusion.runtime.TemplateProxy.invoke(TemplateProxy.java:655) at coldfusion.runtime.TemplateProxy.invoke(TemplateProxy.java:444) at coldfusion.runtime.TemplateProxy.invoke(TemplateProxy.java:414) at coldfusion.runtime.CfJspPage._invoke(CfJspPage.java:2432) at cfsvgtest2ecfm1573707502.runPage(C:websitesmgs_bootstrapsvgte st.cfm:5) at coldfusion.runtime.CfJspPage.invoke(CfJspPage.java:244) at coldfusion.tagext.lang.IncludeTag.doStartTag(IncludeTag.java:444) at coldfusion.runtime.CfJspPage._emptyTcfTag(CfJspPage.java:2799) at cfapplication2ecfc733577694$funcONREQUEST.runFunction(C:websitesmgs_bootstrapapplication.cfc:87) at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:472) at coldfusion.runtime.UDFMethod$ArgumentCollectionFilter.invoke(UDFMethod.java:368) at coldfusion.filter.FunctionAccessFilter.invoke(FunctionAccessFilter.java:55) at coldfusion.runtime.UDFMethod.runFilterChain(UDFMethod.java:321) at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:220) at coldfusion.runtime.TemplateProxy.invoke(TemplateProxy.java:655) at coldfusion.runtime.TemplateProxy.invoke(TemplateProxy.java:444) at coldfusion.runtime.TemplateProxy.invoke(TemplateProxy.java:414) at coldfusion.runtime.AppEventInvoker.invoke(AppEventInvoker.java:108) at coldfusion.runtime.AppEventInvoker.onRequest(AppEventInvoker.java:300) at coldfusion.filter.ApplicationFilter.invoke(ApplicationFilter.java:418) at coldfusion.filter.RequestMonitorFilter.invoke(RequestMonitorFilter.java:48) at coldfusion.filter.MonitoringFilter.invoke(MonitoringFilter.java:40) at coldfusion.filter.PathFilter.invoke(PathFilter.java:112) at coldfusion.filter.LicenseFilter.invoke(LicenseFilter.java:30) at coldfusion.filter.ExceptionFilter.invoke(ExceptionFilter.java:94) at coldfusion.filter.BrowserDebugFilter.invoke(BrowserDebugFilter.java:79) at coldfusion.filter.ClientScopePersistenceFilter.invoke(ClientScopePersistenceFilter.java:28) at coldfusion.filter.BrowserFilter.invoke(BrowserFilter.java:38) at coldfusion.filter.NoCacheFilter.invoke(NoCacheFilter.java:46) at coldfusion.filter.GlobalsFilter.invoke(GlobalsFilter.java:38) at coldfusion.filter.DatasourceFilter.invoke(DatasourceFilter.java:22) at coldfusion.filter.CachingFilter.invoke(CachingFilter.java:62) at coldfusion.CfmServlet.service(CfmServlet.java:204) at coldfusion.bootstrap.Bo otstrapServlet.service(BootstrapServlet.java:89) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at coldfusion.monitor.event.MonitoringServletFilter.doFilter(MonitoringServletFilter.java:42) at coldfusion.bootstrap.BootstrapFilter.doFilter(BootstrapFilter.java:46) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) at org.apache.catalina.valves.ErrorReportValve.inv oke(ErrorReportValve.java:98) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:928) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:414) at org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:203) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:539) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:298) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:722)

Update 3

I have this in my application.cfc

<cfset This.javaSettings = {loadPaths: ["jar/"],loadColdFusionClassPath: false,reloadOnChange: true,watchInterval: 2}>

I called onApplicationStart() and still getting that same error.

At this point, I have removed my entry in the ColdFusion Class Path and it's now back to the default value which is empty.

I want it to work loading the jar files using the javaSettings variable as I'm on shared hosting.


Update:

(Summary from chat) Batik 1.7 includes newer versions of two xml parsing libraries that are already bundled with CF 10. Loading both versions will cause a ClassCastException

org.apache.xerces.jaxp.SAXParserFactoryImpl cannot be cast to javax.xml.parsers.SAXParserFactory

To avoid that error, remove these two xml jars from the batik-1.7/lib directory so they are not loaded:

  /batik-1.7/lib/xerces_2_5_0.jar
  /batik-1.7/lib/xml-apis.jar

Also, loadPaths is not recursive. So if there are any jars contained in subfolders, you must include the path of those subfolders as well. ie

   This.javaSettings = {loadPaths: ["/jar/batik-1.7","/jar/batik-1.7/lib"]};

If you make changes to the this.javaSettings , be sure to restart the application to ensure the changes are applied.


Could not find the ColdFusion component or interface

When you use createObject , you need to include the object "type". Otherwise, it uses the default type "component". Meaning CF is searching for a component/cfc with the path you supplied ie "org.apache.batik.transcoder.image.PNGTranscoder". Since your application probably does not contain a cfc with that path, that is why you are getting the error message above.

Add type "java" to all of your createObject calls and it should work:

createObject("java", "org.apache.batik.transcoder.image.PNGTranscoder").init();
链接地址: http://www.djcxy.com/p/22372.html

上一篇: Unity如何与C#类一起工作

下一篇: 确认正在加载jar文件