You might take a look at [1], particoularly the section called "root
object".
That's because I'm afraid that json plugin is trying to serialize your EJB
service.
HTH

[1] struts.apache.org/2.2.3/docs/json-plugin.html

Maurizio Cucchiara

Il giorno 07/set/2011 07.43, "Ken McWilliams" <ken.mcwilli...@gmail.com> ha
scritto:
> I have a JPA entity, which hibernate is proxying.
>
> The following action works as it explicitly states the properties to
> include, however what I would much rather do is use excludeProperties to
> remove the problematic property. The problem property when serialized
> causes a "Positioned Update not supported" exception.
>
> The interesting thing is, all the properties on the entity class are
> persisted correctly if explicitly included.
>
> Looking in the the debugger shows there is a property called
> "$JAVASSIST_READ_WRITE_HANDLER" of type FieldInterceptorImpl which
> Hibernate/JPA adds to the entity. I'm pretty sure this is what is
> causing it to fail.
>
>
> I've tried the following:
> @Action(value = "list-clients", results = {
> @Result(type = "json", params = {
> "excludeProperties",
> "list\\[.*\\]\\.\\$JAVASSIST_READ_WRITE_HANDLER.*"
> })
> })
>
> but with no luck. Following is my action and the entity class.
>
>
>
> Here is my action (In a _working_ state):
> /////////////////////////////
> @ParentPackage("json-default")
> @Result(type = "json")
> public class ListTable extends ActionSupport {
>
> @EJB
> private ClientService clientService;
> private List list;
>
> @Action(value = "list-clients", results = {
> @Result(type = "json", params = {
> "includeProperties",
> "list\\[.*\\]\\.name, list\\[.*\\]\\.id, list\\[.*\\]\
> \.timelogCollection\\..*"
> })
> })
> public String listClients() {
> list = clientService.list();
> return SUCCESS;
> }
>
> public List getList() {
> return list;
> }
> }
> /////////////////////////////
>
> Here is the entity:
> /////////////////////////////
> @Entity
> @Table(name = "client")
> @XmlRootElement
> @NamedQueries({
> @NamedQuery(name = "Client.findAll", query = "SELECT c FROM Client
> c"),
> @NamedQuery(name = "Client.findById", query = "SELECT c FROM Client
> c WHERE c.id = :id"),
> @NamedQuery(name = "Client.findByName", query = "SELECT c FROM
> Client c WHERE c.name = :name")})
> public class Client implements Serializable {
> private static final long serialVersionUID = 1L;
> @Id
> @GeneratedValue(strategy = GenerationType.IDENTITY)
> @Basic(optional = false)
> @NotNull
> @Column(name = "id")
> private Integer id;
> @Size(max = 45)
> @Column(name = "name")
> private String name;
> @OneToMany(cascade = CascadeType.ALL, mappedBy = "clientId")
> private Collection<Timelog> timelogCollection;
>
> public Client() {
> }
>
> public Client(Integer id) {
> this.id = id;
> }
>
> public Integer getId() {
> return id;
> }
>
> public void setId(Integer id) {
> this.id = id;
> }
>
> public String getName() {
> return name;
> }
>
> public void setName(String name) {
> this.name = name;
> }
>
> @XmlTransient
> public Collection<Timelog> getTimelogCollection() {
> return timelogCollection;
> }
>
> public void setTimelogCollection(Collection<Timelog>
> timelogCollection) {
> this.timelogCollection = timelogCollection;
> }
>
> @Override
> public int hashCode() {
> int hash = 0;
> hash += (id != null ? id.hashCode() : 0);
> return hash;
> }
>
> @Override
> public boolean equals(Object object) {
> // TODO: Warning - this method won't work in the case the id
> fields are not set
> if (!(object instanceof Client)) {
> return false;
> }
> Client other = (Client) object;
> if ((this.id == null && other.id != null) || (this.id != null
> && !this.id.equals(other.id))) {
> return false;
> }
> return true;
> }
>
> @Override
> public String toString() {
> return "com.aerose.kentimekeeper.db.Client[ id=" + id + " ]";
> }
>
> }
> /////////////////////////////
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscr...@struts.apache.org
> For additional commands, e-mail: user-h...@struts.apache.org
>

Reply via email to