2016-01-12 3 views
1

Ну, у GeneralUtilities нет даже метода getSystemProperty, поэтому не так странно, что он терпит неудачу.Еще одна ошибка Guice + Jersey NoSuchMethodError

Каков наилучший способ справиться с этим? Развертывание профиля Liberty.

Ошибка:

[1/12/16 15:01:58:482 CET] 00000027 com.ibm.ws.webcontainer.servlet        E SRVE0271E: Uncaught init() exception created by servlet [Jersey Web Application] in application [Agent-1.0.0-SNAPSHOT]: java.lang.NoSuchMethodError: org/glassfish/hk2/utilities/general/GeneralUtilities.getSystemProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; 
     at org.jvnet.hk2.internal.ServiceLocatorImpl.<clinit>(ServiceLocatorImpl.java:122) 
    at org.jvnet.hk2.external.generator.ServiceLocatorGeneratorImpl.initialize(ServiceLocatorGeneratorImpl.java:66) 
    at org.jvnet.hk2.external.generator.ServiceLocatorGeneratorImpl.create(ServiceLocatorGeneratorImpl.java:98) 
    at org.glassfish.hk2.internal.ServiceLocatorFactoryImpl.internalCreate(ServiceLocatorFactoryImpl.java:312) 
    at org.glassfish.hk2.internal.ServiceLocatorFactoryImpl.create(ServiceLocatorFactoryImpl.java:268) 
    at org.glassfish.jersey.internal.inject.Injections._createLocator(Injections.java:138) 
    at org.glassfish.jersey.internal.inject.Injections.createLocator(Injections.java:123) 
    at org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:308) 
    at org.glassfish.jersey.servlet.WebComponent.<init>(WebComponent.java:338) 
     at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:171) 
     at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:363) 
     at javax.servlet.GenericServlet.init(GenericServlet.java:244) 
     at com.ibm.ws.webcontainer.servlet.ServletWrapper.init(ServletWrapper.java:332) 
     at com.ibm.ws.webcontainer.servlet.ServletWrapper.loadOnStartupCheck(ServletWrapper.java:1423) 
     at com.ibm.ws.webcontainer.webapp.WebApp.doLoadOnStartupActions(WebApp.java:1180) 
     at com.ibm.ws.webcontainer.webapp.WebApp.commonInitializationFinally(WebApp.java:1148) 
     at com.ibm.ws.webcontainer.webapp.WebApp.initialize(WebApp.java:1054) 
     at com.ibm.ws.webcontainer.webapp.WebApp.initialize(WebApp.java:6448) 
     at com.ibm.ws.webcontainer.osgi.DynamicVirtualHost.startWebApp(DynamicVirtualHost.java:446) 
     at com.ibm.ws.webcontainer.osgi.DynamicVirtualHost.startWebApplication(DynamicVirtualHost.java:441) 
     at com.ibm.ws.webcontainer.osgi.WebContainer.startWebApplication(WebContainer.java:980) 
     at com.ibm.ws.webcontainer.osgi.WebContainer.startModule(WebContainer.java:804) 
     at com.ibm.ws.app.manager.web.internal.WebModuleHandlerImpl.deployModule(WebModuleHandlerImpl.java:102) 
     at com.ibm.ws.app.manager.module.internal.DeployedAppInfoBase.deployModule(DeployedAppInfoBase.java:874) 
     at com.ibm.ws.app.manager.module.internal.DeployedAppInfoBase.deployModules(DeployedAppInfoBase.java:834) 
     at com.ibm.ws.app.manager.module.internal.DeployedAppInfoBase.deployApp(DeployedAppInfoBase.java:821) 
     at com.ibm.ws.app.manager.war.internal.WARApplicationHandlerImpl.install(WARApplicationHandlerImpl.java:80) 
     at com.ibm.ws.app.manager.internal.statemachine.StartAction.execute(StartAction.java:139) 
     at com.ibm.ws.app.manager.internal.statemachine.ApplicationStateMachineImpl.enterState(ApplicationStateMachineImpl.java:1168) 
     at com.ibm.ws.app.manager.internal.statemachine.ApplicationStateMachineImpl.run(ApplicationStateMachineImpl.java:781) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1143) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:618) 
     at java.lang.Thread.run(Thread.java:785) 

JerseyConfig

import com.google.inject.Guice; 
import com.google.inject.Injector; 
import org.glassfish.hk2.api.ServiceLocator; 
import org.glassfish.jersey.server.ResourceConfig; 
import org.jvnet.hk2.guice.bridge.api.GuiceBridge; 
import org.jvnet.hk2.guice.bridge.api.GuiceIntoHK2Bridge; 

import javax.inject.Inject; 

public class JerseyConfig extends ResourceConfig { 

    @Inject 
    public JerseyConfig(ServiceLocator locator) { 
     packages("no.services.agent"); 

     GuiceBridge.getGuiceBridge().initializeGuiceBridge(locator); 
     // add your Guice modules. 
     Injector injector = Guice.createInjector(new GuiceModule()); 
     GuiceIntoHK2Bridge guiceBridge = locator.getService(GuiceIntoHK2Bridge.class); 
     guiceBridge.bridgeGuiceInjector(injector); 
    } 
} 

SelftestResource

@Path("/") 
@Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON, MediaType.TEXT_XML, MediaType.TEXT_HTML}) 
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON, MediaType.TEXT_XML, MediaType.TEXT_HTML}) 
public class SelftestResource { 

    @GET 
    public Response selftest(){ 
     return Response.ok().build(); 
    } 
} 

web.xml

<servlet> 
    <servlet-name>Jersey Web Application</servlet-name> 
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 
    <init-param> 
     <param-name>javax.ws.rs.Application</param-name> 
     <param-value>com.services.agent.guice.JerseyConfig</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

pom.xml

<dependencyManagement> 
    <dependencies> 
    <dependency> 
     <groupId>org.glassfish.jersey</groupId> 
     <artifactId>jersey-bom</artifactId> 
     <version>${jersey.version}</version> 
     <type>pom</type> 
     <scope>import</scope> 
    </dependency> 
    </dependencies> 
</dependencyManagement> 

<dependencies> 

<dependency> 
    <groupId>com.google.inject.extensions</groupId> 
    <artifactId>guice-servlet</artifactId> 
    <version>3.0</version> 
</dependency> 
<dependency> 
    <groupId>org.glassfish.hk2</groupId> 
    <artifactId>guice-bridge</artifactId> 
    <version>2.4.0</version> 
</dependency> 
<dependency> 
    <groupId>com.google.inject.extensions</groupId> 
    <artifactId>guice-multibindings</artifactId> 
    <version>3.0</version> 
</dependency> 


<dependency> 
    <groupId>org.glassfish.jersey.containers</groupId> 
    <artifactId>jersey-container-servlet-core</artifactId> 
</dependency> 
<dependency> 
    <groupId>org.glassfish.jersey.media</groupId> 
    <artifactId>jersey-media-moxy</artifactId> 
</dependency> 
<dependency> 
    <groupId>javax.servlet</groupId> 
    <artifactId>javax.servlet-api</artifactId> 
    <version>3.1.0</version> 
</dependency> 
</dependencies> 
+1

Держу пари версии HK2 приносимого джерси -bom и версии с мостами-направляющими не совпадают. Можете ли вы сделать mvn зависимость: дерево и посмотреть, какие версии hk2 используются? – jwells131313

+0

Если вы хотите проверить способ бедного человека, прокомментируйте зависимость от наложения моста и посмотрите на свои банки, чтобы посмотреть, какая версия зависимостей HK2 вытягивается Джерси. Затем соответствующим образом измените версию маршрута. Я на 99,5% уверен, что jwells131313 прав. –

+0

Это правильно. jersey-container-servlet использует 2.4.0-b31. Разве не странно иметь зависимости от бета-версии в выпуске? – J2B

ответ

0

Основываясь на том, что вы сказали, я считаю, что исправление использовать версию 2.4.0-B31 в Guice моста