Mailing List webobjects-dev@wocommunity.org Message #32
From: Peer Sandtner <webobjects-dev@wocommunity.org>
Subject: Re: [WO-DEV] ERRest PUT not functioning
Date: Wed, 3 Feb 2021 17:46:29 +0100
To: WebObjects & WOnder Development <webobjects-dev@wocommunity.org>
Ok, i know about annotations in general, but I was not aware, that ERRest supports it.
And especially: These annotations are not part of your example code (TileV2Controller.java)

Or do I miss something?

Peer


Am 03.02.2021 um 16:07 schrieb Don Lindsay <webobjects-dev@wocommunity.org>:

Hello Peer;

There are annotations that can be used to mark methods for specific http verbs (@GET, @PUT, @POST, etc) it is combined with the @Path annotation which is passed a value for the path to the method (/TileV2, /TileV2/Delete, etc).  I think it is a way to do route creation without multiple lines of java code, like you showed.

Thanks

Don

On Feb 3, 2021, at 07:40, Peer Sandtner <webobjects-dev@wocommunity.org> wrote:

Ah, yes. Sorry, I was blind.

I am in development mode right now.  I see the put coming into the server and I can get it to go to the method using the @PUT annotation with the @PATH, but the json never gets put into a key so I can’t get the object to update.

"using the @PUT annotation with the @PATH"? What do you mean by that? Hm, excuse my stupidity...

How do you configure your ERXRouteRequestHandler? Something like in er.rest.example.Application (ERRestRouteExample)? I'm always doing something like:

ERXRouteRequestHandler routeRequestHandler = new ERXRouteRequestHandler(ERXRouteRequestHandler.WO);
routeRequestHandler.addRoute(new ERXRoute(Person.ENTITY_NAME, "/Person/{person:Person}", ERXRoute.Method.Put, PersonController.class, "update"));

regards,
Peer



Am 03.02.2021 um 09:40 schrieb Don Lindsay <webobjects-dev@wocommunity.org>:

Hello;

I am in development mode right now.  I see the put coming into the server and I can get it to go to the method using the @PUT annotation with the @PATH, but the json never gets put into a key so I can’t get the object to update.

Thanks,

Don

On Feb 3, 2021, at 02:17, Peer Sandtner <webobjects-dev@wocommunity.org> wrote:

Hello Don,

are you using an Apache? In my case I had to modify webobjects.conf:

# Specific to Apache 2.4
<Location /cgi-bin/WebObjects/>
    <Limit GET POST PUT OPTIONS >
      Require all granted
    </Limit>
    Require all denied
</Location>   

Peer



Am 03.02.2021 um 07:21 schrieb Don Lindsay <webobjects-dev@wocommunity.org>:

Hello;

I have a ERRest project. Everything seems to be working except for when I update an entity the updateAction never gets called.  I put breakpoints in the source code on createAction, updateAction, indexAction, showAction. The method that gets called for PUT is indexAction.  Am I doing something wrong with the code, I took a look at the example apps in Project Wonder and used them to create my boilerplate.
  
Thanks,

Don


The request from the developer tools in the browser:

<PastedGraphic-1.png>


How the data is being sent:

$.ajax({
url: '/cgi-bin/WebObjects/xxxxxx.woa/ra/TileV2',
type: ‘PUT',
data: workingObject,
dataType: 'json',
contentType: 'application/json',
success: function (data) {
comp._currentTile = data;
console.log(JSON.stringify(data))
bootbox.alert({
title: "Tile Save",
message: "Tile saved successfully",
centerVertical: true
});
comp.resetDirty();
comp.initialize(window.connectorsjson, window.tilejson);;
},
error: function (data) {
bootbox.alert({
title: "Tile Save",
message: "Saving the tile failed, please try again later",
centerVertical: true
});
}
});



TileV2Controller.java

public class TileV2Controller extends BaseRestController {

public TileV2Controller(WORequest request) {
super(request);
// TODO Auto-generated constructor stub
}

@Override
public WOActionResults createAction() throws Throwable {
TileV2 tilev2 = create(createInFilter());
editingContext().saveChanges();
return response(tilev2,outFilter());
}

public ERXKeyFilter createInFilter() {
return ERXKeyFilter.filterWithAttributes();
}

public ERXKeyFilter outFilter() {
ERXKeyFilter out = createInFilter();
return out;
}



/**
* Returns the value of the "tile" variable from the route.
* @return
*/
public TileV2 tilev2() {
TileV2 tilev2 = routeObjectForKey("tileV2");
tilev2.setTenant(((com.mozaic.app.Session)session()).getTenant());
return tilev2;
}

/**
* The query filter is used in indexAction to control what attributes and relationships
* you expose to qualifiers through query parameters
* @return
*/
public static ERXKeyFilter queryFilter() {
ERXKeyFilter filter = ERXKeyFilter.filterWithAllRecursive();
filter.includeAll();
return filter;
}

/**
* This showFilter is used by indexAction and showAction and says to return all attributes
* of an TileV2, and for the owner, include all of its attributes. 
*/
public static ERXKeyFilter showFilter() {
ERXKeyFilter filter = ERXKeyFilter.filterWithAttributes();
return filter;
}

/**
* The updateFilter is used by updateAction and createAction and says to allow updating any attributes of an
* TileV2.
* @return
*/
public static ERXKeyFilter updateFilter() {
ERXKeyFilter filter = ERXKeyFilter.filterWithAttributes();
return filter;
}

@Override
public WOActionResults updateAction() {
TileV2 tilev2 = tilev2();
update(tilev2, updateFilter());
editingContext().saveChanges();
return response(tilev2, showFilter());
}

@Override
public WOActionResults destroyAction() throws Throwable {
TileV2 tilev2 = tilev2();
tilev2.delete();
editingContext().saveChanges();
return response(tilev2, showFilter());
}

@Override
public WOActionResults newAction() throws Throwable {
TileV2 tilev2 = TileV2.createTileV2(editingContext(), "New Description", null, "New Tile",  ((com.mozaic.app.Session)session()).getTenant());
return response(tilev2, showFilter());
}

@Override
public WOActionResults showAction() {
return response(tilev2(), showFilter());
}

/**
* indexAction uses an ERXRestFetchSpecification, which optionally allows you to expose sorting, qualifying, and batching in query parameters 
*/
@Override
public WOActionResults indexAction() {
if (isSchemaRequest()) {
return schemaResponse(showFilter());
}
ERXRestFetchSpecification<TileV2> fetchSpec = new ERXRestFetchSpecification<>(TileV2.ENTITY_NAME, null, null, queryFilter(), TileV2.NAME.ascs(), 25);
return response(fetchSpec, showFilter());
}


}






Subscribe (FEED) Subscribe (DIGEST) Subscribe (INDEX) Unsubscribe Mail to Listmaster