Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法强制转换到相同类型的不同JAR(Apache FOP、URL类加载器)_Java_Apache_Casting_Classloader_Apache Fop - Fatal编程技术网

Java 无法强制转换到相同类型的不同JAR(Apache FOP、URL类加载器)

Java 无法强制转换到相同类型的不同JAR(Apache FOP、URL类加载器),java,apache,casting,classloader,apache-fop,Java,Apache,Casting,Classloader,Apache Fop,使用 我想使用一个特定的Fop框架,而不是已经加载到类路径中的Fop框架。 通过java反射尝试初始化此特定类,我收到以下错误: org.apache.fop.apps.FopFactory cannot be cast to org.apache.fop.apps.FopFactory 测试类: import java.lang.reflect.Constructor; import java.lang.reflect.Method; import org.apache.fop.apps.F

使用 我想使用一个特定的Fop框架,而不是已经加载到类路径中的Fop框架。 通过java反射尝试初始化此特定类,我收到以下错误:

org.apache.fop.apps.FopFactory cannot be cast to org.apache.fop.apps.FopFactory
测试类:

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import org.apache.fop.apps.FopFactory;

public class FOPTest {

    private FopFactory fopFactory;

    public FOPTest() {
        try {
            DirectoryBasedParentLastURLClassLoader classLoader = new DirectoryBasedParentLastURLClassLoader(
                    "C:\\path\\To\\FOP\\Jar\\Fop10" );
            Class<FopFactory>classManuallyLoaded = (Class<FopFactory>) classLoader
                    .loadClass("org.apache.fop.apps.FopFactory");
            for (Method method : classManuallyLoaded.getMethods()) {
                method.setAccessible(true);
            }
            for(Constructor consr : classManuallyLoaded.getDeclaredConstructors()) {
                consr.setAccessible(true);
            }   
            Method methodToString = classManuallyLoaded.getMethod("newInstance");
            Object res=null;
            methodToString.setAccessible(true);
            try {
                res = methodToString.invoke(classManuallyLoaded.newInstance());
            } catch (Exception e) {
                System.out.println("Error protected: " + e);
                res = methodToString.invoke (classManuallyLoaded);
            }

            System.out.println("GET CLASS: "  + res.getClass());
            if(res  instanceof FopFactory) {
                System.out.println("Instance of FopFactory");
            }
            this.fopFactory =  (FopFactory) res;
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args)  {
        new FOPTest();
    }

}
import java.lang.reflect.Constructor;
导入java.lang.reflect.Method;
导入org.apache.fop.apps.FopFactory;
公开课{
私营工厂;
公共福利{
试一试{
DirectoryBasedParentLassLoader类加载器=新的DirectoryBasedParentLassLoader类加载器(
“C:\\path\\To\\FOP\\Jar\\Fop10”);
ClassclassManuallyLoaded=(类)类加载器
.loadClass(“org.apache.fop.apps.FopFactory”);
对于(方法:classManuallyLoaded.getMethods()){
方法setAccessible(true);
}
对于(构造函数consr:classManuallyLoaded.getDeclaredConstructors()){
consr.setAccessible(true);
}   
方法methodToString=classManuallyLoaded.getMethod(“newInstance”);
对象res=null;
methodToString.setAccessible(true);
试一试{
res=methodToString.invoke(classManuallyLoaded.newInstance());
}捕获(例外e){
System.out.println(“错误保护:+e”);
res=methodToString.invoke(classManuallyLoaded);
}
System.out.println(“获取类:+res.getClass());
if(FOPFFactory的res instanceof){
System.out.println(“FOPFFactory实例”);
}
this.fopFactory=(fopFactory)res;
}捕获(例外e){
e、 printStackTrace();
}
}
公共静态void main(字符串[]args){
新FOPTest();
}
}
和控制台输出

Error protected: java.lang.IllegalAccessException: Class showproject.FOPTest can not access a member of class org.apache.fop.apps.FopFactory with modifiers "protected"
GET CLASS: class org.apache.fop.apps.FopFactory
java.lang.ClassCastException: org.apache.fop.apps.FopFactory cannot be cast to org.apache.fop.apps.FopFactory
    at showproject.FOPTest.<init>(FOPTest.java:38)
    at showproject.FOPTest.main(FOPTest.java:45)
Error protected:java.lang.IllegalAccessException:Class showproject.FOPTest无法访问修饰符为“protected”的类org.apache.fop.apps.FopFactory的成员
获取类:CLASS org.apache.fop.apps.FopFactory
java.lang.ClassCastException:org.apache.fop.apps.FopFactory不能强制转换为org.apache.fop.apps.FopFactory
在showproject.FOPTest.(FOPTest.java:38)
位于showproject.FOPTest.main(FOPTest.java:45)

我希望有人能帮助我创建基于DirectoryBased类加载器类的FopFactory

外部基于DirectoryBased的类加载器似乎不能完美工作。使用java URLClassLoader不存在强制转换问题。Thx

似乎基于外部目录的类加载器无法完美工作。使用java URLClassLoader不存在强制转换问题。Thx

您确定org.apache.fop.apps.FopFactory是公共对象吗?您确定org.apache.fop.apps.FopFactory是公共对象吗?