@Autowired не работает в EndpointInterceptor

Самый простой способ сделать это - использовать псевдоним таблицы, когда вы ссылаетесь на родительскую таблицу запросов внутри подзапроса.

Пример:

insert into xxx_tab (trans_id) values ((select max(trans_id)+1 from xxx_tab));

Измените его на:

insert into xxx_tab (trans_id) values ((select max(P.trans_id)+1 from xxx_tab P));
0
задан Laazo 16 January 2019 в 08:32
поделиться

2 ответа

Если вы используете Constructor Injection вместо Field Injection, вы, вероятно, получите довольно полезное исключение, я могу только догадываться, но кажется, что у Spring нет Marshaller в контексте Spring, поэтому вам нужно где-то предоставить метод @Bean, например

@Bean
public Jaxb2Marshaller jaxb2Marshaller () {
 return new Jaxb2Marshaller(foo, bar, ..);
}

Вы можете прочитать здесь, почему вам следует избегать инъекции поля: https://www.vojtechruzicka.com/field-dependency-injection-considered-harmful/

0
ответ дан Max R. 16 January 2019 в 08:32
поделиться

Ваша проблема в том, что вы не позволяете Spring управлять MyEndpointInterceptor. При использовании Spring вы не должны использовать конструктор напрямую. Но пусть Spring соберет для вас боб.

Ваша конфигурация должна выглядеть следующим образом:

@Configuration
@EnableWs
public class MyWebServiceConfiguration extends WsConfigurerAdapter {
    @Bean(name = "marshaller")
    public Jaxb2Marshaller createJaxb2Marshaller() {
        Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
        return marshaller;
    }

    @Autowired
    private MyEndpointInterceptor myEndpointInterceptor;

    @Override
    public void addInterceptors(List<EndpointInterceptor> interceptors)
    {
        // Register interceptor
        interceptors.add(myEndpointInterceptor);
    }
}
0
ответ дан Sodala 16 January 2019 в 08:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: