2016-08-21 6 views
1

ジャージー2.22.1からバージョン2.22.2にアップグレードすることはできません。
階層:build.gradleから
enter image description here
依存関係セクション:
ジャージ2.22.1からジャージ2.22.2

def jerseyVersion = '2.22.1' 
def hk2Version = '2.4.0-b31' 
def giuceVersion = '4.0' 

dependencies { 
    //javax 
    compile "javax.servlet:javax.servlet-api:3.1.0" 
    //jersey 
    compile "org.glassfish.jersey.core:jersey-server:${jerseyVersion}" 
    compile "org.glassfish.jersey.containers:jersey-container-servlet:${jerseyVersion}" 
    //hk2 
    compile "org.glassfish.hk2:guice-bridge:${hk2Version}" 
    //guice 
    compile "com.google.inject:guice:${giuceVersion}" 
    compile "com.google.inject.extensions:guice-servlet:${giuceVersion}" 
} 

ファイルweb.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 

    <display-name>REST API App</display-name> 

    <listener> 
     <listener-class>com.example.core.JerseyGuiceServletContextListener</listener-class> 
    </listener> 

    <filter> 
     <filter-name>guiceFilter</filter-name> 
     <filter-class>com.google.inject.servlet.GuiceFilter</filter-class> 
    </filter> 

    <filter-mapping> 
     <filter-name>guiceFilter</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 

</web-app> 

クラスJerseyGuiceServletContextListener:

package com.example.core; 

import com.google.inject.Guice; 
import com.google.inject.Injector; 
import com.google.inject.servlet.GuiceServletContextListener; 

public class JerseyGuiceServletContextListener extends GuiceServletContextListener { 
    @Override 
    protected Injector getInjector() { 
     return Guice.createInjector(new JerseyServletModuleConfig()); 
    } 
} 

クラスJerseyServletModuleConfig:

package com.example.core; 

import com.google.inject.Scopes; 
import com.google.inject.servlet.ServletModule; 
import com.example.ws.HeyResource; 
import org.glassfish.jersey.servlet.ServletContainer; 

import java.util.Map; 
import java.util.TreeMap; 

class JerseyServletModuleConfig extends ServletModule { 
    @Override 
    protected void configureServlets() { 
     Map<String, String> servletContainerParams = new TreeMap<>(); 
     servletContainerParams.put("javax.ws.rs.Application", JerseyConfiguration.class.getCanonicalName()); 
     bind(ServletContainer.class).in(Scopes.SINGLETON); 
     filter("/*").through(ServletContainer.class, servletContainerParams); 
     bind(HeyResource.class).in(Scopes.SINGLETON); 
    } 
} 

クラスJerseyConfiguration:

package com.example.core; 

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; 
import javax.servlet.ServletContext; 

class JerseyConfiguration extends ResourceConfig { 
    @Inject 
    public JerseyConfiguration(ServiceLocator serviceLocator, ServletContext servletContext) { 
     packages("com.example.ws"); 
     GuiceBridge.getGuiceBridge().initializeGuiceBridge(serviceLocator); 
     GuiceIntoHK2Bridge guiceBridge = serviceLocator.getService(GuiceIntoHK2Bridge.class); 
     guiceBridge.bridgeGuiceInjector((Injector) servletContext.getAttribute(Injector.class.getName())); 
    } 
} 

バージョンでは2.22.1ジャージーすべてが完璧に動作します。

21 - 8月 - 2016年12:34:12.577 SEVERE [localhostを-startStop-1] org.apache.catalina.core - できるだけ早く私は2.22.2にバージョンを変更すると、私は例外が発生しました.StandardContext.filterStart例外 org.glassfish.jersey.servlet.ServletContainer.initでorg.glassfish.jersey.servlet.init.FilterUrlMappingsProviderImpl.getFilterUrlMappings(FilterUrlMappingsProviderImpl.java:66) でフィルタguiceFilter java.lang.NullPointerExceptionが出発(ServletContainer.java:444)

私はそれがguiceブリッジバージョンでカバーすることができる問題を考えた。私はバージョン2.4.0-b31から2.4.0-b34(org.glassfish.jersey.core:jersey-serverのさまざまなhk2依存に使用されています)で置き換えました。クラスFilterUrlMappingsProviderImplへ

リンク:https://github.com/jersey/jersey/blob/79d7767be5102f57520cf23900cad3a7ef4230ad/containers/jersey-servlet/src/main/java/org/glassfish/jersey/servlet/init/FilterUrlMappingsProviderImpl.java

説明クラスFilterUrlMappingsProviderImpl上記のリンクからは、FilterRegistrationクラスのオブジェクトを取得することは不可能であることが明らかになりました。

問題はありますか?彼女の決定について何をアドバイスできますか?おかげさまで

答えて

0

ソリューション


ファイルweb.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 

    <display-name>REST API App</display-name> 

    <listener> 
     <listener-class>com.example.core.JerseyGuiceServletContextListener</listener-class> 
    </listener> 

    <filter> 
     <filter-name>guiceFilter</filter-name> 
     <filter-class>com.google.inject.servlet.GuiceFilter</filter-class> 
    </filter> 

    <filter-mapping> 
     <filter-name>guiceFilter</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 

    <filter> 
     <filter-name>jerseyFilter</filter-name> 
     <filter-class>org.glassfish.jersey.servlet.ServletContainer</filter-class> 
     <init-param> 
      <param-name>javax.ws.rs.Application</param-name> 
      <param-value>com.example.core.JerseyConfiguration</param-value> 
     </init-param> 
    </filter> 
    <filter-mapping> 
     <filter-name>jerseyFilter</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 

</web-app> 

クラスJerseyServletModuleConfig:

package com.example.core; 

import com.google.inject.Scopes; 
import com.google.inject.servlet.ServletModule; 
import com.example.ws.HeyResource; 
import org.glassfish.jersey.servlet.ServletContainer; 

import java.util.Map; 
import java.util.TreeMap; 

class JerseyServletModuleConfig extends ServletModule { 
    @Override 
    protected void configureServlets() { 
     bind(HeyResource.class).in(Scopes.SINGLETON); 
    } 
} 
関連する問題