I guess nobody encountered this problem before?
On Friday, July 13, 2012 11:54:49 AM UTC, ismet wrote:
> Hi,
> I got an error while querying a enum field which seems to me odd.
>
> java.lang.RuntimeException: java.lang.RuntimeException: java.lang.<WBR>IllegalArgumentException: BasicBSONList can only work with numeric keys, not: [className]
> at com.statu.alarga.common.<WBR>server.dao.CrewDaoImpl.<WBR>findAllActive(CrewDaoImpl.<WBR>java:118)
> at com.statu.alarga.common.<WBR>server.actionhandler.<WBR>GetAllCrewActionHandler.<WBR>execute(<WBR>GetAllCrewActionHandler.java:<WBR>23)
> at com.statu.alarga.common.<WBR>server.actionhandler.<WBR>GetAllCrewActionHandler.<WBR>execute(<WBR>GetAllCrewActionHandler.java:<WBR>1)
> at com.statu.alarga.common.<WBR>server.AbstractServiceImpl.<WBR>execute(AbstractServiceImpl.<WBR>java:32)
> at sun.reflect.<WBR>NativeMethodAccessorImpl.<WBR>invoke0(Native Method)
> at sun.reflect.<WBR>NativeMethodAccessorImpl.<WBR>invoke(<WBR>NativeMethodAccessorImpl.java:<WBR>39)
> at sun.reflect.<WBR>DelegatingMethodAccessorImpl.<WBR>invoke(<WBR>DelegatingMethodAccessorImpl.<WBR>java:25)
> at java.lang.reflect.Method.<WBR>invoke(Method.java:597)
> at com.google.gwt.user.server.<WBR>rpc.RPC.<WBR>invokeAndEncodeResponse(RPC.<WBR>java:569)
> at com.google.gwt.user.server.<WBR>rpc.RemoteServiceServlet.<WBR>processCall(<WBR>RemoteServiceServlet.java:208)
> at com.google.gwt.user.server.<WBR>rpc.RemoteServiceServlet.<WBR>processPost(<WBR>RemoteServiceServlet.java:248)
> at com.google.gwt.user.server.<WBR>rpc.<WBR>AbstractRemoteServiceServlet.<WBR>doPost(<WBR>AbstractRemoteServiceServlet.<WBR>java:62)
> at javax.servlet.http.<WBR>HttpServlet.service(<WBR>HttpServlet.java:637)
> at javax.servlet.http.<WBR>HttpServlet.service(<WBR>HttpServlet.java:717)
> at org.mortbay.jetty.servlet.<WBR>ServletHolder.handle(<WBR>ServletHolder.java:487)
> at org.mortbay.jetty.servlet.<WBR>ServletHandler$CachedChain.<WBR>doFilter(ServletHandler.java:<WBR>1097)
> at com.statu.alarga.common.<WBR>server.RequestFilter.doFilter(<WBR>RequestFilter.java:24)
> at org.mortbay.jetty.servlet.<WBR>ServletHandler$CachedChain.<WBR>doFilter(ServletHandler.java:<WBR>1088)
> at org.mortbay.jetty.servlet.<WBR>ServletHandler.handle(<WBR>ServletHandler.java:360)
> at org.mortbay.jetty.security.<WBR>SecurityHandler.handle(<WBR>SecurityHandler.java:216)
> at org.mortbay.jetty.servlet.<WBR>SessionHandler.handle(<WBR>SessionHandler.java:181)
> at org.mortbay.jetty.handler.<WBR>ContextHandler.handle(<WBR>ContextHandler.java:729)
> at org.mortbay.jetty.webapp.<WBR>WebAppContext.handle(<WBR>WebAppContext.java:405)
> at org.mortbay.jetty.handler.<WBR>HandlerWrapper.handle(<WBR>HandlerWrapper.java:152)
> at org.mortbay.jetty.handler.<WBR>RequestLogHandler.handle(<WBR>RequestLogHandler.java:49)
> at org.mortbay.jetty.handler.<WBR>HandlerWrapper.handle(<WBR>HandlerWrapper.java:152)
> at org.mortbay.jetty.Server.<WBR>handle(Server.java:324)
> at org.mortbay.jetty.<WBR>HttpConnection.handleRequest(<WBR>HttpConnection.java:505)
> at org.mortbay.jetty.<WBR>HttpConnection$RequestHandler.<WBR>content(HttpConnection.java:<WBR>843)
> at org.mortbay.jetty.HttpParser.<WBR>parseNext(HttpParser.java:647)
> at org.mortbay.jetty.HttpParser.<WBR>parseAvailable(HttpParser.<WBR>java:211)
> at org.mortbay.jetty.<WBR>HttpConnection.handle(<WBR>HttpConnection.java:380)
> at org.mortbay.io.nio.<WBR>SelectChannelEndPoint.run(<WBR>SelectChannelEndPoint.java:<WBR>395)
> at org.mortbay.thread.<WBR>QueuedThreadPool$PoolThread.<WBR>run(QueuedThreadPool.java:488)
> Caused by: java.lang.RuntimeException: java.lang.<WBR>IllegalArgumentException: BasicBSONList can only work with numeric keys, not: [className]
> at com.google.code.morphia.<WBR>mapping.EmbeddedMapper.<WBR>fromDBObject(EmbeddedMapper.<WBR>java:149)
> at com.google.code.morphia.<WBR>mapping.Mapper.<WBR>readMappedField(Mapper.java:<WBR>543)
> at com.google.code.morphia.<WBR>mapping.Mapper.fromDb(Mapper.<WBR>java:520)
> at com.google.code.morphia.<WBR>mapping.Mapper.fromDBObject(<WBR>Mapper.java:272)
> at com.google.code.morphia.query.<WBR>MorphiaIterator.convertItem(<WBR>MorphiaIterator.java:66)
> at com.google.code.morphia.query.<WBR>MorphiaIterator.processItem(<WBR>MorphiaIterator.java:53)
> at com.google.code.morphia.query.<WBR>MorphiaIterator.next(<WBR>MorphiaIterator.java:48)
> at com.google.code.morphia.query.<WBR>QueryImpl.asList(QueryImpl.<WBR>java:258)
> at com.statu.alarga.common.<WBR>server.dao.CrewDaoImpl.<WBR>findAllActive(CrewDaoImpl.<WBR>java:109)
> ... 33 more
> Caused by: java.lang.<WBR>IllegalArgumentException: BasicBSONList can only work with numeric keys, not: [className]
> at org.bson.types.BasicBSONList._<WBR>getInt(BasicBSONList.java:161)
> at org.bson.types.BasicBSONList._<WBR>getInt(BasicBSONList.java:152)
> at org.bson.types.BasicBSONList.<WBR>get(BasicBSONList.java:104)
> at com.google.code.morphia.<WBR>mapping.DefaultCreator.<WBR>getClass(DefaultCreator.java:<WBR>78)
> at com.google.code.morphia.<WBR>mapping.DefaultCreator.<WBR>createInstance(DefaultCreator.<WBR>java:48)
> at com.google.code.morphia.<WBR>mapping.EmbeddedMapper.<WBR>readMapOrCollectionOrEntity(<WBR>EmbeddedMapper.java:232)
> at com.google.code.morphia.<WBR>mapping.EmbeddedMapper.<WBR>readCollection(EmbeddedMapper.<WBR>java:178)
> at com.google.code.morphia.<WBR>mapping.EmbeddedMapper.<WBR>fromDBObject(EmbeddedMapper.<WBR>java:122)
> ... 41 more
>
> my method is very simple
>
> @Override
> public List<Crew> findAllActive() throws AlargaException {
> try {
>
> Query<Crew> query = createQuery().field("<WBR>accountStatus")
> .equal(AccountStatus.Active);
>
> QueryResults<Crew> find = dao.find(query);
>
> List<Crew> asList = find.asList();
>
> // sort the result
> // bad mongo ahhhh!!
> Collections.sort(asList, new CrewComparator());
>
> return asList;
>
> } catch (Exception e) {
> e.fillInStackTrace();
> e.printStackTrace();
> throw new AlargaException(getClass().<WBR>getSimpleName() + "[findAllActive] - " + e.toString());
> }
> }
>
> the generated query is
> { "accountStatus" : "Active"}
>
> which is fine, i tried it on with jmongobrowser and its successful.
>
> My crew object is like this
>
> @Entity
> public class Crew implements Serializable {
>
> /**
> * The key provider that provides the unique ID of a Crew.
> */
> public static final ProvidesKey<Crew> KEY_PROVIDER = new ProvidesKey<Crew>() {
> public Object getKey(Crew item) {
> return item == null ? null : <a href="
http://item.id" target="_blank">
item.id</a>;
> }
> };
>
> @Id
> public ObjectId id;
>
> @Reference
> private List<Comment> comments = new ArrayList<Comment>();