Tuesday, 18 September 2012

Spring REST JSON Server

I was in process of making a Json server in Spring 3. With lots of research and hack I did it with configuration as following :

Creating Maven Web Project in eclipse
[Step 1] File->New ->Maven Project








[Step 2 ] Select an Archetype (maven-archetype-webapp)
Type webapp in Filter, and select the one with artifactId maven-archetype-webapp.








[Step 3 ] Specify Archetype parameters(groupId, artifactId)






There won't be any java and test folders by default, for which they have be created manually and the project needs to get eclipsified with mvn eclipse:eclipse.
(maven-archetype-webapp eclipse problem, stackoverflow)

Structure of the app is :


prayag@prayag:~/git/SpringRESTServer/SpringRESTServer$ ls -l
total 24
-rw-rw-r-- 1 prayag prayag 12642 Nov  2 12:31 pom.xml
drwxrwxr-x 4 prayag prayag  4096 Sep 19 11:24 src
drwxrwxr-x 3 prayag prayag  4096 Nov  2 12:32 target
prayag@prayag:~/git/SpringRESTServer/SpringRESTServer$ ls -l src/main/
total 12
drwxrwxr-x 3 prayag prayag 4096 Sep 18 10:23 java
drwxrwxr-x 4 prayag prayag 4096 Sep 19 12:32 resources
drwxrwxr-x 3 prayag prayag 4096 Sep 18 10:20 webapp
prayag@prayag:~/git/SpringRESTServer/SpringRESTServer$ ls -l src/main/webapp/
total 4
drwxrwxr-x 3 prayag prayag 4096 Sep 19 12:47 WEB-INF



[STEP 4 ] add spring and jackson dependency to pom.xml

<project>

[...]

<!-- jackson mapper -->

  <dependency>
   <groupId>org.codehaus.jackson</groupId>
   <artifactId>jackson-mapper-asl</artifactId>
   <version>1.9.0</version>
  </dependency>

   <dependency>
   <groupId>org.codehaus.jackson</groupId>
   <artifactId>jackson-core-asl</artifactId>
   <version>1.9.0</version>
  </dependency>

<!-- jackson mapper -->

[...]

</project>

[STEP 5 ] configure DD (/WEB-INF/web.xml) 

<?xml version="1.0" encoding="UTF-8"?>
<!-- Use this definition if using a Java EE 6 container This also stops Eclipse 
 from complaining that 3.0 is not a valid version <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" 
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" 
 http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> -->
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"

 version="2.5">
 <context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>/WEB-INF/root-context.xml</param-value>
 </context-param>

 <listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
 </listener>

  <servlet>
  <servlet-name>appServlet</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <init-param>
   <param-name>contextConfigLocation</param-name>
   <param-value>/WEB-INF/servlet-context.xml</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
 </servlet>

  <servlet-mapping>
  <servlet-name>appServlet</servlet-name>
  <url-pattern>/</url-pattern>
 </servlet-mapping>

</web-app>


[STEP 6 ] configure  /WEB-INF/servlet-context.xml (a view resolver)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"
xmlns:p="http://www.springframework.org/schema/p">

<!-- Root Context: defines shared resources visible to all other web components -->
<bean
class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
<property name="mediaTypes">
<map>
<entry key="html" value="text/html" />
<entry key="json" value="application/json" />
</map>
</property>
<property name="viewResolvers">
<list>
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:viewClass="org.springframework.web.servlet.view.JstlView"
p:prefix="/WEB-INF/jsp/" p:suffix=".jsp" />
</list>
</property>
<property name="defaultViews">
<list>
<bean
class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" />
</list>
</property>
</bean>

<import resource="classpath:/WEB-INF/controllers.xml" />

</beans>

STEP 7 : create @controller (BootController.java)

package com.zcode.springrestserver.web.controller;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import com.zcode.springrestserver.web.domain.User;


/**

 * @author prayag
 * 
 */
@Controller
public class BootController {
@RequestMapping(value = "/", method = RequestMethod.GET, headers = "Accept=*/*")
public @ResponseBody
User login() {
User user = new User();
user.setName("prayag");

return user;

}
}

STEP 8 : create a model (User.java)

/**
 * 
 */
package com.zcode.springrestserver.web.domain;


/**

 * @author prayag
 * 
 */

public class User {
private long id;
private String name;

public long getId() {

return id;
}

public String getName() {

return name;
}

public void setId(long id) {

this.id = id;
}

public void setName(String name) {

this.name = name;
}

}



[STEP 9 ] Maven Compile 

prayag@prayag:~/git/SpringRESTServer/SpringRESTServer$ /usr/eclipse/apache-maven-3.0.4/bin/mvn clean compile
[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building SpringRESTServer Maven Webapp 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-clean-plugin:2.4.1:clean (default-clean) @ SpringRESTServer ---
[INFO] Deleting /home/prayag/git/SpringRESTServer/SpringRESTServer/target
[INFO] 
[INFO] --- maven-resources-plugin:2.5:resources (default-resources) @ SpringRESTServer ---
[debug] execute contextualize
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 7 resources
[INFO] 
[INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ SpringRESTServer ---
[INFO] Compiling 11 source files to /home/prayag/git/SpringRESTServer/SpringRESTServer/target/classes
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 8.544s
[INFO] Finished at: Fri Nov 02 12:44:59 NPT 2012
[INFO] Final Memory: 12M/30M
[INFO] ------------------------------------------------------------------------



[STEP 10 ] run app in jetty server


prayag@prayag:~/git/SpringRESTServer/SpringRESTServer$ /usr/eclipse/apache-maven-3.0.4/bin/mvn jetty:run
[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building SpringRESTServer Maven Webapp 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] >>> maven-jetty-plugin:6.1.25:run (default-cli) @ SpringRESTServer >>>
[INFO] 
[INFO] --- maven-resources-plugin:2.5:resources (default-resources) @ SpringRESTServer ---
[debug] execute contextualize
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 7 resources
[INFO] 
[INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ SpringRESTServer ---
[INFO] Nothing to compile - all classes are up to date
[INFO] 
[INFO] --- maven-resources-plugin:2.5:testResources (default-testResources) @ SpringRESTServer ---
[debug] execute contextualize
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /home/prayag/git/SpringRESTServer/SpringRESTServer/src/test/resources
[INFO] 
[INFO] --- maven-compiler-plugin:2.3.2:testCompile (default-testCompile) @ SpringRESTServer ---
[INFO] Compiling 1 source file to /home/prayag/git/SpringRESTServer/SpringRESTServer/target/test-classes
[INFO] 
[INFO] <<< maven-jetty-plugin:6.1.25:run (default-cli) @ SpringRESTServer <<<
[INFO] 
[INFO] --- maven-jetty-plugin:6.1.25:run (default-cli) @ SpringRESTServer ---
Downloading: http://repository.sourcesense.com/nexus/content/repositories/public/junit/junit/3.8.2/junit-3.8.2.jar
Downloading: http://repository.sourcesense.com/nexus/content/repositories/public/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.jar
Downloading: http://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.jar
Downloading: http://repo.maven.apache.org/maven2/junit/junit/3.8.2/junit-3.8.2.jar
Downloaded: http://repo.maven.apache.org/maven2/junit/junit/3.8.2/junit-3.8.2.jar (118 KB at 26.2 KB/sec)
Downloaded: http://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.jar (165 KB at 31.3 KB/sec)
[INFO] Configuring Jetty for project: SpringRESTServer Maven Webapp
[INFO] Webapp source directory = /home/prayag/git/SpringRESTServer/SpringRESTServer/src/main/webapp
[INFO] Reload Mechanic: automatic
[INFO] Classes = /home/prayag/git/SpringRESTServer/SpringRESTServer/target/classes
2012-11-02 13:03:41.540:INFO::Logging to STDERR via org.mortbay.log.StdErrLog
[INFO] Context path = /SpringRESTServer
[INFO] Tmp directory =  determined at runtime
[INFO] Web defaults = org/mortbay/jetty/webapp/webdefault.xml
[INFO] Web overrides =  none
[INFO] web.xml file = /home/prayag/git/SpringRESTServer/SpringRESTServer/src/main/webapp/WEB-INF/web.xml
[INFO] Webapp directory = /home/prayag/git/SpringRESTServer/SpringRESTServer/src/main/webapp
[INFO] Starting jetty 6.1.25 ...
2012-11-02 13:03:41.787:INFO::jetty-6.1.25
2012-11-02 13:03:43.135:INFO::No Transaction manager found - if your webapp requires one, please configure one.
2012-11-02 13:03:44.740:INFO:/SpringRESTServer:Initializing Spring root WebApplicationContext
13:03:44.742 [main] INFO  o.s.web.context.ContextLoader - Root WebApplicationContext: initialization started
13:03:44.800 [main] INFO  o.s.w.c.s.XmlWebApplicationContext - Refreshing Root WebApplicationContext: startup date [Fri Nov 02 13:03:44 NPT 2012]; root of context hierarchy
13:03:44.844 [main] INFO  o.s.b.f.xml.XmlBeanDefinitionReader - Loading XML bean definitions from ServletContext resource [/WEB-INF/root-context.xml]
13:03:45.073 [main] INFO  o.s.b.f.xml.XmlBeanDefinitionReader - Loading XML bean definitions from class path resource [WEB-INF/jpa-context.xml]
13:03:45.183 [main] INFO  o.s.b.f.xml.XmlBeanDefinitionReader - Loading XML bean definitions from class path resource [WEB-INF/repository-context.xml]
13:03:45.235 [main] DEBUG o.s.d.r.c.AbstractRepositoryConfigDefinitionParser - Triggering auto repository detection
13:03:45.293 [main] DEBUG o.s.d.r.c.AbstractRepositoryConfigDefinitionParser$RepositoryComponentProvider - Identified candidate component class: file [/home/prayag/git/SpringRESTServer/SpringRESTServer/target/classes/com/zcode/springrestserver/web/repository/UserRepository.class]
13:03:45.299 [main] DEBUG o.s.d.r.c.AbstractRepositoryConfigDefinitionParser - Registering repository: userRepository - Interface: com.zcode.springrestserver.web.repository.UserRepository - Factory: org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean, - Custom implementation: null
13:03:45.299 [main] INFO  o.s.b.f.xml.XmlBeanDefinitionReader - Loading XML bean definitions from class path resource [WEB-INF/api-context.xml]
13:03:45.318 [main] INFO  o.s.b.f.xml.XmlBeanDefinitionReader - Loading XML bean definitions from class path resource [WEB-INF/service-context.xml]
13:03:45.331 [main] INFO  o.s.b.f.s.DefaultListableBeanFactory - Overriding bean definition for bean 'placeholderConfig': replacing [Generic bean: class [org.springframework.beans.factory.config.PropertyPlaceholderConfigurer]; scope=; abstract=false; lazyInit=false; autowireMode=1; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null; defined in class path resource [WEB-INF/jpa-context.xml]] with [Generic bean: class [org.springframework.beans.factory.config.PropertyPlaceholderConfigurer]; scope=; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null; defined in ServletContext resource [/WEB-INF/root-context.xml]]
13:03:45.594 [main] INFO  o.s.b.f.c.PropertyPlaceholderConfigurer - Loading properties file from ServletContext resource [/WEB-INF/db.properties]
13:03:45.711 [main] INFO  o.s.w.c.s.XmlWebApplicationContext - Bean 'dataSource' of type [class org.apache.commons.dbcp.BasicDataSource] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
13:03:45.733 [main] INFO  o.s.w.c.s.XmlWebApplicationContext - Bean 'org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter#1069693' of type [class org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
13:03:45.752 [main] INFO  o.s.o.j.LocalContainerEntityManagerFactoryBean - Building JPA container EntityManagerFactory for persistence unit 'springPU'
13:03:45.965 [main] INFO  o.h.annotations.common.Version - Hibernate Commons Annotations 3.2.0.Final
13:03:45.971 [main] INFO  org.hibernate.cfg.Environment - Hibernate 3.6.6.Final
13:03:45.973 [main] INFO  org.hibernate.cfg.Environment - hibernate.properties not found
13:03:45.975 [main] INFO  org.hibernate.cfg.Environment - Bytecode provider name : javassist
13:03:45.977 [main] INFO  org.hibernate.cfg.Environment - using JDK 1.4 java.sql.Timestamp handling
13:03:46.067 [main] INFO  org.hibernate.ejb.Version - Hibernate EntityManager 3.6.6.Final
13:03:46.076 [main] INFO  org.hibernate.ejb.Ejb3Configuration - Processing PersistenceUnitInfo [
        name: springPU
        ...]
13:03:46.191 [main] WARN  org.hibernate.ejb.Ejb3Configuration - Defining hibernate.transaction.flush_before_completion=true ignored in HEM
13:03:46.233 [main] INFO  org.hibernate.cfg.AnnotationBinder - Binding entity from annotated class: com.zcode.springrestserver.web.domain.User
13:03:46.264 [main] INFO  o.h.cfg.annotations.EntityBinder - Bind entity com.zcode.springrestserver.web.domain.User on table User
13:03:46.302 [main] INFO  org.hibernate.cfg.Configuration - Hibernate Validator not found: ignoring
13:03:46.320 [main] INFO  org.hibernate.validator.util.Version - Hibernate Validator 4.0.0.GA
13:03:46.342 [main] INFO  o.h.v.e.r.DefaultTraversableResolver - Instantiated an instance of org.hibernate.validator.engine.resolver.JPATraversableResolver.
13:03:46.427 [main] INFO  o.h.v.e.r.DefaultTraversableResolver - Instantiated an instance of org.hibernate.validator.engine.resolver.JPATraversableResolver.
13:03:46.431 [main] INFO  o.h.v.e.r.DefaultTraversableResolver - Instantiated an instance of org.hibernate.validator.engine.resolver.JPATraversableResolver.
13:03:46.436 [main] INFO  o.h.c.s.HibernateSearchEventListenerRegister - Unable to find org.hibernate.search.event.FullTextIndexEventListener on the classpath. Hibernate Search is not enabled.
13:03:46.439 [main] INFO  o.h.c.ConnectionProviderFactory - Initializing connection provider: org.hibernate.ejb.connection.InjectedDataSourceConnectionProvider
13:03:46.441 [main] INFO  o.h.e.c.InjectedDataSourceConnectionProvider - Using provided datasource
13:03:46.898 [main] INFO  org.hibernate.dialect.Dialect - Using dialect: org.hibernate.dialect.MySQL5Dialect
13:03:46.921 [main] INFO  o.h.engine.jdbc.JdbcSupportLoader - Disabling contextual LOB creation as createClob() method threw error : java.lang.reflect.InvocationTargetException
13:03:46.921 [main] INFO  org.hibernate.cfg.SettingsFactory - Database ->
       name : MySQL
    version : 5.0.45-log
      major : 5
      minor : 0
13:03:46.921 [main] INFO  org.hibernate.cfg.SettingsFactory - Driver ->
       name : MySQL-AB JDBC Driver
    version : mysql-connector-java-5.1.17 ( Revision: ${bzr.revision-id} )
      major : 5
      minor : 1
13:03:46.947 [main] INFO  o.h.t.TransactionFactoryFactory - Using default transaction strategy (direct JDBC transactions)
13:03:46.948 [main] INFO  o.h.t.TransactionManagerLookupFactory - No TransactionManagerLookup configured (in JTA environment, use of read-write or transactional second-level cache is not recommended)
13:03:46.948 [main] INFO  org.hibernate.cfg.SettingsFactory - Automatic flush during beforeCompletion(): disabled
13:03:46.948 [main] INFO  org.hibernate.cfg.SettingsFactory - Automatic session close at end of transaction: disabled
13:03:46.948 [main] INFO  org.hibernate.cfg.SettingsFactory - JDBC batch size: 15
13:03:46.948 [main] INFO  org.hibernate.cfg.SettingsFactory - JDBC batch updates for versioned data: disabled
13:03:46.949 [main] INFO  org.hibernate.cfg.SettingsFactory - Scrollable result sets: enabled
13:03:46.949 [main] INFO  org.hibernate.cfg.SettingsFactory - JDBC3 getGeneratedKeys(): enabled
13:03:46.949 [main] INFO  org.hibernate.cfg.SettingsFactory - Connection release mode: auto
13:03:46.949 [main] INFO  org.hibernate.cfg.SettingsFactory - Maximum outer join fetch depth: 2
13:03:46.949 [main] INFO  org.hibernate.cfg.SettingsFactory - Default batch fetch size: 1
13:03:46.950 [main] INFO  org.hibernate.cfg.SettingsFactory - Generate SQL with comments: disabled
13:03:46.950 [main] INFO  org.hibernate.cfg.SettingsFactory - Order SQL updates by primary key: disabled
13:03:46.950 [main] INFO  org.hibernate.cfg.SettingsFactory - Order SQL inserts for batching: disabled
13:03:46.950 [main] INFO  org.hibernate.cfg.SettingsFactory - Query translator: org.hibernate.hql.ast.ASTQueryTranslatorFactory
13:03:46.953 [main] INFO  o.h.h.ast.ASTQueryTranslatorFactory - Using ASTQueryTranslatorFactory
13:03:46.953 [main] INFO  org.hibernate.cfg.SettingsFactory - Query language substitutions: {}
13:03:46.953 [main] INFO  org.hibernate.cfg.SettingsFactory - JPA-QL strict compliance: enabled
13:03:46.954 [main] INFO  org.hibernate.cfg.SettingsFactory - Second-level cache: enabled
13:03:46.954 [main] INFO  org.hibernate.cfg.SettingsFactory - Query cache: disabled
13:03:46.954 [main] INFO  org.hibernate.cfg.SettingsFactory - Cache region factory : org.hibernate.cache.impl.bridge.RegionFactoryCacheProviderBridge
13:03:46.956 [main] INFO  o.h.c.i.b.RegionFactoryCacheProviderBridge - Cache provider: org.hibernate.cache.HashtableCacheProvider
13:03:46.956 [main] INFO  org.hibernate.cfg.SettingsFactory - Optimize cache for minimal puts: disabled
13:03:46.957 [main] INFO  org.hibernate.cfg.SettingsFactory - Structured second-level cache entries: disabled
13:03:46.959 [main] INFO  org.hibernate.cfg.SettingsFactory - Echoing all SQL to stdout
13:03:46.959 [main] INFO  org.hibernate.cfg.SettingsFactory - Statistics: disabled
13:03:46.959 [main] INFO  org.hibernate.cfg.SettingsFactory - Deleted entity synthetic identifier rollback: disabled
13:03:46.960 [main] INFO  org.hibernate.cfg.SettingsFactory - Default entity-mode: pojo
13:03:46.960 [main] INFO  org.hibernate.cfg.SettingsFactory - Named query checking : enabled
13:03:46.960 [main] INFO  org.hibernate.cfg.SettingsFactory - Check Nullability in Core (should be disabled when Bean Validation is on): disabled
13:03:46.971 [main] INFO  o.hibernate.impl.SessionFactoryImpl - building session factory
13:03:46.974 [main] INFO  org.hibernate.type.BasicTypeRegistry - Type registration [blob] overrides previous : org.hibernate.type.BlobType@171ef98
13:03:46.974 [main] INFO  org.hibernate.type.BasicTypeRegistry - Type registration [java.sql.Blob] overrides previous : org.hibernate.type.BlobType@171ef98
13:03:46.974 [main] INFO  org.hibernate.type.BasicTypeRegistry - Type registration [clob] overrides previous : org.hibernate.type.ClobType@1290ef4
13:03:46.974 [main] INFO  org.hibernate.type.BasicTypeRegistry - Type registration [java.sql.Clob] overrides previous : org.hibernate.type.ClobType@1290ef4
13:03:46.974 [main] INFO  org.hibernate.type.BasicTypeRegistry - Type registration [wrapper_materialized_blob] overrides previous : org.hibernate.type.WrappedMaterializedBlobType@94e4f4
13:03:46.974 [main] INFO  org.hibernate.type.BasicTypeRegistry - Type registration [materialized_blob] overrides previous : org.hibernate.type.MaterializedBlobType@143691d
13:03:46.975 [main] INFO  org.hibernate.type.BasicTypeRegistry - Type registration [wrapper_characters_clob] overrides previous : org.hibernate.type.CharacterArrayClobType@aa168c
13:03:46.975 [main] INFO  org.hibernate.type.BasicTypeRegistry - Type registration [characters_clob] overrides previous : org.hibernate.type.PrimitiveCharacterArrayClobType@ae43b8
13:03:46.975 [main] INFO  org.hibernate.type.BasicTypeRegistry - Type registration [materialized_clob] overrides previous : org.hibernate.type.MaterializedClobType@e00321
13:03:47.090 [main] INFO  o.h.impl.SessionFactoryObjectFactory - Not binding factory to JNDI, no JNDI name configured
13:03:47.093 [main] INFO  o.h.tool.hbm2ddl.SchemaUpdate - Running hbm2ddl schema update
13:03:47.093 [main] INFO  o.h.tool.hbm2ddl.SchemaUpdate - fetching database metadata
13:03:47.096 [main] INFO  o.h.tool.hbm2ddl.SchemaUpdate - updating schema
13:03:47.098 [main] INFO  o.h.v.e.r.DefaultTraversableResolver - Instantiated an instance of org.hibernate.validator.engine.resolver.JPATraversableResolver.
13:03:47.131 [main] INFO  o.h.tool.hbm2ddl.TableMetadata - table found: spring.User
13:03:47.131 [main] INFO  o.h.tool.hbm2ddl.TableMetadata - columns: [id, authority, username, created, lastmodified, password, deleted, fullname, disabled, version]
13:03:47.131 [main] INFO  o.h.tool.hbm2ddl.TableMetadata - foreign keys: []
13:03:47.132 [main] INFO  o.h.tool.hbm2ddl.TableMetadata - indexes: [primary]
13:03:47.133 [main] INFO  o.h.tool.hbm2ddl.SchemaUpdate - schema update complete
13:03:47.173 [main] INFO  o.s.w.c.s.XmlWebApplicationContext - Bean 'entityManagerFactory' of type [class org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
13:03:47.189 [main] INFO  o.s.w.c.s.XmlWebApplicationContext - Bean 'org.springframework.transaction.annotation.AnnotationTransactionAttributeSource#0' of type [class org.springframework.transaction.annotation.AnnotationTransactionAttributeSource] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
13:03:47.191 [main] INFO  o.s.w.c.s.XmlWebApplicationContext - Bean 'org.springframework.transaction.config.internalTransactionAdvisor' of type [class org.springframework.transaction.interceptor.BeanFactoryTransactionAttributeSourceAdvisor] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
13:03:47.197 [main] INFO  o.s.b.f.s.DefaultListableBeanFactory - Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@d6a0e0: defining beans [placeholderConfig,entityManagerFactory,dataSource,transactionManager,org.springframework.aop.config.internalAutoProxyCreator,org.springframework.transaction.annotation.AnnotationTransactionAttributeSource#0,org.springframework.transaction.interceptor.TransactionInterceptor#0,org.springframework.transaction.config.internalTransactionAdvisor,org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor#0,userRepository,org.springframework.data.repository.core.support.RepositoryInterfaceAwareBeanPostProcessor#0,org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor#0,userAPI,userService]; root of factory hierarchy
13:03:47.306 [main] DEBUG o.s.d.j.r.query.SimpleJpaQuery - Looking up query for method findByUserNameAndPassword
13:03:47.619 [main] INFO  o.s.web.context.ContextLoader - Root WebApplicationContext: initialization completed in 2875 ms
2012-11-02 13:03:47.788:INFO:/SpringRESTServer:Initializing Spring FrameworkServlet 'appServlet'
13:03:47.788 [main] INFO  o.s.web.servlet.DispatcherServlet - FrameworkServlet 'appServlet': initialization started
13:03:47.790 [main] INFO  o.s.w.c.s.XmlWebApplicationContext - Refreshing WebApplicationContext for namespace 'appServlet-servlet': startup date [Fri Nov 02 13:03:47 NPT 2012]; parent: Root WebApplicationContext
13:03:47.790 [main] INFO  o.s.b.f.xml.XmlBeanDefinitionReader - Loading XML bean definitions from ServletContext resource [/WEB-INF/servlet-context.xml]
13:03:47.828 [main] INFO  o.s.b.f.xml.XmlBeanDefinitionReader - Loading XML bean definitions from class path resource [WEB-INF/controllers.xml]
13:03:47.935 [main] INFO  o.s.b.f.s.DefaultListableBeanFactory - Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@1ba3523: defining beans [org.springframework.web.servlet.view.ContentNegotiatingViewResolver#0,org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping#0,org.springframework.format.support.FormattingConversionServiceFactoryBean#0,org.springframework.validation.beanvalidation.LocalValidatorFactoryBean#0,org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter#0,org.springframework.web.servlet.handler.MappedInterceptor#0,com.zcode.springrestserver.web.controller.BootController#0,com.zcode.springrestserver.web.controller.PersistenceController#0]; parent: org.springframework.beans.factory.support.DefaultListableBeanFactory@d6a0e0
13:03:48.284 [main] INFO  o.s.w.s.m.a.DefaultAnnotationHandlerMapping - Root mapping to handler 'com.zcode.springrestserver.web.controller.BootController#0'
13:03:48.285 [main] INFO  o.s.w.s.m.a.DefaultAnnotationHandlerMapping - Mapped URL path [/persistence] onto handler 'com.zcode.springrestserver.web.controller.PersistenceController#0'
13:03:48.285 [main] INFO  o.s.w.s.m.a.DefaultAnnotationHandlerMapping - Mapped URL path [/persistence.*] onto handler 'com.zcode.springrestserver.web.controller.PersistenceController#0'
13:03:48.285 [main] INFO  o.s.w.s.m.a.DefaultAnnotationHandlerMapping - Mapped URL path [/persistence/] onto handler 'com.zcode.springrestserver.web.controller.PersistenceController#0'
13:03:48.286 [main] INFO  o.h.v.e.r.DefaultTraversableResolver - Instantiated an instance of org.hibernate.validator.engine.resolver.JPATraversableResolver.
13:03:48.930 [main] INFO  o.s.web.servlet.DispatcherServlet - FrameworkServlet 'appServlet': initialization completed in 1141 ms
2012-11-02 13:03:48.986:INFO::Started SelectChannelConnector@0.0.0.0:8080
[INFO] Started Jetty Server
[INFO] Starting scanner at interval of 3 seconds.


OR
To run with eclipse webtools(ie fuking Run on server.. option), add the following plugin block to build of pom.xml and fire mvn eclipse:eclipse.

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-eclipse-plugin</artifactId>
<version>2.8</version>
<configuration>
<wtpversion>2.0</wtpversion>
<downloadSources>true</downloadSources>
<downloadJavadocs>true</downloadJavadocs>
</configuration>
</plugin>
</plugins>
</build>

[STEP 11 ] Goto browser and hit http://localhost:8080/SpringRESTServer/

Expected Result 
{"id":0,"name":"prayag"}




Source Code
The full source code is available at github - https://github.com/iPrayag/spring-rest-server

References :
1 - JSON / Ajax in Spring MVC, available at http://www.gotoquiz.com/web-coding/programming/java-programming/jsonajax-in-spring-mvc/


2 - REST with Spring - ContentNegotiatingViewResolver vs. HttpMessageConverter+ResponseBody Annotation, available at
http://www.gotoquiz.com/web-coding/programming/java-programming/jsonajax-in-spring-mvc/




No comments:

Post a Comment