What building tool are you using. May you include project configuration file (pom.xml, build.gradle, etc) ?
On Tue, Jan 9, 2018 at 3:51 PM, Fredrik Widengren < [email protected]> wrote: > Thanks for your help! > > Below you can see my controller which is basically the Spring Boot "Hello > World" REST example, plus my Cayenne test. > When I access http://localhost:8080/greeting, I get the JSON result below: > > {"id":1,"content":"Hello, World!"} > > When I access http://localhost:8080/recipe/id=15, I'm directed to a Spring > Boot default error page. But in the log I can see that Cayenne works fine, > the object is fetched as it should. > > *// SPRING BOOT LOG* > 2018-01-09 21:41:04.733 INFO 6128 --- [io-8080-exec-38] > o.a.cayenne.log.CommonsJdbcEventLogger : Detected and installed adapter: > org.apache.cayenne.dba.mysql.MySQLAdapter > 2018-01-09 21:41:04.734 INFO 6128 --- [io-8080-exec-38] > o.a.cayenne.log.CommonsJdbcEventLogger : --- transaction started. > 2018-01-09 21:41:04.930 INFO 6128 --- [io-8080-exec-38] > o.a.cayenne.log.CommonsJdbcEventLogger : SELECT `t0`.`Comment`, > `t0`.`ID`, `t0`.`ID_privileges`, `t0`.`Instruction`, `t0`.`Name`, > `t0`.`No_of_servings`, `t0`.`Rating`, `t0`.`Source`, `t0`.`Timestamp`, > `t0`.`Username` FROM `foodbase`.`recipes` `t0` WHERE `t0`.`ID` = ? [bind: > 1->ID:13] > 2018-01-09 21:41:05.338 INFO 6128 --- [io-8080-exec-38] > o.a.cayenne.log.CommonsJdbcEventLogger : === returned 1 row. - took 579 > ms. > 2018-01-09 21:41:05.339 INFO 6128 --- [io-8080-exec-38] > o.a.cayenne.log.CommonsJdbcEventLogger : +++ transaction committed. > 2018-01-09 21:41:05.642 WARN 6128 --- [io-8080-exec-38] > .w.s.m.s.DefaultHandlerExceptionResolver : Failed to write HTTP message: > org.springframework.http.converter.HttpMessageNotWritableException: Could > not write JSON: No serializer found for class > org.apache.cayenne.tx.TransactionFilter and no properties discovered to > create BeanSerializer (to avoid exception, disable > SerializationFeature.FAIL_ON_EMPTY_BEANS); nested exception is > com.fasterxml.jackson.databind.JsonMappingException: No serializer found > for class org.apache.cayenne.tx.TransactionFilter and no properties > discovered to create BeanSerializer (to avoid exception, disable > SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: > model.Recipes["objectContext"]->org.apache.cayenne.access. > DataContext["channel"]->org.apache.cayenne.access. > DataDomain["filters"]->java.util.Collections$UnmodifiableRandomAccessList[ > 0]) > 2018-01-09 21:41:05.965 ERROR 6128 --- [io-8080-exec-38] > o.a.c.c.C.[.[.[.[dispatcherServlet] : Servlet.service() for servlet > dispatcherServlet threw exception > > > I have tested also to disable SerializationFeature.FAIL_ON_EMPTY_BEANS, as > suggested in the exception, with no luck. > > *// Class GreetingController* > package hello; > > import java.util.List; > import java.util.concurrent.atomic.AtomicLong; > > import org.apache.cayenne.ObjectContext; > import org.apache.cayenne.configuration.server.ServerRuntime; > import org.apache.cayenne.configuration.server.ServerRuntimeBuilder; > import org.apache.cayenne.query.ObjectSelect; > import org.springframework.web.bind.annotation.RequestMapping; > import org.springframework.web.bind.annotation.RequestParam; > import org.springframework.web.bind.annotation.RestController; > > import model.Recipes; > import model.auto._Recipes; > > @RestController > public class GreetingController { > > // Cayenne context > ServerRuntime cayenneRuntime = > ServerRuntimeBuilder.builder().addConfig("cayenne-project.xml").build(); > ObjectContext context = cayenneRuntime.newContext(); > > // Hello World example variables > private static final String template = "Hello, %s!"; > private final AtomicLong counter = new AtomicLong(); > > @RequestMapping("/greeting") > public Greeting greeting(@RequestParam(value="name", > defaultValue="World") String name) { > return new Greeting(counter.incrementAndGet(), > String.format(template, name)); > } > > @RequestMapping("/recipe") > public Recipes getRecipe(@RequestParam(value="id") int id) { > > List <Recipes> recipesList = > ObjectSelect.query(Recipes.class).where(Recipes.ID.eq(new > Long(id))).select(context); > > return recipesList.get(0); > > } > } > > 2018-01-09 9:00 GMT+01:00 Andrus Adamchik <[email protected]>: > > > To clarify, I realize you are using Spring, but Spring is many things. So > > maybe you can post here the relevant code (of a REST endpoint?), so that > we > > can advise on serialization. > > > > Andrus > > > > > > > On Jan 9, 2018, at 10:04 AM, Andrus Adamchik <[email protected]> > > wrote: > > > > > > What technology are you using to serialize your data to JSON? Do you > > have a code example? > > > > > > Andrus > > > > > > > > >> On Jan 9, 2018, at 9:24 AM, Fredrik Widengren < > > [email protected]> wrote: > > >> > > >> Hello Frank > > >> Thanks for your mail. > > >> They automatically included when running Spring Boot as I understand. > > Also the ”Hello World” example is running fine, and that one returns the > > answer in JSON. > > >> > > >> /Fredrik > > >> > > >> Skickat från min iPhone > > >> > > >>> 8 jan. 2018 kl. 23:07 skrev Frank Herrmann <frank.herrmann@ > > modernizingmedicine.com>: > > >>> > > >>> Do you have the Jackson libraries included in your project? They are > > >>> normally needed for JSON serialization/deserialization. > > >>> > > >>> On Mon, Jan 8, 2018 at 4:52 PM, Fredrik Widengren < > > >>> [email protected]> wrote: > > >>> > > >>>> Hello, > > >>>> > > >>>> I'm testing to setup Cayenne with Spring Boot. I have created a > simple > > >>>> REST service. Spring is working fine with a Hello World example from > > >>>> Spring.io. > > >>>> > > >>>> When I try to send back my cayenne objects that I have generated > from > > >>>> the Cayenne modeller, I get an exception that it can’t find a JSON > > >>>> serializer. > > >>>> > > >>>> Error: > > >>>> Could not write JSON: No serializer found for class > > >>>> org.apache.cayenne.tx.TransactionFilter > > >>>> > > >>>> I have read that a common reason for this is that the class that you > > >>>> try to serialize does not have any public getters/setters. The > > >>>> generated classes (in the auto package) from the modeller that > extends > > >>>> CayenneDataObject do have these public getters/setters. The class is > > >>>> however abstract, but I'm using the class created by the modeller > that > > >>>> extends the abstract modeller class. > > >>>> > > >>>> Anyone that have any experience from Cayenne and Spring that have > some > > >>>> input? > > >>>> > > >>>> Many thanks! > > >>>> > > >>>> /Fredrik > > >>>> > > >>> > > >>> > > >>> > > >>> -- > > >>> FRANK HERRMANN > > >>> SENIOR SOFTWARE ENGINEER > > >>> > > >>> T: 561-880-2998 x1563 > > >>> > > >>> E: [email protected] > > >>> > > >>> > > >>> > > >>> [image: [ Modernizing Medicine ]] <https://www.modmed.com/> > > >>> [image: [ Facebook ]] <https://www.facebook.com/modernizingmedicine> > > [image: > > >>> [ LinkedIn ]] <https://www.linkedin.com/ > company/modernizing-medicine/> > > [image: > > >>> [ YouTube ]] <https://www.youtube.com/user/modernizingmedicine> > > [image: [ > > >>> Twitter ]] <https://twitter.com/modmed> [image: [ Blog ]] > > >>> <https://www.modmed.com/BlogBeyondEMR> [image: [ Instagram ]] > > >>> <https://instagram.com/modernizing_medicine> > > >>> > > >>> [image: [ MOMENTUM 2017 ]] <https://www.eventproducers. > > events/momentum2017/> > > > > > > > >
