I managed to solve my earlier problem by starting again with seam-gen this time (before I used the Eclipse based seam tools).
I still had to do some other config work as described here:
My Link
It now works for ResourceQuery and ResourceHome.
Then I wrote my own class using AbstractResource and MatrixParameters to return a List of entities. Works fine.
But now I am trying to return a simple String List only to get the
org.jboss.resteasy.core.NoMessageBodyWriterFoundFailure: Could not find MessageBodyWriter for response object of type: java.util.ArrayList of media type: application/xml
at org.jboss.resteasy.core.ServerResponse.writeTo(ServerResponse.java:166)
at org.jboss.resteasy.core.SynchronousDispatcher.writeJaxrsResponse(SynchronousDispatcher.java:530)
at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:467)
at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:117)
at org.jboss.seam.resteasy.ResteasyResourceAdapter$1.process(ResteasyResourceAdapter.java:146)
at org.jboss.seam.servlet.ContextualHttpServletRequest.run(ContextualHttpServletRequest.java:65)
at org.jboss.seam.resteasy.ResteasyResourceAdapter.getResource(ResteasyResourceAdapter.java:122)
at org.jboss.seam.servlet.SeamResourceServlet.service(SeamResourceServlet.java:80)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:83)
at org.jboss.seam.web.IdentityFilter.doFilter(IdentityFilter.java:40)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
at org.jboss.seam.web.MultipartFilter.doFilter(MultipartFilter.java:90)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
at org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:64)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
at org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:45)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:206)
at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:388)
at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:515)
at org.jboss.seam.web.Ajax4jsfFilter.doFilter(Ajax4jsfFilter.java:56)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
at org.jboss.seam.web.LoggingFilter.doFilter(LoggingFilter.java:60)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:73)
at org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:158)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:235)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:190)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:433)
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:92)
at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126)
at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:70)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:829)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:598)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:637)
This is the class:
import static javax.ws.rs.core.Response.Status.BAD_REQUEST;
import static javax.ws.rs.core.Response.Status.UNSUPPORTED_MEDIA_TYPE;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.List;
import javax.persistence.EntityManager;
import javax.ws.rs.DefaultValue;
import javax.ws.rs.GET;
import javax.ws.rs.MatrixParam;
import javax.ws.rs.Path;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.GenericEntity;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import org.jboss.resteasy.annotations.providers.jaxb.Wrapped;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Logger;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.log.Log;
import org.jboss.seam.resteasy.AbstractResource;
import com.strokeaverage.webservice.model.CourseInfo;
@Name("courseInfoSearch")
@Path("/search")
public class CourseInfoSearch extends AbstractResource<CourseInfo>{
@Logger
private static Log log;
public CourseInfoSearch(){
setMediaTypes(new String[] {"application/xml","application/json", "application/fastinfoset" });
}
@In
private EntityManager entityManager;
@GET
@Path("/countries")
@Wrapped
public Response getCountryList(){
MediaType selectedMediaType = selectResponseMediaType();
if (selectedMediaType == null)
{
return Response.status(UNSUPPORTED_MEDIA_TYPE).build();
}
List<String> countryList = entityManager.createQuery("select DISTINCT(ci.country) from CourseInfo ci")
.setMaxResults(100)
.getResultList();
for(String s:countryList){
log.info("#0", s);
}
GenericEntity<List<String>> entity = new GenericEntity<List<String>>(countryList) {};
return Response.ok(entity, selectedMediaType).build();
}
@GET
@Path("/course")
@Wrapped
public Response getResourceList(@MatrixParam("name") String name, @MatrixParam("country") String country, @MatrixParam("county") String county, @MatrixParam("start") @DefaultValue("0") int start, @MatrixParam("show") @DefaultValue("25") int show)
{
log.info("name #0, country #1, county #2, start #3 show #4",name,country,county,start,show);
MediaType selectedMediaType = selectResponseMediaType();
if (selectedMediaType == null)
{
return Response.status(UNSUPPORTED_MEDIA_TYPE).build();
}
if ((start < 0) || (show < 0))
{
return Response.status(BAD_REQUEST).build();
}
final List<CourseInfo> result = entityManager.createQuery("select ci from CourseInfo ci where " +
"(:name IS NULL OR (ci.golfClubName LIKE '%'||:name||'%')) " +
"AND (:country IS NULL OR (ci.country LIKE :country||'%')) " +
"AND (:county IS NULL OR (ci.county LIKE :county||'%')) " +
"ORDER BY ci.golfClubName")
.setParameter("name", name)
.setParameter("country", country)
.setParameter("county", county)
.setMaxResults(show)
.setFirstResult(start)
.getResultList();
// create a proper response type
Type responseType = new ParameterizedType()
{
public Type getRawType()
{
return result.getClass();
}
public Type getOwnerType()
{
return null;
}
public Type[] getActualTypeArguments()
{
return new Type[]{getEntityClass()};
}
};
return Response.ok(new GenericEntity(result, responseType)
{
}, selectedMediaType).build();
}
}
The getResourceList() Method works fine but the getCountryList() throws that NoMessageBodyWriterFoundFailure.
This is the lists of jars I am including (from deployed-jars.list)
antlr-runtime.jar
commons-beanutils.jar
commons-digester.jar
core.jar
drools-templates.jar
drools-decisiontables.jar
drools-api.jar
drools-compiler.jar
drools-core.jar
janino.jar
jboss-el.jar
jboss-seam.jar
jboss-seam-debug.jar
jboss-seam-excel.jar
jboss-seam-ioc.jar
jboss-seam-mail.jar
jboss-seam-pdf.jar
jboss-seam-remoting.jar
jboss-seam-rss.jar
jboss-seam-ui.jar
jbpm-jpdl.jar
jsf-facelets.jar
jxl.jar
mvel2.jar
richfaces-api.jar
richfaces-impl.jar
richfaces-ui.jar
jboss-seam-resteasy.jar
jaxrs-api.jar
resteasy-jaxrs.jar
resteasy-atom-provider.jar
resteasy-jaxb-provider.jar
resteasy-jettison-provider.jar
# You can remove the JARs for themes you aren't using
darkX.jar
glassX.jar
laguna.jar
No changes made to the default components.xml, web.xml and pages.xml