You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@isis.apache.org by "Vladimir Nisevic (JIRA)" <ji...@apache.org> on 2014/09/30 11:22:35 UTC

[jira] [Comment Edited] (ISIS-899) Can't return a view model in Isis 1.6.0 over RO viewer.

    [ https://issues.apache.org/jira/browse/ISIS-899?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14153004#comment-14153004 ] 

Vladimir Nisevic edited comment on ISIS-899 at 9/30/14 9:22 AM:
----------------------------------------------------------------

Hi Jeroen, Dan. I've just tested my two ViewModel classes with latest master version - I've put my code into "todoapp-dom" project and recompiled.

Domain Service:
{code}
@Named("Address Search API")
@DomainService(menuOrder = "1.3")
public class AsePublicService {

   @Render(Type.EAGERLY)
    public Address getAddress(@Named("Source System") final String sourceSystem, @Named("User") final String user, @Named("Agent") final String agent, @Named("LKMS-ID") final String lkmsId, @Named("Valid Location") final boolean validLocation) {

        final Address address = new Address();
        address.setHousenumber("12");
        Street street = new Street();
        street.setStreetname("5th Avenue");
        address.setStreet(street);
        return address;

    }
{code}

Address Model:
{code}
package a1.ase.viewmodel;

import org.apache.isis.applib.annotation.MemberOrder;
import org.apache.isis.applib.annotation.ViewModel;

@ViewModel
public class Address {

    public String title() {
        return "Address lkmsId:" + lkmsId;
    }

    // {{ LkmsId (property)
    private String lkmsId;

    @MemberOrder(sequence = "1")
    public String getLkmsId() {
        return lkmsId;
    }

    public void setLkmsId(final String lkmsId) {
        this.lkmsId = lkmsId;
    }

    // }}

    // {{ Street (property)
    private Street street;

    @MemberOrder(sequence = "3")
    public Street getStreet() {
        return street;
    }

    public void setStreet(final Street street) {
        this.street = street;
    }

    // }}

    // {{ Housenumber (property)
    private String housenumber;

    @MemberOrder(sequence = "2")
    public String getHousenumber() {
        return housenumber;
    }

    public void setHousenumber(final String housenumber) {
        this.housenumber = housenumber;
    }
    // }}

}

}
{code}

Street Model:
{code}
package a1.ase.viewmodel;

import org.apache.isis.applib.annotation.MemberOrder;
import org.apache.isis.applib.annotation.ViewModel;

@ViewModel
public class Street {

    public String title() {
        return "Street lkmsId:" + lkmsId;
    }

    // {{ LkmsId (property)
    private String lkmsId;

    @MemberOrder(sequence = "1")
    public String getLkmsId() {
        return lkmsId;
    }

    public void setLkmsId(final String lkmsId) {
        this.lkmsId = lkmsId;
    }

    // }}

    // {{ Streetname (property)
    private String streetname;

    @MemberOrder(sequence = "2")
    public String getStreetname() {
        return streetname;
    }

    public void setStreetname(final String aName) {
        this.streetname = aName;
    }

    // }}

}
{code}



Here my feedback

1.) using wicket viewer and calling the method getAddress, I get next exception

{code}
Stack trace:
org.apache.isis.core.runtime.persistence.PojoRecreationException
Could not recreate pojo for oid oid *a1.ase.viewmodel.Address:PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPG1lbWVudG8-PGhvdXNlbnVtYmVyPjEyPC9ob3VzZW51bWJlcj48c3RyZWV0LmJvb2ttYXJrPmExLmFzZS52aWV3bW9kZWwuU3RyZWV0OlBEOTRiV3dnZG1WeWMybHZiajBpTVM0d0lpQmxibU52WkdsdVp6MGlWVlJHTFRnaVB6NEtQRzFsYldWdWRHOC1QSE4wY21WbGRHNWhiV1UtTlhSb0lFRjJaVzUxWlR3dmMzUnlaV1YwYm1GdFpUNDhMMjFsYldWdWRHOC08L3N0cmVldC5ib29rbWFyaz48L21lbWVudG8-
org.apache.isis.core.runtime.persistence.adaptermanager.AdapterManagerDefault#adapterFor(AdapterManagerDefault.java:311)
org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento$Type$2#recreateAdapter(ObjectAdapterMemento.java:112)
org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento$Type#getAdapter(ObjectAdapterMemento.java:183)
org.apache.isis.viewer.wicket.model.m
{code}

2.) using restul viewer and calling http://localhost:8080/restful/services/toDoItems/actions/newToDo/invoke   with parameters

{code}
{
"sourceSystem": {"value": "CRM"},
"user": {"value": "user1"},
"agent": {"value": "agent1"},
"lKMS-ID": {"value": "123"},
"validLocation": {"value": "true"}
}
{code}

I get this result

{code}
{
  "links" : [ ],
  "resulttype" : "domainobject",
  "result" : {
    "links" : [ {
      "rel" : "self",
      "href" : "http://localhost:8080/restful/objects/a1.ase.viewmodel.Address/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPG1lbWVudG8-PGhvdXNlbnVtYmVyPjEyPC9ob3VzZW51bWJlcj48c3RyZWV0LmJvb2ttYXJrPmExLmFzZS52aWV3bW9kZWwuU3RyZWV0OlBEOTRiV3dnZG1WeWMybHZiajBpTVM0d0lpQmxibU52WkdsdVp6MGlWVlJHTFRnaVB6NEtQRzFsYldWdWRHOC1QSE4wY21WbGRHNWhiV1UtTlhSb0lFRjJaVzUxWlR3dmMzUnlaV1YwYm1GdFpUNDhMMjFsYldWdWRHOC08L3N0cmVldC5ib29rbWFyaz48L21lbWVudG8-",
      "method" : "GET",
      "type" : "application/json;profile=\"urn:org.restfulobjects:repr-types/object\"",
      "title" : "Address lkmsId:null"
    }, {
      "rel" : "describedby",
      "href" : "http://localhost:8080/restful/domain-types/a1.ase.viewmodel.Address",
      "method" : "GET",
      "type" : "application/json;profile=\"urn:org.restfulobjects:repr-types/domain-type\""
    }, {
      "rel" : "urn:org.restfulobjects:rels/update",
      "href" : "http://localhost:8080/restful/objects/a1.ase.viewmodel.Address/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPG1lbWVudG8-PGhvdXNlbnVtYmVyPjEyPC9ob3VzZW51bWJlcj48c3RyZWV0LmJvb2ttYXJrPmExLmFzZS52aWV3bW9kZWwuU3RyZWV0OlBEOTRiV3dnZG1WeWMybHZiajBpTVM0d0lpQmxibU52WkdsdVp6MGlWVlJHTFRnaVB6NEtQRzFsYldWdWRHOC1QSE4wY21WbGRHNWhiV1UtTlhSb0lFRjJaVzUxWlR3dmMzUnlaV1YwYm1GdFpUNDhMMjFsYldWdWRHOC08L3N0cmVldC5ib29rbWFyaz48L21lbWVudG8-",
      "method" : "PUT",
      "type" : "application/json;profile=\"urn:org.restfulobjects:repr-types/object\"",
      "arguments" : {
        "lkmsId" : {
          "id" : "lkmsId",
          "value" : null,
          "extensions" : {
            "x-isis-format" : "string"
          },
          "disabledReason" : "Non-cloneable view models are read-only"
        },
        "housenumber" : {
          "id" : "housenumber",
          "value" : "12",
          "extensions" : {
            "x-isis-format" : "string"
          },
          "disabledReason" : "Non-cloneable view models are read-only"
        },
        "street" : {
          "id" : "street",
          "value" : {
            "rel" : "urn:org.restfulobjects:rels/value",
            "href" : "http://localhost:8080/restful/objects/a1.ase.viewmodel.Street/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPG1lbWVudG8-PHN0cmVldG5hbWU-NXRoIEF2ZW51ZTwvc3RyZWV0bmFtZT48L21lbWVudG8-",
            "method" : "GET",
            "type" : "application/json;profile=\"urn:org.restfulobjects:repr-types/object\"",
            "title" : "Street lkmsId:null"
          },
          "disabledReason" : "Non-cloneable view models are read-only"
        }
      }
    } ],
    "extensions" : {
      "oid" : "*a1.ase.viewmodel.Address:PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPG1lbWVudG8-PGhvdXNlbnVtYmVyPjEyPC9ob3VzZW51bWJlcj48c3RyZWV0LmJvb2ttYXJrPmExLmFzZS52aWV3bW9kZWwuU3RyZWV0OlBEOTRiV3dnZG1WeWMybHZiajBpTVM0d0lpQmxibU52WkdsdVp6MGlWVlJHTFRnaVB6NEtQRzFsYldWdWRHOC1QSE4wY21WbGRHNWhiV1UtTlhSb0lFRjJaVzUxWlR3dmMzUnlaV1YwYm1GdFpUNDhMMjFsYldWdWRHOC08L3N0cmVldC5ib29rbWFyaz48L21lbWVudG8-",
      "isService" : false,
      "isPersistent" : true
    },
    "title" : "Address lkmsId:null",
    "domainType" : "a1.ase.viewmodel.Address",
    "instanceId" : "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPG1lbWVudG8-PGhvdXNlbnVtYmVyPjEyPC9ob3VzZW51bWJlcj48c3RyZWV0LmJvb2ttYXJrPmExLmFzZS52aWV3bW9kZWwuU3RyZWV0OlBEOTRiV3dnZG1WeWMybHZiajBpTVM0d0lpQmxibU52WkdsdVp6MGlWVlJHTFRnaVB6NEtQRzFsYldWdWRHOC1QSE4wY21WbGRHNWhiV1UtTlhSb0lFRjJaVzUxWlR3dmMzUnlaV1YwYm1GdFpUNDhMMjFsYldWdWRHOC08L3N0cmVldC5ib29rbWFyaz48L21lbWVudG8-",
    "members" : {
      "lkmsId" : {
        "id" : "lkmsId",
        "memberType" : "property",
        "links" : [ {
          "rel" : "urn:org.restfulobjects:rels/details;property=\"lkmsId\"",
          "href" : "http://localhost:8080/restful/objects/a1.ase.viewmodel.Address/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPG1lbWVudG8-PGhvdXNlbnVtYmVyPjEyPC9ob3VzZW51bWJlcj48c3RyZWV0LmJvb2ttYXJrPmExLmFzZS52aWV3bW9kZWwuU3RyZWV0OlBEOTRiV3dnZG1WeWMybHZiajBpTVM0d0lpQmxibU52WkdsdVp6MGlWVlJHTFRnaVB6NEtQRzFsYldWdWRHOC1QSE4wY21WbGRHNWhiV1UtTlhSb0lFRjJaVzUxWlR3dmMzUnlaV1YwYm1GdFpUNDhMMjFsYldWdWRHOC08L3N0cmVldC5ib29rbWFyaz48L21lbWVudG8-/properties/lkmsId",
          "method" : "GET",
          "type" : "application/json;profile=\"urn:org.restfulobjects:repr-types/object-property\""
        } ],
        "value" : null,
        "extensions" : {
          "x-isis-format" : "string"
        },
        "disabledReason" : "Non-cloneable view models are read-only"
      },
      "housenumber" : {
        "id" : "housenumber",
        "memberType" : "property",
        "links" : [ {
          "rel" : "urn:org.restfulobjects:rels/details;property=\"housenumber\"",
          "href" : "http://localhost:8080/restful/objects/a1.ase.viewmodel.Address/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPG1lbWVudG8-PGhvdXNlbnVtYmVyPjEyPC9ob3VzZW51bWJlcj48c3RyZWV0LmJvb2ttYXJrPmExLmFzZS52aWV3bW9kZWwuU3RyZWV0OlBEOTRiV3dnZG1WeWMybHZiajBpTVM0d0lpQmxibU52WkdsdVp6MGlWVlJHTFRnaVB6NEtQRzFsYldWdWRHOC1QSE4wY21WbGRHNWhiV1UtTlhSb0lFRjJaVzUxWlR3dmMzUnlaV1YwYm1GdFpUNDhMMjFsYldWdWRHOC08L3N0cmVldC5ib29rbWFyaz48L21lbWVudG8-/properties/housenumber",
          "method" : "GET",
          "type" : "application/json;profile=\"urn:org.restfulobjects:repr-types/object-property\""
        } ],
        "value" : "12",
        "extensions" : {
          "x-isis-format" : "string"
        },
        "disabledReason" : "Non-cloneable view models are read-only"
      },
      "street" : {
        "id" : "street",
        "memberType" : "property",
        "links" : [ {
          "rel" : "urn:org.restfulobjects:rels/details;property=\"street\"",
          "href" : "http://localhost:8080/restful/objects/a1.ase.viewmodel.Address/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPG1lbWVudG8-PGhvdXNlbnVtYmVyPjEyPC9ob3VzZW51bWJlcj48c3RyZWV0LmJvb2ttYXJrPmExLmFzZS52aWV3bW9kZWwuU3RyZWV0OlBEOTRiV3dnZG1WeWMybHZiajBpTVM0d0lpQmxibU52WkdsdVp6MGlWVlJHTFRnaVB6NEtQRzFsYldWdWRHOC1QSE4wY21WbGRHNWhiV1UtTlhSb0lFRjJaVzUxWlR3dmMzUnlaV1YwYm1GdFpUNDhMMjFsYldWdWRHOC08L3N0cmVldC5ib29rbWFyaz48L21lbWVudG8-/properties/street",
          "method" : "GET",
          "type" : "application/json;profile=\"urn:org.restfulobjects:repr-types/object-property\""
        } ],
        "value" : {
          "rel" : "urn:org.restfulobjects:rels/value",
          "href" : "http://localhost:8080/restful/objects/a1.ase.viewmodel.Street/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPG1lbWVudG8-PHN0cmVldG5hbWU-NXRoIEF2ZW51ZTwvc3RyZWV0bmFtZT48L21lbWVudG8-",
          "method" : "GET",
          "type" : "application/json;profile=\"urn:org.restfulobjects:repr-types/object\"",
          "title" : "Street lkmsId:null"
        },
        "disabledReason" : "Non-cloneable view models are read-only"
      }
    }
  },
  "extensions" : {
    "changed" : [ ],
    "disposed" : [ ]
  }
}

{code}



was (Author: niv):
Hi Jeroen, Dan. I've just tested my two ViewModel classes with latest master version - I've put my code into "todoapp-dom" project and recompiled.

Domain Service:
{code}
@Named("Address Search API")
@DomainService(menuOrder = "1.3")
public class AsePublicService {

   @Render(Type.EAGERLY)
    public Address getAddress(@Named("Source System") final String sourceSystem, @Named("User") final String user, @Named("Agent") final String agent, @Named("LKMS-ID") final String lkmsId, @Named("Valid Location") final boolean validLocation) {

        final Address address = new Address();
        address.setHousenumber("12");
        Street street = new Street();
        street.setStreetname("5th Avenue");
        address.setStreet(street);
        return address;

    }
{code}

Address Model:
{code}
package a1.ase.viewmodel;

import org.apache.isis.applib.annotation.MemberOrder;
import org.apache.isis.applib.annotation.ViewModel;

@ViewModel
public class Address {

    public String title() {
        return "Address lkmsId:" + lkmsId;
    }

    // {{ LkmsId (property)
    private String lkmsId;

    @MemberOrder(sequence = "1")
    public String getLkmsId() {
        return lkmsId;
    }

    public void setLkmsId(final String lkmsId) {
        this.lkmsId = lkmsId;
    }

    // }}

    // {{ Street (property)
    private Street street;

    @MemberOrder(sequence = "3")
    public Street getStreet() {
        return street;
    }

    public void setStreet(final Street street) {
        this.street = street;
    }

    // }}

    // {{ Housenumber (property)
    private String housenumber;

    @MemberOrder(sequence = "2")
    public String getHousenumber() {
        return housenumber;
    }

    public void setHousenumber(final String housenumber) {
        this.housenumber = housenumber;
    }
    // }}

}

}
{code}

Street Model:
{code}
package a1.ase.viewmodel;

import org.apache.isis.applib.annotation.MemberOrder;
import org.apache.isis.applib.annotation.ViewModel;

@ViewModel
public class Street {

    public String title() {
        return "Street lkmsId:" + lkmsId;
    }

    // {{ LkmsId (property)
    private String lkmsId;

    @MemberOrder(sequence = "1")
    public String getLkmsId() {
        return lkmsId;
    }

    public void setLkmsId(final String lkmsId) {
        this.lkmsId = lkmsId;
    }

    // }}

    // {{ Streetname (property)
    private String streetname;

    @MemberOrder(sequence = "2")
    public String getStreetname() {
        return streetname;
    }

    public void setStreetname(final String aName) {
        this.streetname = aName;
    }

    // }}

}
{code}



Here my feedback

1.) using wicket viewer and calling the method getAddress, I get next exception

{code}
Stack trace:
org.apache.isis.core.runtime.persistence.PojoRecreationException
Could not recreate pojo for oid oid *a1.ase.viewmodel.Address:PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPG1lbWVudG8-PGhvdXNlbnVtYmVyPjEyPC9ob3VzZW51bWJlcj48c3RyZWV0LmJvb2ttYXJrPmExLmFzZS52aWV3bW9kZWwuU3RyZWV0OlBEOTRiV3dnZG1WeWMybHZiajBpTVM0d0lpQmxibU52WkdsdVp6MGlWVlJHTFRnaVB6NEtQRzFsYldWdWRHOC1QSE4wY21WbGRHNWhiV1UtTlhSb0lFRjJaVzUxWlR3dmMzUnlaV1YwYm1GdFpUNDhMMjFsYldWdWRHOC08L3N0cmVldC5ib29rbWFyaz48L21lbWVudG8-
org.apache.isis.core.runtime.persistence.adaptermanager.AdapterManagerDefault#adapterFor(AdapterManagerDefault.java:311)
org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento$Type$2#recreateAdapter(ObjectAdapterMemento.java:112)
org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento$Type#getAdapter(ObjectAdapterMemento.java:183)
org.apache.isis.viewer.wicket.model.m
{code}

2.) using restul viewer and calling http://localhost:8080/restful/services/toDoItems/actions/newToDo/invoke   with parameters

{code}
{
"sourceSystem": {"value": "CRM"},
"user": {"value": "user1"},
"agent": {"value": "agent1"},
"lKMS-ID": {"value": "123"},
"validLocation": {"value": "true"}
}
{code}

I get this result

{code}
STATUS 200 OK
TIME 118 ms
Pretty Raw Preview Copy

{code}


> Can't return a view model in Isis 1.6.0 over RO viewer.
> -------------------------------------------------------
>
>                 Key: ISIS-899
>                 URL: https://issues.apache.org/jira/browse/ISIS-899
>             Project: Isis
>          Issue Type: Bug
>          Components: Core: Viewer: RestfulObjects
>    Affects Versions: core-1.6.0
>            Reporter: Dan Haywood
>            Assignee: Dan Haywood
>             Fix For: core-1.7.0
>
>         Attachments: Address.java, AsePublicService.java, Street.java, Wicket.png
>
>




--
This message was sent by Atlassian JIRA
(v6.3.4#6332)