Проблема с интеграционными тестами Spring: не удалось инициализировать прокси - нет сеанса через цепочку ссылок:

Я пытаюсь протестировать метод контроллера, и у меня есть проблема, которая, вероятно, связана с ленивой загрузкой, и поэтому я пытаюсь настроить открытый диспетчер сущностей в фильтре просмотра для моих тестов.

Метод установки:

@Before
public void setup() {
    mockMvc = MockMvcBuilders.webAppContextSetup(wac)//
            .addFilters(springSecurityFilterChain, new OpenEntityManagerInViewFilter())//
            .defaultRequest(get("/").with(csrf())//
            .secure(true))//
            .build();//
...

Метод испытания:

@Test
    public void shouldNotAllowAdvertisementModification() throws Exception {
        ChildminderAdvertisementInfo childminderAdvertisementInfo = new ChildminderAdvertisementInfo();
        childminderAdvertisementInfo.setAddressReference(VALID_ADDRESS_REFERENCE);
        ChildminderAdvertisement advertisement = helper.buildChildminderAdvertisement("[email protected]");
        childminderAdvertisementInfo.setAdvertisement(advertisement);
        CustomJacksonObjectMapper mapper = new CustomJacksonObjectMapper();
        String jsonChildminderAdvertisementInfo = mapper.writeValueAsString(childminderAdvertisementInfo);
        mockMvc.perform(post("/advertisement/childminder/edit/{advertisementId}", 1L).with(userDeatilsService("[email protected]"))//
                .contentType(MediaType.APPLICATION_JSON)//
                .header("X-Ajax", "true")//
                .content(jsonChildminderAdvertisementInfo))//
                .andDo(print())//
                .andExpect(status().isForbidden());//
    }

Картограф объектов:

public class CustomJacksonObjectMapper extends ObjectMapper {

    private static final long serialVersionUID = 1L;

    public CustomJacksonObjectMapper() {
        super();
        configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);//FIXME
        this.addMixInAnnotations(Curriculum.class, CurriculumMixin.class);
        this.addMixInAnnotations(Advertisement.class, AdvertisementMixin.class);
        this.addMixInAnnotations(Address.class, AddressMixin.class);
        this.addMixInAnnotations(Message.class, MessageMixin.class);
        this.addMixInAnnotations(Training.class, TrainingMixin.class);
        this.addMixInAnnotations(WorkExperience.class, WorkExperienceMixin.class);
    }

}

Трассировка стека исключений:

com.fasterxml.jackson.databind.JsonMappingException: could not initialize proxy - no Session (through reference chain: com.bignibou.controller.advertisement.ChildminderAdvertisementInfo["advertisement"]->com.bignibou.domain.ChildminderAdvertisement["address"]->com.bignibou.domain.Address_$$_jvst68_a["reference"])
    at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:232)
    at 

Кажется, второй фильтр игнорируется Spring Mvc Test, и я все еще получаю ошибку гибернации... Кто-нибудь может помочь?


person balteo    schedule 03.05.2014    source источник


Ответы (1)


Я отсортировал проблему по:

Добавление следующей зависимости в мой проект:

<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-hibernate4</artifactId>
    <version>2.3.2</version>
</dependency>

Регистрация модуля Hibernate jackson на моем ObjectMapper следующим образом:

CustomJacksonObjectMapper mapper = new CustomJacksonObjectMapper();
mapper.registerModule(new Hibernate4Module());
person balteo    schedule 03.05.2014