Eventually Axsi2 will be almost as good as Axis is.

:-) :-) :-) :-) :-) :-) :-) :-) :-) :-)

Tom Jordahl
Axis 1 implementer

-----Original Message-----
From: Davanum Srinivas [mailto:dava...@gmail.com] 
Sent: Friday, June 19, 2009 7:42 AM
To: axis-dev@ws.apache.org
Subject: Re: [Axis2] Make RPCUtil more flexible

Guess it's time to port the pluggable serializer/deserializer mechanism from 
Axis1 :)

-- dims

On 06/19/2009 06:33 AM, Andreas Veithen wrote:
> So, to summarize: You are happy with most of the JavaBeans<->  XML
> mapping rules, but you want to customize some of them (e.g.
> java.util.Date/java.util.Calendar<->  xsd:date/xsd:dateTime mapping or
> the way arrays are mapped), without modifying Axis2 code (or creating
> a fork of it). Is that correct?
>
> I think that is a valid use case that we should support, but we need
> to do that in a proper way without degrading the architecture.
>
> Andreas
>
> On Fri, Jun 19, 2009 at 10:29, Pétur Runólfsson<pe...@betware.com>  wrote:
>> Hi Sanjiva,
>>
>>> I guess your point is that RPCMessageReceiver does everything you want 
>>> except do the JavaBeans<->  XML mapping the way you want?
>> Exactly.
>>
>>> In that case, can you not subclass the message receiver and redirect some 
>>> code?
>> That's what I would like to do, but it's currently not possible because all 
>> the interesting methods are static and can't be overridden. That's why the 
>> original patch changed some of those methods to be instance methods instead.
>>
>> Regards,
>>
>> Pétur Runólfsson
>> Betware
>> ________________________________________
>> From: Sanjiva Weerawarana [sanj...@opensource.lk]
>> Sent: Friday, June 19, 2009 02:48
>> To: axis-dev
>> Subject: Re: [Axis2] Make RPCUtil more flexible
>>
>> Hi ... I'm a bit confused. Do you want to modify the behavior of ADB or the 
>> behavior of JavaBeans<->  XML mapping? The follow-up email proposal suggests 
>> the latter.
>>
>> If its the latter, the design approach in Axis2 was that you'd have your own 
>> message receiver that did whatever you want. I guess your point is that 
>> RPCMessageReceiver does everything you want except do the JavaBeans<->  XML 
>> mapping the way you want? In that case, can you not subclass the message 
>> receiver and redirect some code?
>>
>> Sanjiva.
>>
>> 2009/6/18 Pétur Runólfsson<pe...@betware.com<mailto:pe...@betware.com>>
>> Hi Andreas,
>>
>> I agree that just taking RPCUtil and making the methods non-static doesn't 
>> result in a great design. On the other hand it's a quick way to get some 
>> more flexibility without changing much code.
>>
>> Anyway, in order to get started on an API, here are the things called by 
>> RPCMessageReceiver I think are most important to be customizable:
>>
>> * Conversion from OMElement to Object (approximately 
>> BeanUtil.processObject(OMElement omElement, Class classType, MultirefHelper 
>> helper, boolean isArrayType, ObjectSupplier objectSupplier), or maybe 
>> BeanUtil.deserialize(OMElement response, Object [] javaTypes, ObjectSupplier 
>> objectSupplier, String[] parameterNames), depending on how arrays should be 
>> treated)
>> * Conversion from Object to OMElement (most of 
>> RPCUtil.processResponse(SOAPFactory fac, Object resObject, OMElement 
>> bodyContent, OMNamespace ns, SOAPEnvelope envelope, Method method, boolean 
>> qualified, TypeTable typeTable), also BeanUtil.getPullParser(Object 
>> beanObject, QName beanName, TypeTable typeTable, boolean qualified, boolean 
>> processingDocLitBare), the interface here might be more convenient to extend 
>> if the XMLStreamReader was dropped and objects converted directly to 
>> OMElement instead)
>>
>> This might result in an interface like:
>>
>> public interface BeanConverter {
>>   Object deserialize(OMElement omElement, Class targetType);
>>   OMElement serialize(Object object, QName name);
>> }
>>
>> OMElement could maybe be replaced with XMLStreamReader, but I think the 
>> interface is much nicer if the same type is used in both directions. Note 
>> that ObjectSupplier, MultirefHelper, SOAPEnvelope, TypeTable, SOAPFactory, 
>> qualified and processingDocLitBare don't need to be parameters on the 
>> (de)serialize methods in this interface, since implementations will be 
>> stateful. There should probably be setters for them in the interface.
>>
>> There are other things that could be interesting extension points (for 
>> example handling errors from the service method, or looking up the service 
>> method), but I think the above two would be a good start.
>>
>> Regards,
>>
>> Pétur Runólfsson
>> Betware
>> ________________________________________
>> From: Andreas Veithen 
>> [andreas.veit...@gmail.com<mailto:andreas.veit...@gmail.com>]
>> Sent: Thursday, June 18, 2009 14:14
>> To: axis-dev@ws.apache.org<mailto:axis-dev@ws.apache.org>
>> Subject: Re: [Axis2] Make RPCUtil more flexible
>>
>> Pétur,
>>
>> I didn't look in detail at your suggestion, but I have some doubts
>> from an architecture point of view. I don't think that taking an
>> existing utility class and promote that to an API or extension point
>> will improve the quality of the Axis2 architecture. If there are
>> aspects that need to be configurable or extensible, than we should
>> define a proper API for that.
>>
>> Andreas
>>
>> On Thu, Jun 18, 2009 at 13:19, Pétur 
>> Runólfsson<pe...@betware.com<mailto:pe...@betware.com>>  wrote:
>>> Hi,
>>>
>>> For various reasons, I have on several occasions wanted to modify the 
>>> behavior of ADB. Unfortunately, in many cases the only way to do this is to 
>>> change the ADB source code and recompile, because most of the relevant bits 
>>> of ADB is composed of static methods that can't be overridden.
>>>
>>> Here is a patch to convert some of the static methods to instance methods. 
>>> The patch removes the static qualifier from all methods in RPCUtil. A 
>>> protected RPCUtil member is added to the classes that use RPCUtil 
>>> (RPCMessageReceiver and JavaTransportSender). This makes it possible to 
>>> customize RPCUtil by extending those classes and setting the RPCUtil member 
>>> to a subclass of RPCUtil.
>>>
>>> Because this patch removes static qualifiers from public methods, the 
>>> change is neither source nor binary compatible. If this is a problem, it is 
>>> possible instead to move the code to a new class (maybe named RPCInvoker?), 
>>> and have RPCMessageReceiver and JavaTransportSender use that class. RPCUtil 
>>> would have a static instance of new new class and forward all calls to 
>>> that. If keeping compatibility is preferred, I can make a new patch that 
>>> does this.
>>>
>>> Regards,
>>>
>>> Pétur Runólfsson
>>> Betware
>> The content of this e-mail, together with any of its attachments, is for the 
>> exclusive and confidential use of the named addressee(s) and it may contain 
>> legally privileged and confidential information and/or copyrighted material. 
>> Any other distribution, use or reproduction without the sender's prior 
>> consent is unauthorized and strictly prohibited. If you have by coincidence, 
>> mistake or without specific authorization received this e-mail in error, 
>> please notify the sender by e-mail immediately, uphold strict 
>> confidentiality and neither read, copy, transfer, disseminate, disclose nor 
>> otherwise make use of its content in any way and delete the material from 
>> your computer.
>>
>> The content of the e-mail and its attachments is the liability of the 
>> individual sender, if it does not relate to the affairs of Betware.
>> Betware does not assume any civil or criminal liability should the e-mail or 
>> it´s attachments be virus infected.
>>
>>
>>
>> --
>> Sanjiva Weerawarana, Ph.D.
>> Founder, Director&  Chief Scientist; Lanka Software Foundation; 
>> http://www.opensource.lk/
>> Founder, Chairman&  CEO; WSO2, Inc.; http://www.wso2.com/
>> Member; Apache Software Foundation; http://www.apache.org/
>> Visiting Lecturer; University of Moratuwa; http://www.cse.mrt.ac.lk/
>>
>> Blog: http://sanjiva.weerawarana.org/
>>
>> The content of this e-mail, together with any of its attachments, is for the 
>> exclusive and confidential use of the named addressee(s) and it may contain 
>> legally privileged and confidential information and/or copyrighted material. 
>> Any other distribution, use or reproduction without the sender's prior 
>> consent is unauthorized and strictly prohibited. If you have by coincidence, 
>> mistake or without specific authorization received this e-mail in error, 
>> please notify the sender by e-mail immediately, uphold strict 
>> confidentiality and neither read, copy, transfer, disseminate, disclose nor 
>> otherwise make use of its content in any way and delete the material from 
>> your computer.
>>
>> The content of the e-mail and its attachments is the liability of the 
>> individual sender, if it does not relate to the affairs of Betware.
>> Betware does not assume any civil or criminal liability should the e-mail or 
>> it´s attachments be virus infected.
>>

Reply via email to