Spring 3.2.5 → 4.0.0 バージョンアップ後にソースをコンパイルしようとすると挙動がおかしくなる。
不完全なコード スニペット(ドキュメントApplicationControllerTest.java
のコードと同等):
import org.springframework.test.context.web.WebAppConfiguration;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;
...
@Autowired
private WebApplicationContext wac;
private MockMvc mockMvc;
@Before
public void setUp() {
mockMvc = MockMvcBuilders.webAppContextSetup(wac).build();
}
エラー:
COMPILATION ERROR :
/C:/Development/.../war/src/test/java/org/.../web/controller/ApplicationControllerTest.java:[59,61] C:\Development\...\war\src\test\java\org\...\web\controller\ApplicationControllerTest.java:59: incompatible types; inferred type argument(s) java.lang.Object do not conform to bounds of type variable(s) B
found : <B>org.springframework.test.web.servlet.setup.DefaultMockMvcBuilder<B>
required: java.lang.Object
MockMvcBuilders
ソースを調べると、違いがわかります。
春 4.0.0:
public static <B extends DefaultMockMvcBuilder<B>> DefaultMockMvcBuilder<B> webAppContextSetup(WebApplicationContext context) {
return new DefaultMockMvcBuilder<B>(context);
}
春 3.2.5:
public static DefaultMockMvcBuilder<DefaultMockMvcBuilder<?>> webAppContextSetup(WebApplicationContext context) {
return new DefaultMockMvcBuilder<DefaultMockMvcBuilder<?>>(context);
}
コンパイル可能にする私の試みは成功しませんでした。
実際、 Spring のドキュメントによると、フレームワークは Java 1.6.0_10 と互換性があるはずです。Java 1.6.0_45 を使用しています。