I am trying to use the toJsonArray on a list of domain objects and getting this:
My class looks like this:Code:2012-02-16 10:06:57,770 [taskScheduler-2] ERROR org.springframework.scheduling.support.MethodInvokingRunnable - Invocation of method 'processPendingMessages' on target class [class com.xyz.art.messaging.MessagingCoordinator] failed flexjson.JSONException: Error trying to deepSerialize at flexjson.transformer.ObjectTransformer.transform(ObjectTransformer.java:61) at flexjson.transformer.TransformerWrapper.transform(TransformerWrapper.java:22) at flexjson.transformer.ObjectTransformer.transform(ObjectTransformer.java:49) at flexjson.transformer.TransformerWrapper.transform(TransformerWrapper.java:22) at flexjson.transformer.ObjectTransformer.transform(ObjectTransformer.java:49) at flexjson.transformer.TransformerWrapper.transform(TransformerWrapper.java:22) at flexjson.transformer.ObjectTransformer.transform(ObjectTransformer.java:49) at flexjson.transformer.TransformerWrapper.transform(TransformerWrapper.java:22) at flexjson.JSONContext.transform(JSONContext.java:73) at flexjson.transformer.IterableTransformer.transform(IterableTransformer.java:29) at flexjson.transformer.TransformerWrapper.transform(TransformerWrapper.java:22) at flexjson.JSONContext.transform(JSONContext.java:73) at flexjson.JSONSerializer.serialize(JSONSerializer.java:377) at flexjson.JSONSerializer.serialize(JSONSerializer.java:235) at com.xyz.art.domain.Message_Roo_Json.toJsonArray_aroundBody2(Message_Roo_Json.aj:24) at com.xyz.art.domain.Message_Roo_Json.ajc$interMethod$com_xyz_art_domain_Message_Roo_Json$com_xyz_art_domain_Message$toJsonArray(Message_Roo_Json.aj:1) at com.xyz.art.domain.Message.toJsonArray(Message.java:1) at com.xyz.art.domain.Message_Roo_Json.ajc$interMethodDispatch1$com_xyz_art_domain_Message_Roo_Json$com_xyz_art_domain_Message$toJsonArray(Message_Roo_Json.aj) at com.xyz.art.messaging.MessagingCoordinator.processPendingMessages(MessagingCoordinator.java:113) at sun.reflect.GeneratedMethodAccessor87.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.springframework.util.MethodInvoker.invoke(MethodInvoker.java:273) at org.springframework.scheduling.support.MethodInvokingRunnable.run(MethodInvokingRunnable.java:65) at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:51) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441) at java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:317) at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:98) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:180) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:204) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:680) Caused by: java.lang.IllegalAccessException: Class flexjson.BeanProperty can not access a member of class sun.util.calendar.CalendarDate with modifiers "private" at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:65) at java.lang.reflect.Field.doSecurityCheck(Field.java:960) at java.lang.reflect.Field.getFieldAccessor(Field.java:896) at java.lang.reflect.Field.get(Field.java:358) at flexjson.BeanProperty.getValue(BeanProperty.java:104) at flexjson.transformer.ObjectTransformer.transform(ObjectTransformer.java:37) ... 33 more
Nothing overly crazy. What I am confused about is why it's complaining about serializing the Calendar objects? Aren't all the values marked "private"? I have use the Object.toJsonArray many times, and never had a problem with other class members that were marked as "private".Code:package com.xyz.art.domain; import java.util.Calendar; import java.util.HashSet; import java.util.List; import java.util.Set; import javax.persistence.EntityManager; import javax.persistence.Enumerated; import javax.persistence.ManyToMany; import javax.persistence.OneToMany; import javax.persistence.Temporal; import javax.persistence.TemporalType; import javax.persistence.TypedQuery; import javax.validation.constraints.NotNull; import org.springframework.format.annotation.DateTimeFormat; import org.springframework.roo.addon.javabean.RooJavaBean; import org.springframework.roo.addon.jpa.activerecord.RooJpaActiveRecord; import org.springframework.roo.addon.json.RooJson; import org.springframework.roo.addon.tostring.RooToString; @RooJavaBean @RooToString @RooJpaActiveRecord @RooJson public class Message { @NotNull @Enumerated private MessageDisplayType displayType; @NotNull private String title; @NotNull private String message; @ManyToMany private Set<SiteAuthority> destinationAuthorities = new HashSet<SiteAuthority>(); /** * If ackRequired == true, the message will continue to be sent until it is acknowledged. * If ackRequired == false, the message is auto-ack'ed when it is sent, as we don't care * about guaranteed delivery. */ private boolean ackRequired = false; @NotNull @Temporal(TemporalType.TIMESTAMP) @DateTimeFormat(style = "MM") private Calendar createdOn = Calendar.getInstance(); @Temporal(TemporalType.TIMESTAMP) @DateTimeFormat(style = "MM") private Calendar sentOn; @Temporal(TemporalType.TIMESTAMP) @DateTimeFormat(style = "MM") private Calendar start; @Temporal(TemporalType.TIMESTAMP) @DateTimeFormat(style = "MM") private Calendar expiration; }
Anyone know why it might be complaining now?


Reply With Quote