3
respostas

Adicionando um serviço SOAP

Olá

Estou adicionado um serviço SOAP no projeto que fizemos, consegui acessar o endpoint, a requisição feita pelo cliente é recebida mas quando vai executar a consulta com meu DAO ele está nulo e tomo um NullPointerException.

A minha classe do WS está assim:

@WebService
@Component
public class TituloWS {

    @Autowired
    private TituloDAO tituloDAO;

    public Titulo getTitulo(Integer id){
        return tituloDAO.consultar(id);
    }


}

Pelo que havia entendido as annotations @Component e @Autowired já indicariam para Spring que o meu DAO deveria ser injetado, mas pelo jeito estou errado...

Alguém me ajuda?

Obrigado!

3 respostas

Boa tarde, Luiz! Como vai?

Vc poderia postar o código da sua classe TituloDAO? Com ela as pessoas poderão te ajudar mais efetivamente.

Claro!

TituloDAO

@Repository
@Transactional
public class TituloDAO {

    final static Logger log = Logger.getLogger(TituloDAO.class);

    @PersistenceContext
    private EntityManager manager;

    public void incluir(Titulo titulo) {
        log.info("Chamado a inclusao " + titulo.getNumeroIdentificacaoTitulo());
        manager.persist(titulo);
    }

    public List<Titulo> listar() {
        log.info("Listando os titulos" );
        return manager.createQuery("select t from Titulo t", Titulo.class).getResultList();
    }

    public Titulo consultar(Integer id) {
        log.info("Selecionando o titulo id: " + id);

        Query query = 
                manager.createQuery("SELECT t FROM Titulo t WHERE t.id = :id ");

        query.setParameter("id", id);

        return (Titulo) query.getSingleResult();
    }

    public void atualizar(Titulo titulo) {
        log.info("Chamado update " + titulo.getNumeroIdentificacaoTitulo() + " id: "  +titulo.getId());
        manager.merge(titulo);

    }

    public void excluir(Integer id) {
        log.info("Excluindo titulo id: " + id);

        Titulo titulo = manager.find(Titulo.class, id);
        manager.remove(titulo);

        log.info("Excluido titulo id: " + id);
    }

}

AppWebConfiguration

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = {"br.conf","br.controller","br.models"})
public class AppWebConfiguration extends WebMvcConfigurerAdapter {

    @Bean
    public InternalResourceViewResolver internalResourceViewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/views/");
        resolver.setSuffix(".jsp");
        return resolver;
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
    }

    @Bean
    public MessageSource messageSource(){
        ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();

        messageSource.setBasename("/WEB-INF/messages");
        messageSource.setDefaultEncoding("UTF-8");
        messageSource.setCacheSeconds(600);

        return messageSource;
    }
    @Bean
    public MultipartResolver multipartResolver(){
        return new StandardServletMultipartResolver();
    }

    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }
}

JPAConfig

@Configuration
@EnableTransactionManagement
public class JPAConfiguration {


    @Bean
    public LocalContainerEntityManagerFactoryBean entityManagerFactory(){


        LocalContainerEntityManagerFactoryBean factoryBean = new LocalContainerEntityManagerFactoryBean();
        JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();

        factoryBean.setJpaVendorAdapter(vendorAdapter);

        factoryBean.setDataSource(dataSource());

        factoryBean.setJpaProperties(additionalProperties());

        factoryBean.setPackagesToScan(new String[] { "br.models" });

        return factoryBean;

    }

    @Bean
    public DataSource dataSource() {

        DriverManagerDataSource dataSource = new DriverManagerDataSource();

        dataSource.setDriverClassName("org.postgresql.Driver");
        dataSource.setUrl("jdbc:postgresql://localhost:5431/dbtestesnpc");
        dataSource.setUsername("postgres");
        dataSource.setPassword("******");

        return dataSource;

    }

    private Properties additionalProperties() {
        Properties properties = new Properties();

        properties.setProperty("hibernate.hbm2ddl.auto", "update");
        properties.setProperty("hibernate.dialect", "org.hibernate.dialect.PostgreSQLDialect");
        properties.setProperty("hibernate.show_sql", "true");

        return properties;
    }

    @Bean
    public JpaTransactionManager transactionManager(EntityManagerFactory emf){
        return new JpaTransactionManager(emf);
    }

}

ServletSpring


public class ServletSpringMVC extends AbstractAnnotationConfigDispatcherServletInitializer {

    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[] { AppWebConfiguration.class, JPAConfiguration.class };
    }

    /**
     * mapea o controllers quais outras classes devem ser carregadas pelo
     * container
     */
    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[] { AppWebConfiguration.class, JPAConfiguration.class };
    }

    /**
     * diz qual é o padrão de endereço que vai ser delegado para o Servlet do
     * Spring MVC = <url-mapping>
     */
    @Override
    protected String[] getServletMappings() {
        return new String[] {"/index", "/cadastrarTitulo", "/salvarTitulo", "/listarTitulos", "/editarTitulo", "/atualizarTitulo", "/excluirTitulo"};
    }

    @Override
    protected Filter[] getServletFilters(){
        CharacterEncodingFilter encodingFilter = new CharacterEncodingFilter();
        encodingFilter.setEncoding("UTF-8");
        return new Filter[] {encodingFilter};        

       }

    @Override
    protected void customizeRegistration(Dynamic registration) {
            registration.setMultipartConfig(new MultipartConfigElement(""));
    }


}