This article shows basic code to integrate spring with Jersey. Jersey has the ability to convert a JAXB annotated class to xml. This code is also included.
Create a new web application and add jersey-core-1.1.5.jar, jersey-server-1.1.5.jar, jersey-client-1.1.5.jar, jsr311-api-1.1.1.jar, asm-3.1.jar, jersey-spring-1.1.5, ,jaxb-api-2.2.jar,jaxb-impl-2.2.3-1.jar
to WEB-INF/lib.
package com.mycompany.rest; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import org.springframework.stereotype.Component; @Component @Path("/helloWorld") public class HelloWorld { @GET @Produces(MediaType.TEXT_PLAIN) public String plainHelloWorld() { return "Hello World"; } @GET @Produces(MediaType.TEXT_XML) public Person sayXMLHello() { Person person = new Person(); person.setAge(29); person.setFirstName("harish"); person.setLastName("Choragudi"); return person; } @GET @Produces(MediaType.TEXT_HTML) public String htmlHelloWorld() { return " " + "" + "Hello World" + "" + " "; } }
package com.mycompany.rest; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement public class Person { private String firstName; private String lastName; private Integer age; public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } }
The client to test the service
package com.mycompany.rest; import java.net.URI; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.UriBuilder; import com.sun.jersey.api.client.Client; import com.sun.jersey.api.client.ClientResponse; import com.sun.jersey.api.client.WebResource; import com.sun.jersey.api.client.config.ClientConfig; import com.sun.jersey.api.client.config.DefaultClientConfig; import com.sun.jersey.api.client.filter.HTTPBasicAuthFilter; public class RestClient { public static void main(String[] args) { ClientConfig config = new DefaultClientConfig(); Client client = Client.create(config); //Http basic authentication client.addFilter(new HTTPBasicAuthFilter("username","password")); WebResource service = client.resource( UriBuilder.fromUri( "http://localhost:9085/testapplication").build()); System.out.println(service.path("rs").path("helloWorld").accept( MediaType.TEXT_PLAIN).get(ClientResponse.class).toString()); // Get plain text System.out.println(service.path("rs").path("helloWorld").accept( MediaType.TEXT_PLAIN).get(String.class)); // Get XML System.out.println(service.path("rs").path("helloWorld").accept( MediaType.TEXT_XML).get(String.class)); // Get HTML System.out.println(service.path("rs").path("helloWorld").accept( MediaType.TEXT_HTML).get(String.class)); } }In Web.xml
<context-param> <description></description> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/applicationContext.xml</param-value> </context-param> <listener> <description></description> <display-name>AppInit</display-name> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <servlet> <servlet-name>Jersey REST Service</servlet-name> <servlet-class> com.sun.jersey.spi.spring.container.servlet.SpringServlet </servlet-class> <init-param> <param-name> com.sun.jersey.config.property.resourceConfigClass </param-name> <param-value> com.sun.jersey.api.core.ClasspathResourceConfig </param-value> </init-param> <init-param> <param-name> com.sun.jersey.config.property.classpath </param-name> <param-value> WEB-INF/lib </param-value> <!-- Use WEB-INF/lib if you have your Service class in a jar file. WEB-INF/classes is used if you have your service classes in class folder of your web application --> </init-param> <load-on-startup>1</load-on-startup></servlet>
<servlet-mapping>
<servlet-name>Jersey REST Service</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
If you don't have com.sun.jersey.config.property.resourceConfigClass param value set the exception below is thrown. So make sure you set it.
com.sun.jersey.api.container.ContainerException: The ResourceConfig instance does not
contain any root resource classes. If you use spring make sure you use <servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class> instead of <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
No comments:
Post a Comment