Prakash
Prakash

Reputation: 75

java.lang.ClassCastException: Cannot cast com.sun.jersey.core.impl.provider.entity.StringProvider to javax.ws.rs.ext.MessageBodyReader

I have created the first jersey project using the following Archetype

mvn archetype:generate -DarchetypeGroupId=org.glassfish.jersey.archetypes -DarchetypeArtifactId=jersey-quickstart-webapp -DarchetypeVersion=2.2

project build was successful. Below is the command prompt log.

    Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-assembly-plugin/2.2-beta-5/maven-assembly-plugin-2.2-beta-5.jar
    Downloaded: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-assembly-plugin/2.2-beta-5/maven-assembly-plugin-2.2-beta-5.jar (204 KB
     at 105.8 KB/sec)
    Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-dependency-plugin/2.8/maven-dependency-plugin-2.8.pom
    Downloaded: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-dependency-plugin/2.8/maven-dependency-plugin-2.8.pom (12 KB at 10.8 KB
    /sec)
.......
    Downloaded: http://repo.maven.apache.org/maven2/org/apache/ant/ant/1.8.1/ant-1.8.1.jar (1479 KB at 139.0 KB/sec)
    Downloaded: http://repo.maven.apache.org/maven2/org/codehaus/groovy/groovy/1.8.3/groovy-1.8.3.jar (5394 KB at 164.4 KB/sec)
    [INFO] Generating project in Interactive mode
    [INFO] Archetype repository missing. Using the one from [org.glassfish.jersey.archetypes:jersey-quickstart-webapp:2.9] found in catalog remote
    Downloading: http://repo.maven.apache.org/maven2/org/glassfish/jersey/archetypes/jersey-quickstart-webapp/2.2/jersey-quickstart-webapp-2.2.jar
    Downloaded: http://repo.maven.apache.org/maven2/org/glassfish/jersey/archetypes/jersey-quickstart-webapp/2.2/jersey-quickstart-webapp-2.2.jar (7 KB at
     4.7 KB/sec)
    Downloading: http://repo.maven.apache.org/maven2/org/glassfish/jersey/archetypes/jersey-quickstart-webapp/2.2/jersey-quickstart-webapp-2.2.pom
    Downloaded: http://repo.maven.apache.org/maven2/org/glassfish/jersey/archetypes/jersey-quickstart-webapp/2.2/jersey-quickstart-webapp-2.2.pom (4 KB at
     2.6 KB/sec)
    Define value for property 'groupId': : com.jersey
    Define value for property 'artifactId': : FirstJersey
    Define value for property 'version':  1.0-SNAPSHOT: :
    Define value for property 'package':  com.jersey: :
    Confirm properties configuration:
    groupId: com.jersey
    artifactId: FirstJersey
    version: 1.0-SNAPSHOT
    package: com.jersey
     Y: : y
    [INFO] ----------------------------------------------------------------------------
    [INFO] Using following parameters for creating project from Old (1.x) Archetype: jersey-quickstart-webapp:2.2
    [INFO] ----------------------------------------------------------------------------
    [INFO] Parameter: groupId, Value: com.jersey
    [INFO] Parameter: packageName, Value: com.jersey
    [INFO] Parameter: package, Value: com.jersey
    [INFO] Parameter: artifactId, Value: FirstJersey
    [INFO] Parameter: basedir, Value: C:\v_prakash\code\jersey\generated
    [INFO] Parameter: version, Value: 1.0-SNAPSHOT
    [INFO] project created from Old (1.x) Archetype in dir: C:\v_prakash\code\jersey\generated\FirstJersey
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 03:09 min
    [INFO] Finished at: 2014-06-04T17:33:54+05:30
    [INFO] Final Memory: 9M/25M
    [INFO] ------------------------------------------------------------------------
    C:\v_prakash\code\jersey\generated>

I have imported as a Maven project into Eclipse Juno. When running the below url, getting the following exception.

http://localhost:8080/FirstJersey/webapi/myresource

HTTP Status 500 - Servlet.init() for servlet Jersey Web Application threw exception

--------------------------------------------------------------------------------

type Exception report

message Servlet.init() for servlet Jersey Web Application threw exception

description The server encountered an internal error that prevented it from fulfilling this request.

exception 

javax.servlet.ServletException: Servlet.init() for servlet Jersey Web Application threw exception
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
    org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
    org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
    org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
    java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    java.lang.Thread.run(Unknown Source)


root cause 

java.lang.ClassCastException: Cannot cast com.sun.jersey.core.impl.provider.entity.StringProvider to javax.ws.rs.ext.MessageBodyReader
    java.lang.Class.cast(Unknown Source)
    org.glassfish.jersey.internal.ServiceFinder$LazyObjectIterator.hasNext(ServiceFinder.java:689)
    org.glassfish.jersey.internal.ServiceFinderBinder.configure(ServiceFinderBinder.java:91)
    org.glassfish.hk2.utilities.binding.AbstractBinder.bind(AbstractBinder.java:171)
    org.glassfish.hk2.utilities.binding.AbstractBinder.install(AbstractBinder.java:315)
    org.glassfish.jersey.message.internal.MessagingBinders$MessageBodyProviders.configure(MessagingBinders.java:122)
    org.glassfish.hk2.utilities.binding.AbstractBinder.bind(AbstractBinder.java:171)
    org.glassfish.hk2.utilities.binding.AbstractBinder.install(AbstractBinder.java:315)
    org.glassfish.jersey.server.ServerBinder.configure(ServerBinder.java:123)
    org.glassfish.hk2.utilities.binding.AbstractBinder.bind(AbstractBinder.java:171)
    org.glassfish.jersey.internal.inject.Injections.bind(Injections.java:157)
    org.glassfish.jersey.internal.inject.Injections._createLocator(Injections.java:147)
    org.glassfish.jersey.internal.inject.Injections.createLocator(Injections.java:137)
    org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:271)
    org.glassfish.jersey.servlet.WebComponent.<init>(WebComponent.java:298)
    org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:167)
    org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:349)
    javax.servlet.GenericServlet.init(GenericServlet.java:160)
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
    org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
    org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
    org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
    java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    java.lang.Thread.run(Unknown Source)

Below is the web.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- This web.xml file is not required when using Servlet 3.0 container,
     see implementation details http://jersey.java.net/nonav/documentation/latest/jax-rs.html -->
<web-app version="2.5" 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_2_5.xsd">
    <servlet>
        <servlet-name>Jersey Web Application</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>jersey.config.server.provider.packages</param-name>
            <param-value>com.jersey</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Jersey Web Application</servlet-name>
        <url-pattern>/webapi/*</url-pattern>
    </servlet-mapping>
</web-app>

Below is the java class.

package com.jersey;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

/**
 * Root resource (exposed at "myresource" path)
 */
@Path("myresource")
public class MyResource {

    /**
     * Method handling HTTP GET requests. The returned object will be sent
     * to the client as "text/plain" media type.
     *
     * @return String that will be returned as a text/plain response.
     */
    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String getIt() {
        return "Got it!";
    }
}

Below is the pom.xml file.

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <groupId>com.jersey</groupId>
    <artifactId>FirstJersey</artifactId>
    <packaging>war</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>FirstJersey</name>

    <build>
        <finalName>FirstJersey</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.5.1</version>
                <inherited>true</inherited>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.glassfish.jersey</groupId>
                <artifactId>jersey-bom</artifactId>
                <version>${jersey.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <dependency>
            <groupId>org.glassfish.jersey.containers</groupId>
            <artifactId>jersey-container-servlet-core</artifactId>
            <!-- use the following artifactId if you don't need servlet 2.x compatibility -->
            <!-- artifactId>jersey-container-servlet</artifactId -->
        </dependency>
        <!-- uncomment this to get JSON support
        <dependency>
            <groupId>org.glassfish.jersey.media</groupId>
            <artifactId>jersey-media-moxy</artifactId>
        </dependency>
        -->
    </dependencies>
    <properties>
        <jersey.version>2.2</jersey.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
</project>

Working on following version.

  1. Jdk-1.7.0
  2. apache-tomcat-7.0.34
  3. Eclipse Juno
  4. apache-maven-3.2.1

Also I have tried using deleted the maven repository folder and updated the project so fresh local repository created.

Please let me know the solution. Thanks in advance.

Upvotes: 0

Views: 3397

Answers (1)

Prakash
Prakash

Reputation: 75

Until version 2.6, Jersey was compiled with Java SE 6. This has changes in Jersey 2.7. Now almost all Jersey components are compiled with Java SE 7 target. It means, that you will need at least Java SE 7 to be able to compile and run your application that is using latest Jersey. Only core-common and core-client modules are still compiled with Java class version runnable with Java SE 6.

Below is the link for the same https://jersey.java.net/documentation/latest/modules-and-dependencies.html

So I have updgraded to the following Archetype which is supported by Jdk 1.7

mvn archetype:generate -DarchetypeGroupId=org.glassfish.jersey.archetypes -DarchetypeArtifactId=jersey-quickstart-webapp -DarchetypeVersion=2.9

Upvotes: 1

Related Questions