Gerald Stockinger [
https://community.jboss.org/people/gstvie] created the discussion
"Problem with StringConverter in JAX-RS"
To view the discussion, visit:
https://community.jboss.org/message/830562#830562
--------------------------------------------------------------
Hello,
I recently started working with JBoss again and I am struggling a bit.
At the moment, I am trying to build a JAX-RS service that is returns a simple data
structure.
One of the fields however has to be passed to a StringConverter.
The REST - service returns the json - data, however the String conversion is never
executed.
My environment ist jboss-eap-6.1. and I am using the jboss-javaee6-multi project
structure. I attached the complete source to this post.
I would be really, really thankful, if someone could help me with this problem :-)
My domain - model consists of two classes: MyObjectContainer and MyObject. MyObject should
use a StringConverter, when it is marshalled to JSON - this is the following code:
@Provider
public class MyConverter implements StringConverter<MyObject>{
@Override
public MyObject fromString(String arg0) {
MyObject my = new MyObject();
my.setLastName((arg0.split(", "))[0]);
my.setFirstName((arg0.split(", "))[1]);
return my;
}
@Override
public String toString(MyObject arg0) {
return arg0.getLastName() + ", " + arg0.getFirstName();
}
}
My Service looks like this and just returns some dummy information for testing:
@Path("/context")
public class ContextResource {
private final static String MEDIA_TYPE =
"application/vnd.mtp.context.v1+json";
@GET
@Produces(MEDIA_TYPE)
public MyObjectContainer getContext() {
MyObjectContainer mycont = new MyObjectContainer();
MyObject my = new MyObject();
mycont.setId(1L);
my.setLastName("Doe");
my.setFirstName("John");
mycont.setMy(my);
return mycont;
}
}
But somehow I always get this Json String:
{"my":{"firstName":"John","lastName":"Doe"},"id":1,"uri":"/mycontainer/1"}
instead of
{"my": "Doe,
John","id":1,"uri":"/mycontainer/1"}
the two domain objects look like this:
@JsonSerialize(include = Inclusion.NON_EMPTY)
public class MyObjectContainer implements Serializable{
public static final String URIPATTERN ="/mycontainer/{id}";
private MyObject my;
public MyObject getMy() {
return my;
}
...
}
public class MyObject {
private String firstName;
private String lastName;
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;
}
}
I tried quite a few things with web.xml (i.e. resteasy.scan, resteasy.providers,...),
however I think it should be enough to include an empty web.xml and use a JaxRsActivactor
class instead (as in the ticketmonster-tutorial).
To be complete - the relevant part of my pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<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>
<parent>
<artifactId>jboss-javaee6-multi</artifactId>
<groupId>org.jboss.tools.example</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>jboss-javaee6-multi-web</artifactId>
<packaging>war</packaging>
<name>jboss-javaee6-multi: WAR Module</name>
<
url>http://jboss.org/jbossas</url>
<licenses>
<license>
<name>Apache License, Version 2.0</name>
<distribution>repo</distribution>
<
url>http://www.apache.org/licenses/LICENSE-2.0.html</url>
</license>
</licenses>
<dependencies>
<!-- Dependency on the EJB module so we can use it's services if needed
-->
<dependency>
<groupId>org.jboss.tools.example</groupId>
<artifactId>jboss-javaee6-multi-ejb</artifactId>
<type>ejb</type>
<scope>provided</scope>
</dependency>
<!-- Import the JAX-RS API, we use provided scope as the API is included in JBoss
AS 7 -->
<dependency>
<groupId>org.jboss.spec.javax.ws.rs</groupId>
<artifactId>jboss-jaxrs-api_1.1_spec</artifactId>
<scope>provided</scope>
</dependency>
<!-- Import the CDI API, we use provided scope as the API is included in JBoss AS
7 -->
<dependency>
<groupId>javax.enterprise</groupId>
<artifactId>cdi-api</artifactId>
<scope>provided</scope>
</dependency>
<!-- Import the JSF API, we use provided scope as the API is included in JBoss AS
7 -->
<dependency>
<groupId>org.jboss.spec.javax.faces</groupId>
<artifactId>jboss-jsf-api_2.1_spec</artifactId>
<scope>provided</scope>
</dependency>
<!-- Import the JPA API, we use provided scope as the API is included in JBoss AS
7 -->
<dependency>
<groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.0-api</artifactId>
<scope>provided</scope>
</dependency>
<!-- JSR-303 (Bean Validation) Implementation -->
<!-- Provides portable constraints such as @Email -->
<!-- Hibernate Validator is shipped in JBoss AS 7 -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<scope>provided</scope>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jaxrs</artifactId>
<version>2.3.7.Final</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jackson-provider</artifactId>
<version>2.3.6.Final</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-cdi</artifactId>
<version>2.3.7.Final</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-jaxrs</artifactId>
<version>1.9.9</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.9</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-core-asl</artifactId>
<version>1.9.9</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>${version.war.plugin}</version>
<configuration>
<!-- Java EE 6 doesn't require web.xml, Maven needs to catch up!
-->
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
</plugins>
</build>
</project>
If somebody could point me in the right direction, I would be forever thankful ;-).
BR,
Gerald
--------------------------------------------------------------
Reply to this message by going to Community
[
https://community.jboss.org/message/830562#830562]
Start a new discussion in Beginner's Corner at Community
[
https://community.jboss.org/choose-container!input.jspa?contentType=1&...]