2016-01-20 7 views
0

У меня есть следующий класс:Constructor.newInstance(): java.lang.IllegalArgumentException: аргумент типа несовпадение

public class DefaultContainer extends AbstractContainer { 

private JobBeanFactory jobBeanFactory; 

private ScheduleManager scheduleManager; 

/** 
* for local 
* @param classLoader 
* @param packagesToScan 
*/ 
public DefaultContainer(ClassLoader classLoader, String packagesToScan) { 
    super(classLoader, packagesToScan); 
    this.jobBeanFactory = new DefaultJobBeanFactory(); 
    Configuration configuration = new Configuration(classLoader); 
    this.scheduleManager = new DefaultScheduleManager(configuration, this.jobBeanFactory, getJobScanner().getJobDescriptorList()); 
} 

/** 
* for remote 
* @param configuration 
* @param packagesToScan 
* @param jarUrls 
*/ 
public DefaultContainer(Configuration configuration, String packagesToScan, String... jarUrls) { 
    super(packagesToScan, jarUrls); 
    this.jobBeanFactory = new DefaultJobBeanFactory(); 
    this.scheduleManager = new DefaultScheduleManager(configuration, this.jobBeanFactory, getJobScanner().getJobDescriptorList()); 
} 


public ScheduleManager scheduleManager() { 
    return scheduleManager; 
} 

} 

Затем я использую отражение для загрузки и создания экземпляра класса.

Class<Container> containerClass = (Class<Container>) classLoader.loadClass("xxxxx.DefaultContainer"); 
Constructor<Container> containerConstructor = containerClass.getConstructor(Configuration.class, String.class, String[].class); 
container = containerConstructor.newInstance(getConfiguration(), packagesToScan, new String[]{jarUrl}); 

Но при выполнении метода newInstance, то я получаю исключение:

com.zuoxiaolong.niubi.job.core.exception.NiubiException: java.lang.IllegalArgumentException: argument type mismatch 
at com.zuoxiaolong.niubi.job.cluster.node.AbstractRemoteJobNode.createContainer(AbstractRemoteJobNode.java:100) 
at com.zuoxiaolong.niubi.job.cluster.node.AbstractRemoteJobNode.getContainer(AbstractRemoteJobNode.java:67) 
at com.zuoxiaolong.niubi.job.cluster.node.MasterSlaveNode.executeOperation(MasterSlaveNode.java:264) 
at com.zuoxiaolong.niubi.job.cluster.node.MasterSlaveNode.access$1000(MasterSlaveNode.java:56) 
at com.zuoxiaolong.niubi.job.cluster.node.MasterSlaveNode$3.childEvent(MasterSlaveNode.java:253) 
at org.apache.curator.framework.recipes.cache.PathChildrenCache$5.apply(PathChildrenCache.java:516) 
at org.apache.curator.framework.recipes.cache.PathChildrenCache$5.apply(PathChildrenCache.java:510) 
at org.apache.curator.framework.listen.ListenerContainer$1.run(ListenerContainer.java:92) 
at com.google.common.util.concurrent.MoreExecutors$SameThreadExecutorService.execute(MoreExecutors.java:297) 
at org.apache.curator.framework.listen.ListenerContainer.forEach(ListenerContainer.java:83) 
at org.apache.curator.framework.recipes.cache.PathChildrenCache.callListeners(PathChildrenCache.java:507) 
at org.apache.curator.framework.recipes.cache.EventOperation.invoke(EventOperation.java:35) 
at org.apache.curator.framework.recipes.cache.PathChildrenCache$9.run(PathChildrenCache.java:759) 
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 
at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 
at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
at java.lang.Thread.run(Thread.java:745) 

Caused by: java.lang.IllegalArgumentException: argument type mismatch 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:422) 
    at com.zuoxiaolong.niubi.job.cluster.node.AbstractRemoteJobNode.createContainer(AbstractRemoteJobNode.java:98) 
    ... 19 more 

Может кто-нибудь мне помочь?

+0

Я убедитесь, что типы параметров все совпало с [. Configuration.class, String.class, String [] Класс] –

+0

Вы уверены, что 'getConfiguration() 'возвращает тот же класс' Configuration', что и параметр конструктора? Вы проверили 'packagesToScan' действительно' String'? – Mena

+0

Также вы явно бросаете свой класс как 'Class '. Если 'Container' является классом, имеет ли он соответствующий конструктор? – Mena

ответ

1

Попробуйте ввести String array в Object. Это должно помочь.

containerConstructor.newInstance(getConfiguration(), packagesToScan, (Object) new String[]{ jarUrl }); 

Here у кого-то такая же проблема:

Смежные вопросы