Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [ecf-dev] POST ECF Rest call

Hi Scott,
The url ="" or "http://locacalhost:8092/myResouce"

Please not that  i have the  same code snippet working for GET request.Or what i mean is that instead of HttpPostRequestType  i use HttpGetRequestType on client side .
On server side i have
public class MyResource extends ServerResource {
@GET
public Object getResource() {
    return "Some data"
           }
} or restlet implemented like that tutorial
http://wiki.restlet.org/docs_2.0/13-restlet/275-restlet/312-restlet.html

I do not provide the server code as it is product specific and do not have anything we can look at.
The working workflow is like that:
1. client: make ECF Rest call  with HttpGetRequstType
2.server: getResource() is invoked and return some data(the code above)
3: client: ecf deserialize() is invoked with parameter responseBody  containing "Some data" string.

So i am able to make a GET ECF Rest request successfully and return response.The problem is i do not know how to make a POST request with ECF Rest API or better say how to invoke the ECF Rest call  on client so that be able to take the sent object from getResource() on server.

Yes.  As I said, I have a Restlet-based ECF remote services provider now...that allows remote Restlet resources to be both discovered (via OSGi EndpointDescriptions), and a functioning proxy to be automatically created at remote service discover time.  This makes the implementation of the Restlet client completely unnecessary (i.e. it's done automatically by the OSGi remote services implementation).

This is the next thing i wanna try.Can i download  the Restlet-based ECF provider from somewhere? I somehow wanted to make the above approach work beforehand.

Thanks




2011/8/9 Scott Lewis <slewis@xxxxxxxxxxxxx>
Hi Atanas,


On 8/9/2011 8:53 AM, Атанас Тодоров wrote:
Hi Scott,

I have tried what you suggested.I also set the requestEntityType to 0 
HttpPostRequestType postRequest = new HttpPostRequestType(0); so the code on client side looks like that :
IRemoteCallParameter [] defaultParams = RemoteCallParameterFactory.createParameters("default","my Default Value");
HttpPostRequestType postRequest = new HttpPostRequestType(0);
IRemoteCallable callable = RestCallableFactory.createCallable(url, url,
   defaultParams, postRequest, IRestCall.DEFAULT_TIMEOUT);
IRemoteServiceRegistration registration = adapter.registerCallables(
new IRemoteCallable[] { callable }, null);
IRemoteService restClientService = adapter
.getRemoteService(registration.getReference());
InputStream inputStream = new ByteArrayInputStream("My Test value".getBytes(Charset.defaultCharset()));
return (T) restClientService.callSync(RestCallFactory.createRestCall(url, new Object[]{inputStream}));

And what happens as a result of this callSync?

Also...what is the value of url variable?  Perhaps there is some problem with the setup/mapping of the callables to Restlet remote method calls?  And how exactly does restlet represent the getResource method call in terms of the url + path + parameters?  My suspicion is that somehow the client is not providing the appropriate url+path+params that Restlet server expects for the getResource request.  Note the RestClientService class has a number of overridable methods (both public and protected) that allow the remote call to be made specific to a particular rest framework (e.g. Restlet).




I guess you are familiar with Restlet Framework.

Yes.  As I said, I have a Restlet-based ECF remote services provider now...that allows remote Restlet resources to be both discovered (via OSGi EndpointDescriptions), and a functioning proxy to be automatically created at remote service discover time.  This makes the implementation of the Restlet client completely unnecessary (i.e. it's done automatically by the OSGi remote services implementation).



On server side i have a restlet that expose a web resource.Making a remote rest call via ECF i actually invoke this method below.

@POST
public void getResource(){
org.restlet.Request ---> how take the send inputStream from that request
}

I am also  willing to provide some example if we make it work of course.

If you provide the client code that you are working with, and provide access to some service for testing, I'll help debug and we can then perhaps make it available as an example and/or test.

Scott


_______________________________________________
ecf-dev mailing list
ecf-dev@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/ecf-dev



Back to the top