我有一個註釋在Java8我不能繼承一個被覆蓋的繼承註釋
@Qualifier
@Inherited
@Target({ElementType.TYPE, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface InheritedQualifier {
public String value();
}
和我有四個類,利用它。
- 母公司擁有
@InheritedQualifier("original")
- 兒童延伸父,但不做任何修改
- 如GrandChild延伸家長和具有
@InheritedQualifier("override")
- GreatGrandChild延伸,如GrandChild但不做任何修改
全部四類還使用唯一的名稱實現@Named。最後,我有第五類與以下注射:
@Inject @InheritedQualifier("original") @Named("parent") Parent parent;
@Inject @InheritedQualifier("original") @Named("child") Child child;
@Inject @InheritedQualifier("override") @Named("grandChild") GrandChild grandChild;
@Inject @InheritedQualifier("override") @Named("greatGrandChild") GreatGrandChild greatGrandChild;
現在這是奇怪的事情。當我在Oracle的Java7上運行它時,它工作正常。當我在Java8上運行它時,它無法注入GreatGrandChild。這裏的錯誤信息:
javax.enterprise.inject.UnsatisfiedResolutionException: Api type [com.ibm.ws.fat.jcdi.inheritance.GreatGrandChild] is not found with the qualifiers
Qualifiers:[@javax.inject.Named(value=greatGrandChild),@com.ibm.ws.fat.jcdi.inheritance.InheritedQualifier(value=override)]
for injection into Field Injection Point, field name : greatGrandChild, Bean Owner : [MyBean, Name:myBean, WebBeans Type:MANAGED, API Types:[com.ibm.ws.fat.jcdi.inheritance.MyBean,java.lang.Object], Qualifiers:[javax.enterprise.inject.Default,javax.enterprise.inject.Any,javax.inject.Named]]
at org.apache.webbeans.util.InjectionExceptionUtils.throwUnsatisfiedResolutionException(InjectionExceptionUtils.java:77)
at org.apache.webbeans.container.InjectionResolver.checkInjectionPoints(InjectionResolver.java:193)
at org.apache.webbeans.container.BeanManagerImpl.validate(BeanManagerImpl.java:1031)
at org.apache.webbeans.config.BeansDeployer.validate(BeansDeployer.java:444)
at org.apache.webbeans.config.BeansDeployer.validateInjectionPoints(BeansDeployer.java:383)
at org.apache.webbeans.config.BeansDeployer.deploy(BeansDeployer.java:184)
at org.apache.webbeans.lifecycle.AbstractLifeCycle.startApplication(AbstractLifeCycle.java:155)
at org.apache.webbeans.web.lifecycle.WebContainerLifecycle.startApplication(WebContainerLifecycle.java:97)
at com.ibm.ws.webbeans.WebBeansInitializer.onStartup(WebBeansInitializer.java:70)
at com.ibm.ws.webcontainer.webapp.WebApp.initializeServletContainerInitializers(WebApp.java:2485)
at com.ibm.ws.webcontainer.webapp.WebApp.initialize(WebApp.java:1038)
at com.ibm.ws.webcontainer.webapp.WebApp.initialize(WebApp.java:6404)
at com.ibm.ws.webcontainer.osgi.DynamicVirtualHost.startWebApp(DynamicVirtualHost.java:446)
at com.ibm.ws.webcontainer.osgi.DynamicVirtualHost.createRunnableHandler(DynamicVirtualHost.java:248)
at com.ibm.ws.webcontainer.osgi.DynamicVirtualHost.createRunnableHandler(DynamicVirtualHost.java:313)
at com.ibm.ws.http.internal.VirtualHostImpl.discriminate(VirtualHostImpl.java:251)
at com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink.ready(HttpDispatcherLink.java:306)
at com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:449)
at com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.handleNewRequest(HttpInboundLink.java:383)
at com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.processRequest(HttpInboundLink.java:283)
at com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.ready(HttpInboundLink.java:254)
at com.ibm.ws.tcpchannel.internal.NewConnectionInitialReadCallback.sendToDiscriminators(NewConnectionInitialReadCallback.java:174)
at com.ibm.ws.tcpchannel.internal.NewConnectionInitialReadCallback.complete(NewConnectionInitialReadCallback.java:83)
at com.ibm.ws.tcpchannel.internal.WorkQueueManager.requestComplete(WorkQueueManager.java:504)
at com.ibm.ws.tcpchannel.internal.WorkQueueManager.attemptIO(WorkQueueManager.java:574)
at com.ibm.ws.tcpchannel.internal.WorkQueueManager.workerRun(WorkQueueManager.java:929)
at com.ibm.ws.tcpchannel.internal.WorkQueueManager$Worker.run(WorkQueueManager.java:1018)
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:744)
其他三個注射的工作很好。
我在IBM Websphere Liberty Profile上運行此應用程序。
有沒有人有任何想法爲什麼這段代碼不能從Java7移植到Java8?
唯一的區別是使用的JVM。我運行服務器它工作正常,然後我關閉服務器,更改JAVA_HOME,再次啓動,並出現問題。 – 2015-03-03 12:35:39
不同的java版本之間有細微的差異,也許你只是構建其中一個... – 2015-03-09 11:10:23