1

I am new to both spring and Hibernate. I would like to develop WS application using these technologies.

Coming to the issue, I have created controllers , services, dao and also have defined the configuration in AppConfig.java

@Configuration
@EnableTransactionManagement
@ComponentScans(value = {@ComponentScan("com.example.ws.maven_web_service_project.service"),
        @ComponentScan("com.example.ws.maven_web_service_project.dao")})

public class AppConfig { 
       @Bean
       public LocalSessionFactoryBean sessionFactoryBean(){
        LocalSessionFactoryBean sessionFactoryBean = new LocalSessionFactoryBean();
        sessionFactoryBean.setDataSource(dataSource());
        sessionFactoryBean.setPackagesToScan(new String[] { "com.example.ws.maven_web_service_project.model" });
        sessionFactoryBean.setHibernateProperties(hibernateProperties());
         return sessionFactoryBean;
       }

       @Bean
       public DataSource dataSource(){
        DriverManagerDataSource ds = new DriverManagerDataSource();
        ds.setDriverClassName("com.mysql.jdbc.Driver");
        ds.setUrl("jdbc:mysql://localhost:3306/hibernate_test");
        ds.setUsername("root");
        ds.setPassword("root");
        return ds;
       }

       private Properties hibernateProperties(){
        Properties props = new Properties();
        props.put("hibernate.dialect", "org.hibernate.dialect.MySQLDialect");
        props.put("hibernate.show_sql", "true");
         props.put("hibernate.hbm2ddl.auto", "update");

          // Setting C3P0 properties
          props.put("hibernate.c3p0.min_size", 5);
          props.put("hibernate.c3p0.max_size", 20);
          props.put("hibernate.c3p0.acquire_increment", 
                1);
          props.put("hibernate.c3p0.timeout", 1800);
          props.put("hibernate.c3p0.max_statements", 150);

          return props;
       }

       @Bean
       @Autowired
       public HibernateTransactionManager transactionManager(SessionFactory s){
        HibernateTransactionManager txManager = new HibernateTransactionManager();
        txManager.setSessionFactory(s);
        return txManager;
       }
    }

In BookController.java , the request mappings are defined

@RestController
public class BookController {

@Autowired
private BookService bookService;

    @PostMapping("/book")
    public ResponseEntity<?> saveBook(@RequestBody Book book){
        int bookId = bookService.saveBook(book);
        return ResponseEntity.ok().body("Your Book with Id "+ bookId +" save successfully.");
    }


   @GetMapping("/book/{id}")
    public ResponseEntity<Book> getBook(@PathVariable("id") int bookId){
        Book book = bookService.getBook(bookId);
        return ResponseEntity.ok().body(book);
    }


   @GetMapping("/book")
   public ResponseEntity<List<Book>> list() {
      List<Book> books = bookService.listBooks();
      return ResponseEntity.ok().body(books);
   }
    }

I have started the tomcat 9 and it has been started without fail but when I try to trigger the URL https://localhost:8080/RakeshMavenProject/book/ , the following exception is printed in console

INFO: Error parsing HTTP request header
 Note: further occurrences of HTTP request parsing errors will be logged at DEBUG level.
java.lang.IllegalArgumentException: Invalid character found in method name. HTTP method names must be tokens
    at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:410)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:291)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:754)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1376)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.base/java.lang.Thread.run(Thread.java:844)

I have googled it a lot, but unable to find the solution anywhere.

Please someone help me to find the solution.

Rakesh L
  • 1,136
  • 4
  • 18
  • 44

0 Answers0