On 30/11/11 14:05, Diana ALLAM wrote:
Hi,

On 30 nov. 2011, at 11:59, Sergey Beryozkin wrote:

Hi
On 30/11/11 09:29, Diana ALLAM wrote:
Hello,
thank you for your reply.

Currently, I am doing a study about well dynamic typing of web service and I 
choose cxf
to run some examples.
In fact, for SOAP/WS* services, there is a standard used , wsdl files, which 
are generated by a web service.
A client can use this wsdl to generate an appropriated interface in java to 
build an appropriated request to
the designed web service. Thus, I can say, following this way, there must not 
be any typing errors.
But for Restful services, the situation differs a bit. There is a WADL files to 
describe the web services like the
WSDL files in SOAP/WS*, but WADL still not a standard.

it's a W3C submission and it appears users who work with RESTful services and 
happen to see the benefit of providing the documents such as WADL just use WADL;

Yes, but I mean that WADL is not yet used by all Restful services like the WSDL 
for WS*

My question is, if a restful web service doesn't define a WADL, thus the client 
can't generate in java the appropriated
classes (like using wadltojava), then how he can know the type of messages?
I suppose that in the absence of a WADL for a web service, there is a text 
description file describing all methods and
there messages types. Thus, the client has to read this document to know how to 
build his messages.
Here, he can make mistakes by sending to a restful resource an inappropriate 
data.

Is my reasoning correct about that?
That may not be that big an issue actually - unless we are talking about the 
completely generic clients, but indeed, with the fluent HTTP-centric API one 
just needs to apply a bit more care to making sure the correct messages are 
sent and such - but as I said if the code
were not corect it work it would fail at the first try, then the user would go 
and check the SLA or whatever and update the code.
In CXF we support both styles:
http://cxf.apache.org/docs/jax-rs-client-api.html
so choose the option you like or experiment with both ones

Proxies can also be generated from the existing WADLs:
http://cxf.apache.org/docs/jaxrs-services-description.html

even WSDLs can be used as the input (this option is a bit more involved)

Thank you a lot for these informations.
I can deduce that from the client developer side, calling a WS* web service is 
more standardized than a restful one,
because the user can get a WSDL and creates properly a proxy, while for Rest it 
 will not be the case if
no Wadl is provided.

In your opinion, isn't it an advantage for WS*? Doesn't it an annoying checking 
problem for restful's clients?

What we do in CXF is we keep our heads down and make sure people can write WS-* and RESTful services the way they need to, that is our philosophy, because in production the issues like styles may not necessarily take a precedence, there are many different factors which can tilt a decision into going with SOAP only, REST only, SOAP & REST; you will see me answering SOAP questions if I happen to remember something :-). I'd suggest to take this particular discussion offline if you don't mind.

Will WADL be defined for all Restful services in the coming days, such as WSDL 
for WS* services today?


Clearly, it's very important for many users that something like WADL has a final standard tag, I'm not sure right now if it will make it into a final spec but even if it will some users would still prefer a fluent HTTP-centric API and won't rely on WADL at all

Cheers, Sergey

Regards,

Diana


Sergey


Regards,

Diana

On 29 nov. 2011, at 18:01, Sergey Beryozkin wrote:

Hi

On 29/11/11 15:33, Diana ALLAM wrote:
Hello,

After using the restful examples in the "samples" directory of cxf 
distribution, I distinguished
two types of restful request for "put/post" CRUD methods.
1) the first one is by sending a request with an xml object description (samples 
->    jax_rs ->    basic)
Follows, there is a part of the code example for calling the put method by using an input 
file containing the "customer" xml code:
         // Sent HTTP PUT request to update customer info
         System.out.println("\n");
         System.out.println("Sent HTTP PUT request to update customer info");
         Client client = new Client();
         String inputFile = 
client.getClass().getResource("update_customer.xml").getFile();
         URIResolver resolver = new URIResolver(inputFile);
         File input = new File(resolver.getURI());
         PutMethod put = new 
PutMethod("http://localhost:8080/CustomerRestfullTest/jaxrs/customerservice/customers";);
         RequestEntity entity = new FileRequestEntity(input, "text/xml; 
charset=ISO-8859-1");
         put.setRequestEntity(entity);
         HttpClient httpclient = new HttpClient();

         try {
             int result = httpclient.executeMethod(put);
             System.out.println("Response status code: " + result);
             System.out.println("Response body: ");
             System.out.println(put.getResponseBodyAsString());
             
System.out.println(put.getResponseHeader(Message.ENDPOINT_ADDRESS));
         } finally {
             // Release current connection to the connection pool once you are
             // done
             put.releaseConnection();
         }


This is a very old code that will be replaced

2) the second one is by using an instance of a Java class, here is Customer, instead 
of getting data from an input file (samples ->    jax_rs ->    basic_https)

         WebClient wc = WebClient.create(BASE_SERVICE_URL, CLIENT_CONFIG_FILE);
         Customer customer = new Customer();
         customer.setId(123);
         customer.setName("Mary");
         Response resp = wc.put(customer);


I prefer to use the second method because in the first method,
a developer could make mistakes in his input file, then the server will reply 
by a fault message, while the second
method allows to avoid such errors as there is a customer object conform to a 
specified class Customer.

I think also the second method is more adapted if the client wishes using a 
wadl file, then by using wadltojava, all the appropriated classes
are generated (like the Customer class in my previous example).
Agreed
But my question is, when and why a developer need to use the first method?

If developers do prefer using Apache HttpClient for whatever reasons then they 
may want to use that API

Cheers, Sergey

And by such a use, the developer doesn't take the risk of sending inadapted 
data to the server?
and how the developer knows which data description form (for the customer 
example, it is an xsd) he must use in this case, if he doesn't have a wadl?
because I suppose that if he had a wadl then he must use the second method.

Thank you in advance.

Regards,

Diana





--
Sergey Beryozkin

Talend Community Coders
http://coders.talend.com/

Blog: http://sberyozkin.blogspot.com

Reply via email to