Thanks a lot for your help, your answers clarified many things for me

Best Regards,

Diana.

On 30 nov. 2011, at 15:26, Sergey Beryozkin wrote:

> 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