[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [ecf-dev] Sending PUT Request using ECF

Hi Scott,
First of all ,Thanks for you fast reply and the pretty good example.
I am glad to say that your example worked perfectly for me.
There are two evident things that i changed to make it work
1. As for POST request for PUT Request as well i had to provide some request parameters like this:
 IRemoteCallParameter[] rcp = null;
        if (request.getRequestType() instanceof HttpPostRequestType || request.getRequestType() instanceof HttpPutRequestType) {
            rcp = RemoteCallParameterFactory.createParameters("", "");//$NON-NLS-1$ 
        }
2 Instantiation of HttpPutRequestType
AbstractRequestType requestType = new HttpPutRequestType(HttpPutRequestType.STRING_REQUEST_ENTITY,  "application/xml", -1, "UTF-8");


I am not sure how efficiently  to collaborate on this as my code is not any different from what you provide in the example.

2012/3/13 Scott Lewis <slewis@xxxxxxxxxxxxx>
Hi Atanas,

I decided to go ahead and create a put test/example, even though I currently don't have a working service for it yet.

The example code is here (in org.eclipse.ecf.tests.remoteservice.rest)

http://git.eclipse.org/c/ecf/org.eclipse.ecf.git/tree/tests/bundles/org.eclipse.ecf.tests.remoteservice.rest/src/org/eclipse/ecf/tests/remoteservice/rest/RestPutServiceTest.java

The key thing for you will probably be the creation of the IRemoteCallable instance in the setUp method...along with the creation of the remote call parameter and the HttpPutRequestType with default content type and default charset.

Thanks,

Scott


 On 3/12/2012 12:25 PM, Атанас Тодоров wrote:
Hi Scott,
I think i will not be able to make the service public available but i can give you more detailed information which i hope will help you help me .Also i have some questions.

At this row : 
return (T) restClientService.callSync(RestCallFactory.createRestCall(resource, request.getBody()));
the request.getBody() value is :

[<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<PortSettings xsi:schemaLocation="/spm/configuration/common/schema/PortSettings.xsd" xmlns="http://namespaces.softwareag.com/Platform/Management/Common/PortSettings" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <Port alias="com.softwareag.jmx.connector.pid-">
        <Enabled>true</Enabled>
        <Number>4446</Number>
        <Protocol>JMX</Protocol>
        <ExtendedProperties>
            <Property name="jaasRealm">SSXLoginOS</Property>
            <Property name="secure">false</Property>
        </ExtendedProperties>
    </Port>
</PortSettings>
]
which means the data i want to sent is not empty and is part of the request body.

The information i am trying to send via the wire is xml so i am trying to construct the put request like this:
AbstractRequestType requestType = new HttpPutRequestType(HttpPutRequestType.STRING_REQUEST_ENTITY,"application/xml");

Is this the right way?There is no javadoc nor any examples like POST request examples so it is hard to guess how to use the API in the right way.
For this specific case for example I do not know what's the difference between all the constructors of HttpPutRequestType  class and I do not know which one to use.

Sending POST request via ECF do not require to specify content type but seems PUT request require that parameter.And if so why?



2012/3/12 Scott Lewis <slewis@xxxxxxxxxxxxx>
Hi Atanas,

Yes, I believe we probably can help you.  One of the difficulties of testing/example/demoing this, however, is to have a PUT-based web service available.  Is there a put-based web service that you can make available (even temporarily) for us to use?

...or point to some public put-based service that resembles your service (in terms of parameters, serialization, etc).

Thanks,

Scott



On 3/8/2012 7:41 AM, Атанас Тодоров wrote:
Hi,
Can you help me send a PUT request using ECF framework.I have a web resource exposed via REST and i want to update it with some data.

NOTE: GET,POST,DELETE requests work for me.

The code i use is:

AbstractRequestType requestType = new HttpPutRequestType();
Request request = new Request(requestType, new Object[] { configuration }); // configuration is String and is not empty or null.
RemoteServiceProxy proxy =  new RemoteServiceProxy<Object>(deserializer, host) // deserializer is custom impl of BaseRemoteResponseDeserializer
proxy.makeRestSyncCall(url.toString(), request);

where 

 public T makeRestSyncCall(String resource, Request request) throws ECFException {
        IContainer originalContainer = ContainerFactory.getDefault().createContainer(REST_CONTAINER_TYPE, url);
        RestID restID = null;
        try {
         restID = new RestID(originalContainer.getConnectNamespace(), new URI(url));
        } catch (Exception ex) {
         //TODO log exception when we have logger
         return null;
        }
        IContainer container = new SPMRestClientContainer(restID);
        IRemoteServiceClientContainerAdapter adapter = (IRemoteServiceClientContainerAdapter) container
            .getAdapter(IRemoteServiceClientContainerAdapter.class);
        adapter.setConnectContextForAuthentication(ConnectContextFactory.createUsernamePasswordConnectContext(
            UriContainer.REMOTE_USERNAME, UriContainer.REMOTE_PASSWORD));
        adapter.setResponseDeserializer(deserializer);
        IRemoteCallParameter[] rcp = null;
        if (request.getRequestType() instanceof HttpPostRequestType) {
            rcp = RemoteCallParameterFactory.createParameters("", "");//$NON-NLS-1$ //$NON-NLS-2$
        }
        IRemoteCallable callable = RestCallableFactory.createCallable(resource, resource, rcp, request.getRequestType(),
            IRestCall.DEFAULT_TIMEOUT);
        IRemoteServiceRegistration registration = adapter.registerCallables(new IRemoteCallable[] { callable }, null);
        IRemoteService restClientService = adapter.getRemoteService(registration.getReference());

        return (T) restClientService.callSync(RestCallFactory.createRestCall(resource, request.getBody()));
    }




I think the problem is in the way i construct the HttpPutRequestType as it is the only difference comparing to POST,GET,DELETE.
On the server side the object i am sending is an empty string and that's the problem.

Hope can help me,
Best Regards,
Atanas Todorov


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


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




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


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