Vikas, Since we are rewinding? Do you have a schema defined for the SynapseObject? If yes, you can using XSD2Java to generate the java code that can read/write the xml for convenience purposes. Alternatively you can create/store/read (or run XPATH) on the xml directly using AXIOM. Do you see a problem with the above 2 assertions?
thanks, dims On 3/20/06, Vikas <[EMAIL PROTECTED]> wrote: > > Hi.. > Maybe i am pushing back the discussion to the first stage.. > But throughout this discussion, though people have been commenting on > standard stuff like Axiom/ADB/XMLBeans,etc; I have not seen a single > implementation that covers the full capabilities that SynapseObject > offers... > Maybe I am being naive, but isn't ease of usage that matters for Mediator > writers?? > > Tried the utility/wrapper class on OMElement, but thought that its not going > to work out without the XML structure.. > Find the code attached ... > > ~Vikas > > > > > ----- Original Message ----- > From: Hariharasudhan.D > To: [email protected] > > Sent: Monday, March 20, 2006 8:56 PM > Subject: Re: SynapseObject - Reminder... > > Hi, > > I was out of this for a while but just wanted to know what is the > co-relation between ADB and xpath in this context. ADB is more of a light > weight schema compiler and xpath works on xml. How are we marrying these > two aren't they parallel? > > The other obvious question is if we already have xmlBeans for data binding > then what's the need for ADB? > > Would highly appreciate if someone can enlighten me on this. FYI, I could > not make sense of what Saminda tried to explain. From the use case described > below I think SynapseObject would be very useful for handling mediators. > > Hari > > Davanum Srinivas wrote: > i *really* don't see a need for it. Let's make do with standard stuff > like saminda mentioned. > > thanks, > dims > > On 3/20/06, Vikas <[EMAIL PROTECTED]> wrote: > > > Hi... > > I am using SynapseObject to handle mediator data, it works as an extension. > Is there a problem in adding extensions?? > Extensions are not compulsary or imposed on others, just for convenience... > > But to make things clear and sum up the points: > > The problem is not with using DOM / OM.. > Its the XML structure that gives the meaning, the JAVA/in-memory > representation is just an enabler for that.. > > I did try writing the 'utility' methods for OM... > But based on a generic XML structure, it just doesn't work out... > The XML representation along with the Utility classes gives SynapseObject > the actual strength and the users the ease.. > > SynapseObject is not just about ObjectModel [AXIOM/DOM] or about XML [the > structure] > or the data-binding [XMLBeans/ ADB]... > > Its a variation in-between, a blend to be more precise... > > The very problem with XPath is that they are based on the XML structure, > change the structure =>change the X-Path... > > But SynapseObject has only 2 structural constraints.. > Every object has > * Attributes as child objects > * Has other SynapseObjects > In case I move an attribute from a parent to its child SynapseObject, the > search utility takes care of it, In case of an X-Path that mplies another > level of ../.. [hope you are not planning to use x-paths which always search > throughout i.e [//someName] > > ~Vikas.. > > ----- Original Message ----- > From: Saminda Abeyruwan > > To: [email protected] > > Sent: Monday, March 20, 2006 2:51 PM > Subject: Re: SynapseObject - Reminder... > > Hi Devs, > > My comments are in line, > > On 3/19/06, Soumadeep <[EMAIL PROTECTED]> wrote: > > > > Hi, > > One thing I completely agree with Sanjiva is that this has been dragged > > unnecessarily for this long. Let me emphasize here one thing, that the > intension is not to replace the concepts of data binding as used by XMLBeans > which is again an Apache project or trying to re-invent what has been > written. To this effect enough reasons have been provided as to why this > approach was taken. For convenience let me give one of the use cases and > reasons for which SynapseObject was proposed: > > > Following reasons is addressed by Axis2 's codegen concepts. > > > > > Reasons: > 1) Java Properties class lets you handle name-value pairs in a very good > > way but when it comes to representing complex objects it becomes very > difficult. > > > 2) Using the concept of data binding introduces a very rigid and tight > > coupling of data and schema. So if the schema changes the underlying data > handling mechanism needs to be changed (which includes the beans/classes to > hold the complex data structure) > > > This is why there are two entities exists in Axis2. If the xml is schema > compliant i will use XSD2Java, if not i will write my beans and use > BeanUtil. > > > > > 3) Intelligent search features are either driven by xpath/xqueries for > > pure XML or embedded logic if beans are used, SynapseObject has inbuilt > search features by which you can perform complex searches > > > 4) The reason people use Java Properties class is because name-value pairs > > can be shared by other class without any dependency. SynapseObject is more > like a Properties Class with added features to handle Complex Objects and > also allow search features. > > > Synapse is a user of Axis2, so let it be a user of Axis2's XSD2Java, > BeanUtil and Jaxen compliant Xpath. > > > > > Uses Cases: > A) Data-Sharing between mediators: Consumers need to be identified, once > > it's identified the information could be shared by the SLA mediator which > depending on a consumer will set the priority. Below is the pseudo code of > how this can be achieved using SynapseObject and how datasharing would > become easy. > > > Background Info: > ----------------------- > ConsumerIdentification mediator needs to identify a client by the > > following ways: > > > 1) IP {eg. 192.168.5.*} > 2) IP Range {eg. 192.168.5.20- 192.168.5.30} > 3) WS-SEC auth token > 4) HTTP auth token > 5) certificate > (Other factors that need to be considered whether the incoming message was > > first encrypted and then signed or was it signed and then encrypted). > > > Let's consider 1) IP > > Using SynapseObject: > ConsumerIdentification > -------------------------------- > > xml frag: > <?xml version='1.0' encoding='windows-1252'?> > <SynapseObject name="ci"> > > <SynapseObject name="consumer0"> > <Attribute name="CONSUMER_TYPE" type="String">GOLD</Attribute> > > <Attribute name="IP_ADDRESS_FROM" type="String">192.168.6.0</Attribute> > > <Attribute name="IP_ADDRESS_TO" type="String">192.168.6.255</Attribute> > <Attribute name="HTTP_AUTH_USERNAME" type="String">john</Attribute> > <Attribute name="WS_SEC_USERNAME" type="String">john</Attribute> > <SynapseObject name="assignedService"> > <Attribute name="serviceid1" > > type="String">stockQuote1</Attribute> > > > </SynapseObject> > </SynapseObject> > <SynapseObject name="consumer1"> > <Attribute name="CONSUMER_TYPE" > > type="String">SILVER</Attribute> > > > <Attribute name="IP_ADDRESS_FROM" > > type="String">192.168.6.255</Attribute> > > > <Attribute name="IP_ADDRESS_TO" type="String">192.167.6.255</Attribute> > <Attribute name="HTTP_AUTH_USERNAME" type="String">mary</Attribute> > <Attribute name="WS_SEC_USERNAME" type="String">mary</Attribute> > <SynapseObject name="assignedService"> > <Attribute name="serviceid1" > > type="String">stockQuote</Attribute> > > > <Attribute name="ip" type="String">192</Attribute> > </SynapseObject> > </SynapseObject> > </SynapseObject> > > Back to square one, > > Above can be written as, > <ci> > <consumer name="consumer0"> > <type>GOLD</type> > <ip_address_from>192.168.6.0 </ip_address_from> > <ip_address_to>192.167.6.255 </ip_address_to> > <http_auth_username>Mary</http_auth_username> > <ws_sec_username>Mary</ws_sec_username> > </consumer> > <service name="assingedservice"> > <!-- other stuff --> > </service> > <consumer name="consumer1"> > <!-- related suff --> > </consumer> > <!-- other services or consumers or related stuff --> > </ci> > > which is much more readable, > > If i want intelligent search i use xpath. A lot of users know how to use > xpath, so it's Zero training. If i write simple beans, i can populate the > bean objects using BeanUtil. Now in production the above xml should be > schema aware. That's the whole point of inventing schema. So i will use > XSD2Java. Now these technologies are not going to hook into Synapse core. > > > > > in the ci mediator code fragment > > // the the requester ip > ip = {get the remote ip from the messageContext/SynapseContext } > > //Identify if the consumer is there and get appropriate details and store > > the consumer related details in the messageContext, one more things to note > is that storing shared data is by the mediator name itself eg. ci > > > SynapseObject obj = > > consumerIdentification.findSynapseObjectByAttributeValueStartingWith(ip); > > > messageContext.setProperty(consumerIdentification.getName(),obj); > obj will contain all the required values if identified! > > SLA > ------ > > xml Fragment: > > <SynapseObject name="SLA"> > <SynapseObject name="consumer0"> > <SynapseObject name="Service0"> > <Attribute name="EPR" > > type="String">http://www.webservicex.net/stockquote.asmx</Atrribute> > > > <Attribute name="priority" type="Integer">0</Attribute> > </SynapseObject> > > > <SynapseObject name="Service1"> > <Attribute name="EPR" > > type="String">http://www.webservicex.net/findZIPCode.asmx</Atrribute> > > > <Attribute name="priority" type="Integer">1</Attribute> > </SynapseObject> > </SynapseObject> > </SynapseObject> > > IMHO above xml fragment would treat as the prior. > > > > > in the SLA Mediator code fragment > > //As there is a dependency between the SLA mediator and CI the SLA > > mediator will pick information for its dependency (Note: we also proposed a > concept > > > //of MediatorContext which will have dependency and other information for > > a particular mediator) > > > Excuse me btw :) > > > > > //Get the identified consumer from the messagecontext > SynapseObject consumerIdentification = > > (SynapseObject)messageContext.getProperty("ci"); > > > // get the consumer name and consumer type > String consumerName = consumerIdentification.getName(); > String consumerType = > > consumerIdentification.getString("CONSUMER_TYPE"); > > > //find the sla details for the identified consumer > SynapseObject consumer = > > sla.findSynapseObjectByAttributeValue(consumerName); > > > String fromAddress = > > (String)synapseMessageContext.getTo(); > > > SynapseObject service = > > consumer.findSynapseObjectByAttributeValue(fromAddress ); > > > // The priority value would be used by the SLA mediator to forward the > > request to the provider depending on the priority. > > > String priority = service.getString("priority"); > > Now as i can understand from the above code fragments, SynaspeObject has to > have a hook to Synapse core. As we agreed, SO should be an extension. > Besides, as technology exists for manipulating the required xml, (xpath, > XSD2Java, BeanUtil) for mediators without having a hook to Synapse core, why > on earth we make SO a core feature? > > Thank you > > Saminda > > > > > Regards > Soumadeep > > > -----Original Message----- > From: Saminda Abeyruwan [mailto:[EMAIL PROTECTED] > Sent: Saturday, March 18, 2006 6:59 PM > To: [email protected] > Subject: Re: SynapseObject - Reminder... > > > Hi Devs, > > These are my concern regarding SynapseObject, > > If the following XML is considered wrt SynapseObject semantics, > > <SynapseObject name="sla"> > <attribute name="service" > > type="STRING">http://myhost:myport/Service</attribute> > > > <SynapseObject name="consumer"> > <attribute name="ip" type="STRING">192.9.2.11</attribute> > </SynapseObject> > </SynapseObject> > > which is similar to, > > <sla> > <service> http://myhost:myport/Service </service> > <consumer> > <ip>192.9.2.11</ip> > </consumer> > </sla> > > Now if we have Java beans as follows, > > public class sla { > private String service; > private Consumer consumer; > > //getter and setters > } > > public class Consumer { > private String ip; > > //getter and setters > } > > and using the Axis2's > > org.apache.axis2.databinding.utils.BeanUtil.getPullParser(Object > beanObject, QName beanName); > > > i can get a XMLStreamReader and build the OMElement i need. And if i have > > prior XML, using > > > Object [] > > org.apache.axis2.databinding.utils.BeanUtil.deserialize(OMElement > response, Object [] javaTypes); i can fill the bean object. > > > So if I'm a Mediator author, using BeanUtil i can manipulate XML with Zero > > training. > > > Now if my XML is schema complaint, using XSD2Java i can generate Beans and > > using XX.parse() method i can fill the beans. > > > So what is done by SynapseObject is already done by Axis2's BeanUtil and > > XSD2Java and they can do much more. So IMHO we do not need to reinvent the > wheel with SynapseObject. > > > Those are my concerns. > > Thank you > > Saminda > > > > > On 3/17/06, Sanjiva Weerawarana <[EMAIL PROTECTED]> wrote: > > > On Mon, 2006-03-27 at 18:44 +0530, Vikas wrote: > > > Hi, > > This is regarding the Synapse object proposed by me and Soumadeep... > > For convenience I am putting below the links for reference: > > > <http://mail-archives.apache.org/mod_mbox/ws-synapse-dev/200602.mbox/% > > > > > [EMAIL PROTECTED] > > %3e> > > > > > and the source code has been available in the Scratch > < > > http://svn.apache.org/repos/asf/incubator/synapse/trunk/scratch/infravio/synapse-SO > > > > > I feel that it an effective utility and have made use of it in a all > the mediators that I would like to commit . It sure has made handling > mediator's config data easier.. > Would be checking in the cleaned up code for SynapseObject as an > extension...Which I guess is OK. > > Please let me know if anyone has any concerns about it?? > > I do .. I will write an explanatory reply tomrrow my time .. sorry for > keeping quiet; I've been reading much of this thread but just haven't > had the time to jump in. > > I *will* dive in tomorrow (later today my time really). I'm afraid its > going to have lots of -1s against SynapseObject features :( .. just to > give you a warning of where its going. > > Sanjiva. > > > > > > --------------------------------------------------------------------- > > > > To unsubscribe, e-mail: > > [EMAIL PROTECTED] > > > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > > > > -- > Davanum Srinivas : http://wso2.com/blogs/ > > --------------------------------------------------------------------- > To unsubscribe, e-mail: > [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > > > > > > -- > ________________________________ > Regards, > Hariharasudhan.D. > > > When I do good, I feel good; when I do bad, I feel bad.That�s my religion . > - Abraham Lincoln > > --------------------------------------------------------------------- > To unsubscribe, e-mail: > [EMAIL PROTECTED] For additional > commands, e-mail: [EMAIL PROTECTED] > > --------------------------------------------------------------------- > To unsubscribe, e-mail: > [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > > -- Davanum Srinivas : http://wso2.com/blogs/
