Hi,
I have a resource that returns OrderedAssembly<Movie>. Problem is the client
wouldn't recognize the actual type argument (Movie) and is sending wrong
type to the Comparator .
Greatly appreciate any suggestion/help. The classes are as follows.
Client:
public void sendJerseyRequest() {
ClientConfig cc = new DefaultClientConfig();
cc.getSingletons().add(MovieSetMessageBodyReader.class);
Client client = Client.create(cc);
WebResource webResource = client.resource(GLASSFISH_ENDPOINT_URI);
webResource.accept(MediaType.TEXT_XML);
GenericType<OrderedAssembly<Movie>> assemblyType = new
GenericType<OrderedAssembly<Movie>>() {
};
System.out.println("sendJerseyRequest: " + assemblyType.getRawClass());
System.out.println("sendJerseyRequest: " + assemblyType.getType());
OrderedAssembly<Movie> movies = webResource.queryParam("path", PATH)
.get(assemblyType);
System.out.println(movies);
}
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.76 sec <<<
FAILURE!
testSendJerseyRequest(name.app.abhi.movieservice.ejb.restful.client.MovieSer
viceEjbRestfulClientTest) Time elapsed: 0.666 sec <<< ERROR!
java.lang.IllegalArgumentException: Invalid type parameter e1:
com.sun.org.apache.xerces.internal.dom.ElementNSImpl. Only
name.app.abhi.moviemanager.domain.Movie accepted.
at
name.app.abhi.moviemanager.service.impl.MovieComparator.compare(MovieCompara
tor.java:14)
at java.util.TreeMap.put(TreeMap.java:530)
at java.util.TreeSet.add(TreeSet.java:238)
at
com.sun.xml.internal.bind.v2.runtime.reflect.Lister$CollectionLister.addToPa
ck(Lister.java:290)
at
com.sun.xml.internal.bind.v2.runtime.reflect.Lister$CollectionLister.addToPa
ck(Lister.java:254)
at
com.sun.xml.internal.bind.v2.runtime.unmarshaller.Scope.add(Scope.java:106)
===============================================
Movie:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "movie", propOrder = { "name", "year", "genre", "filesize",
"fileExtension", "parent" })
public class Movie implements Serializable {
// fields, getters and setters
}
===============================================
OrderedAssembly:
@XmlRootElement(name = "movie-set", namespace =
"
http://name.app.abhi/movieservice")
@XmlType
@XmlAccessorType(XmlAccessType.FIELD)
public class OrderedAssembly<Movie> {
@XmlElement(name = "movie")
SortedSet<Movie> elements = new TreeSet<Movie>(new
MovieComparator<Movie>());
public OrderedAssembly() {
}
public OrderedAssembly(SortedSet<Movie> ss) {
addAll(ss);
}
public OrderedAssembly(SortedSet<Movie> ss, Comparator<Movie>
comparator) {
elements = new TreeSet<Movie>(comparator);
addAll(ss);
}
public SortedSet<Movie> getElements() {
return elements;
}
private void addAll(SortedSet<Movie> ss) {
if (ss != null) {
elements.clear();
elements.addAll(ss);
}
}
}