tamuren
tamuren

Reputation: 1112

RESTEasy: Could not find writer for content-type application/json type

I have a restful service (post) that consumes (application/json) and produces (application/json). The single param for this service is an annotated java object.

I am using org.jboss.resteasy.client.ClientRequest to send the request to the service. However, I am getting this exception in the client end and the exception:

could not find writer for content-type application/json type.

Does this mean that I am missing some library jars or I have to write my own writer for application/json?

I am using resteasy 2.3.3.Final

Here are various dependencies I added to my pom that I think are probably related:

    <dependency>
        <groupId>org.jboss.resteasy</groupId>
        <artifactId>resteasy-jaxrs</artifactId>
        <version>2.3.3.Final</version>
    </dependency>

    <dependency>
        <groupId>com.fasterxml.jackson.jaxrs</groupId>
        <artifactId>jackson-jaxrs-json-provider</artifactId>
        <version>2.0.5</version>
    </dependency>

    <dependency>
       <groupId>org.jboss.resteasy</groupId>
       <artifactId>resteasy-jaxb-provider</artifactId>
       <version>2.3.4.Final</version>
    </dependency>

    <dependency>
       <groupId>org.jboss.resteasy</groupId>
       <artifactId>resteasy-jackson-provider</artifactId>
       <version>2.3.4.Final</version>
    </dependency>

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

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

Upvotes: 9

Views: 43093

Answers (5)

Stephan Berg
Stephan Berg

Reputation: 134

If you are using maven-assembly-plugin this problem is likely to occur. The previous answers helped me to solve this, as well as this post and this post.

I removed this

         <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <configuration>
                <archive>
                    <manifest>
                        <mainClass>com.example.MainClass</mainClass>
                    </manifest>
                </archive>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
            </configuration>
            <executions>
                <execution>
                    <id>make-assembly</id>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

and to migrate to maven-shade-plugin, I replaced it with this:

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>2.1</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <createDependencyReducedPom>false</createDependencyReducedPom>
                            <transformers>
                                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <mainClass>com.example.MainClass</mainClass>
                                </transformer>
                                <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                                    <resource>META-INF/services/javax.ws.rs.ext.Providers</resource>
                                </transformer>
                            </transformers>
                            <filters>
                                <filter>
                                    <artifact>*:*</artifact>
                                    <excludes>
                                        <exclude>META-INF/*.SF</exclude>
                                        <exclude>META-INF/*.DSA</exclude>
                                        <exclude>META-INF/*.RSA</exclude>
                                    </excludes>
                                </filter>
                            </filters>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

Upvotes: 0

Lokesh Gupta
Lokesh Gupta

Reputation: 472

<dependency>
      <groupId>org.codehaus.jackson</groupId>
      <artifactId>jackson-mapper-asl</artifactId>
      <version>${jackson-mapper-asl.version}</version>
      <scope>runtime</scope>
   </dependency>

   <dependency>
      <groupId>javax.xml.bind</groupId>
      <artifactId>jaxb-api</artifactId>
      <version>${jaxb-api.version}</version>
      <scope>runtime</scope>
   </dependency>

This is just more than enough.

Upvotes: 3

Alairton Dendena
Alairton Dendena

Reputation: 31

If you have all necessary dependencies applied in your project, check if your class implements Serializable.

@XmlRootElement
public class MyClass implements Serializable {
    //filds
}

Maybe it solve your problem.

Upvotes: 3

David
David

Reputation: 2262

I am using all libraries included (maven project), but still when running as standalone application, generated by maven-assembly-plugin, I got same error, but when running from IDE it works without problem.

I also had problem with log4j2 logging as it was completely broken when running as standalone fat jar application (in IDE works perfectly), so I first focus on solving this:

Log4j2 configuration not found when running standalone application builded by shade plugin

So I solved problem with missing provider and log4j2 by migrating from maven-assembly-plugin to maven-shade-plugin

Upvotes: 2

ezzadeen
ezzadeen

Reputation: 1063

If you plan to use newer versions of resteasy that implement JAX-RS 2.0, the following dependencies should solve your problem:

<dependency>
    <groupId>org.jboss.resteasy</groupId>
    <artifactId>resteasy-jaxrs</artifactId>
    <version>3.0.5.Final</version>
</dependency>

<dependency>
    <groupId>org.jboss.resteasy</groupId>
    <artifactId>jaxrs-api</artifactId>
    <version>3.0.5.Final</version>
</dependency>

<dependency>
    <groupId>org.jboss.resteasy</groupId>
    <artifactId>resteasy-jaxb-provider</artifactId>
    <version>3.0.5.Final</version>
</dependency>

<dependency>
    <groupId>org.jboss.resteasy</groupId>
    <artifactId>resteasy-jackson2-provider</artifactId>
    <version>3.0.5.Final</version>
</dependency>

Upvotes: 22

Related Questions