2017-08-01 15 views
0

私はいくつかのスプリングDIでジャージーを使用するアプリケーションのいくつかの統合テストを書こうとしています。テストは、本当の説明なしでいつも500として戻ってくる。 Grizzlyは大丈夫だと思っていて、冬眠している接続はうまく起動します。ここでは、テスト中のクラスに関連するすべての関連ファイルとともにエラートレースがあります。私はそれがGrizzlyと設定上の問題かもしれないと思うが、webappcontextへの切り替えを含めて動作するようなものは何も見つけられない。ジャージー/スプリング/グリズリー統合テストは常に500を返す - いいえ詳細

javax.ws.rs.InternalServerErrorException: HTTP 500 Request failed. 
    at org.glassfish.jersey.client.JerseyInvocation.convertToException(JerseyInvocation.java:1032) 
    at org.glassfish.jersey.client.JerseyInvocation.translate(JerseyInvocation.java:819) 
    at org.glassfish.jersey.client.JerseyInvocation.access$700(JerseyInvocation.java:92) 
    at org.glassfish.jersey.client.JerseyInvocation$2.call(JerseyInvocation.java:701) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:315) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:297) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:228) 
    at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:444) 
    at org.glassfish.jersey.client.JerseyInvocation.invoke(JerseyInvocation.java:697) 
    at org.glassfish.jersey.client.JerseyInvocation$Builder.method(JerseyInvocation.java:420) 
    at org.glassfish.jersey.client.JerseyInvocation$Builder.get(JerseyInvocation.java:316) 
    at com.heapo.test.intergration.resources.UserResourceTest.test_getUser(UserResourceTest.java:25) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) 
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) 
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) 
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27) 
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363) 
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86) 
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:678) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192) 

テストクラス

package com.sample.test.intergration.resources; 

import static org.junit.Assert.assertEquals; 

import javax.ws.rs.core.Application; 

import org.glassfish.jersey.server.ResourceConfig; 
import org.glassfish.jersey.test.JerseyTest; 
import org.glassfish.jersey.test.TestProperties; 
import org.junit.Test; 
import org.springframework.context.annotation.AnnotationConfigApplicationContext; 

import com.sample.models.User; 
import com.sample.rest.config.SampleApplication; 
import com.sample.spring.config.SpringSecurityConfig; 


public class UserResourceTest extends JerseyTest { 

    @Test 
    public void test_getUser() { 
     final User hello = target("user/1") 
           .request() 
           .header("Authorization", "BEARER xxx") 
          .get(User.class); 
    } 

    @Override 
    protected Application configure() { 
     enable(TestProperties.LOG_TRAFFIC); 
     enable(TestProperties.DUMP_ENTITY); 

     ResourceConfig rc = new ProgramProApplication(); 
     AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(SpringSecurityConfig.class); 
     rc.property("contextConfig", ctx); 

     return rc; 
    } 
} 

web.xmlが -に動作します - アプリケーションは、Tomcatの下で正常に動作し、私は郵便配達を経由して、全体のAPIにアクセスすることができます。

<?xml version="1.0" encoding="UTF-8"?> 
<web-app 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_3_0.xsd" 
    version="3.0"> 
    <display-name>Sample API</display-name> 
    <servlet> 
     <servlet-name>Sample API</servlet-name> 
     <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 
     <init-param> 
      <param-name>javax.ws.rs.Application</param-name> 
      <param-value>com.sample.rest.config.SampleApplication</param-value> 
     </init-param> 
     <init-param> 
      <param-name>jersey.config.server.provider.classnames</param-name> 
      <param-value>org.glassfish.jersey.media.multipart.MultiPartFeature</param-value> 
     </init-param>   
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>Sample API</servlet-name> 
     <url-pattern>/rest/*</url-pattern> 
    </servlet-mapping> 

    <context-param> 
     <param-name>contextClass</param-name> 
     <param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value> 
    </context-param> 
    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>com.sample.spring.config.SpringSecurityConfig</param-value> 
    </context-param> 

    <filter> 
     <filter-name>springSecurityFilterChain</filter-name> 
     <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
    </filter> 
    <filter-mapping> 
     <filter-name>springSecurityFilterChain</filter-name> 
     <url-pattern>/*</url-pattern> 
     <dispatcher>REQUEST</dispatcher> 
    </filter-mapping> 

    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 
</web-app> 

のpom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
     <modelVersion>4.0.0</modelVersion> 
     <groupId>sample-api</groupId> 
     <artifactId>sample-api</artifactId> 
     <packaging>war</packaging> 
    <version>0.0.1-SNAPSHOT</version> 
    <name>sample-api Maven Webapp</name> 
    <url>http://maven.apache.org</url> 
    <properties> 
     <jersey.version>2.23.2</jersey.version> 
     <jersey.scope>compile</jersey.scope> 
     <spring.version>4.1.0.RELEASE</spring.version> 
     <hibernate.version>5.2.2.Final</hibernate.version> 
     <mysql.version>5.1.37</mysql.version> 
    </properties> 
    <dependencies> 
     <!-- Jersey core Servlet 2.x implementation --> 
     <dependency> 
      <groupId>org.glassfish.jersey.containers</groupId> 
      <artifactId>jersey-container-servlet-core</artifactId> 
      <version>${jersey.version}</version> 
      <scope>${jersey.scope}</scope> 
     </dependency> 

     <!-- Jersey JSON Jackson (2.x) entity providers support module --> 
     <dependency> 
      <groupId>org.glassfish.jersey.media</groupId> 
      <artifactId>jersey-media-json-jackson</artifactId> 
      <version>${jersey.version}</version> 
      <scope>${jersey.scope}</scope> 
     </dependency> 

     <dependency> 
      <groupId>org.glassfish.jersey.media</groupId> 
      <artifactId>jersey-media-multipart</artifactId> 
      <version>${jersey.version}</version> 
      <scope>${jersey.scope}</scope> 
     </dependency> 

     <!-- Jersey extension module providing support for Spring 3 integration --> 
     <dependency> 
      <groupId>org.glassfish.jersey.ext</groupId> 
      <artifactId>jersey-spring3</artifactId> 
      <version>${jersey.version}</version> 
      <scope>${jersey.scope}</scope> 
      <exclusions> 
       <exclusion> 
        <groupId>org.glassfish.hk2.external</groupId> 
        <artifactId>bean-validator</artifactId> 
       </exclusion>    
       <exclusion> 
        <groupId>org.springframework</groupId> 
        <artifactId>spring-core</artifactId> 
       </exclusion> 
       <exclusion> 
        <groupId>org.springframework</groupId> 
        <artifactId>spring-web</artifactId> 
       </exclusion> 
       <exclusion> 
        <groupId>org.springframework</groupId> 
        <artifactId>spring-beans</artifactId> 
       </exclusion> 
      </exclusions> 
     </dependency> 

     <!-- Spring Framework-4.x --> 
     <dependency> 
      <groupId>org.springframework.security</groupId> 
      <artifactId>spring-security-web</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.security</groupId> 
      <artifactId>spring-security-config</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 

     <!-- Hibernate Core 4.2.x --> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-core</artifactId> 
      <version>${hibernate.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-validator</artifactId> 
      <version>5.2.4.Final</version>  
     </dependency> 

     <!-- MySql-Connector --> 
     <dependency> 
      <groupId>mysql</groupId> 
      <artifactId>mysql-connector-java</artifactId> 
      <version>${mysql.version}</version> 
     </dependency> 

     <!-- Hibernate c3p0 connection pool --> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-c3p0</artifactId> 
      <version>${hibernate.version}</version> 
     </dependency> 

     <dependency> 
      <groupId>io.jsonwebtoken</groupId> 
      <artifactId>jjwt</artifactId> 
      <version>0.4</version> 
     </dependency> 
     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>javax.servlet-api</artifactId> 
      <version>3.0.1</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>commons-logging</groupId> 
      <artifactId>commons-logging</artifactId> 
      <version>1.2</version> 
     </dependency> 
     <dependency> 
      <groupId>javax.mail</groupId> 
      <artifactId>mail</artifactId> 
      <version>1.5.0-b01</version> 
     </dependency>  
     <dependency> 
      <groupId>commons-io</groupId> 
      <artifactId>commons-io</artifactId> 
      <version>2.5</version> 
     </dependency> 

     <!-- TEST DEPENDENCIES --> 
     <!-- Dependency for JUnit --> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>4.12</version> 
      <scope>test</scope> 
     </dependency> 

     <!-- Dependency for Mockito --> 
     <dependency> 
      <groupId>org.mockito</groupId> 
      <artifactId>mockito-all</artifactId> 
      <version>1.10.19</version> 
      <scope>test</scope> 
     </dependency> 

     <dependency> 
      <groupId>org.glassfish.jersey.test-framework</groupId> 
      <artifactId>jersey-test-framework-core</artifactId> 
      <version>${jersey.version}</version> 
      <scope>test</scope> 
     </dependency> 

     <dependency> 
      <groupId>org.glassfish.jersey.test-framework.providers</groupId> 
      <artifactId>jersey-test-framework-provider-grizzly2</artifactId> 
      <version>${jersey.version}</version> 
      <scope>test</scope> 
     </dependency> 

     <dependency> 
      <groupId>org.glassfish.jersey.containers</groupId> 
      <artifactId>jersey-container-grizzly2-http</artifactId> 
      <version>${jersey.version}</version> 
      <scope>test</scope>   
     </dependency> 
    </dependencies> 
    <build> 
    <finalName>sample-api</finalName> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>3.1</version> 
       <configuration> 
        <source>1.8</source> 
        <target>1.8</target> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-war-plugin</artifactId> 
       <version>2.6</version> 
       <configuration> 
        <failOnMissingWebXml>false</failOnMissingWebXml> 
       </configuration> 
      </plugin> 
     </plugins>  
    </build> 
</project> 

答えて

1

ほとんどのドキュメントと試行錯誤の数日後、日付の外にあった他の例から一緒に縫い合わせ、これは最終的に私のために働いていたものです。うまくいけば、それは他の誰かを助けるでしょう。

テストクラス

package com.sample.test.intergration.resources; 

import static org.junit.Assert.assertEquals; 

import javax.ws.rs.core.Application; 

import org.glassfish.jersey.server.ResourceConfig; 
import org.glassfish.jersey.test.JerseyTest; 
import org.glassfish.jersey.test.TestProperties; 
import org.junit.Test; 
import org.springframework.context.annotation.AnnotationConfigApplicationContext; 

import com.sample.models.User; 
import com.sample.rest.config.SampleApplication; 
import com.sample.spring.config.SpringSecurityConfig; 


public class UserResourceTest extends JerseyTest { 

    @Test 
    public void test_getUser() { 
     final User hello = target("user/1") 
          .request() 
          .header("Authorization", "BEARER xxx") 
          .get(User.class); 
    } 

    @Override 
    protected DeploymentContext configureDeployment() { 
     return ServletDeploymentContext 
       .forServlet(new ServletContainer(configureRC())) 
       .addListener(ContextLoaderListener.class) 
       .contextParam(ContextLoader.CONFIG_LOCATION_PARAM, SpringSecurityConfig.class.getPackage().getName()) 
       .contextParam(ContextLoader.CONTEXT_CLASS_PARAM, AnnotationConfigWebApplicationContext.class.getName()) 
       .addFilter(DelegatingFilterProxy.class, "springSecurityFilterChain") 
       .build();  
    } 

    @Override 
    protected TestContainerFactory getTestContainerFactory() { 
     return new GrizzlyWebTestContainerFactory(); 
    }  
} 
関連する問題