@GET @Path("entityManager") @Produces(MediaType.APPLICATION_JSON) public String search( @QueryParam("sessionId") String sessionId, @QueryParam("query") String query, @QueryParam("id") Long id) throws IcatException { if (sessionId == null) { throw new IcatException(IcatExceptionType.BAD_PARAMETER, "sessionId is not set"); } if (query == null) { throw new IcatException(IcatExceptionType.BAD_PARAMETER, "query is not set"); } ByteArrayOutputStream baos = new ByteArrayOutputStream(); JsonGenerator gen = Json.createGenerator(baos); String userName = beanManager.getUserName(sessionId, manager); if (id == null) { gen.writeStartArray(); for (Object result : beanManager.search(userName, query, manager, userTransaction)) { if (result == null) { gen.writeNull(); } else if (result instanceof EntityBaseBean) { gen.writeStartObject(); gen.writeStartObject(result.getClass().getSimpleName()); jsonise((EntityBaseBean) result, gen); gen.writeEnd(); gen.writeEnd(); } else if (result instanceof Long) { gen.write((Long) result); } else if (result instanceof Double) { if (Double.isNaN((double) result)) { gen.writeNull(); } else { gen.write((Double) result); } } else if (result instanceof String) { gen.write((String) result); } else if (result instanceof Boolean) { gen.write((Boolean) result); } else { throw new IcatException( IcatException.IcatExceptionType.INTERNAL, "Don't know how to jsonise " + result.getClass()); } } gen.writeEnd(); } else { EntityBaseBean result = beanManager.get(userName, query, id, manager, userTransaction); gen.writeStartObject(); gen.writeStartObject(result.getClass().getSimpleName()); jsonise(result, gen); gen.writeEnd(); gen.writeEnd(); } gen.close(); return baos.toString(); }