Hi devs, On Sun, Jul 8, 2012 at 8:18 AM, Amila Suriarachchi < [email protected]> wrote:
> hi, > > Great job looking into other similar approaches. > > What we can learn from these is that it is not possible to convert an json > stream to an xml stream or wise versa directly. So what we missing here is > the meta data of the xml stream. That means we need to have the xml schema > of the xml stream to do this conversion properly. > > On the other words we can not directly do > > XMLStream <-------------> JSON stream > > But it may be possible to do using the xml schema. > > XMLSchema > XMLStream <------------------------> JSON Stream > > If fact with this method we can support xml namespace as well as validate > the received message. > Can you please have look at with this approach? Initially you can assume a > simple schema structure. > Ok sure, I'll try this approach and update my progress. Thanks, Shameera. > > This is a reasonable assumption for Axis2 as well. Irrespective of the > service type we have schema for all axis2 services. > > thanks, > Amila. > > > > > > > On Fri, Jul 6, 2012 at 7:47 PM, Shameera Rathnayaka < > [email protected]> wrote: > >> Hi devs/Sagara, >> >> I have done some background research on how others (jettison, Apache >> Camal, Apache wink etc....) convert XML to JSON format. Here is a summary >> of that. >> >> *Apache camal* <http://camel.apache.org/> >> Apache camal uses json-lib to convert xml to json and >> vise-verse[0]<http://camel.apache.org/xmljson.html>. >> To use json-lib the xml should be in a special format which is supported by >> json-lib, Therefore it identifies whether the xml element should be written >> as json array or json object from class attribute of each xml start element >> in xml stream[1] >> <http://json-lib.sourceforge.net/usage.html#xml>[2]<http://json-lib.sourceforge.net/apidocs/jdk15/index.html>. >> >> >> eg: >> <a class="array"< >> <e type="number">1</e> >> <e type="number">2</e> >> <e type="number">3</e> >> </a> >> >> *Jettison * >> Jettison uses XMLEventWriter implementation to convert XML to >> JSON[3]<http://stackoverflow.com/a/8368752/942164>. >> Inside this XMLEventWriter it maintains stack which gets dynamically >> extended with next XMLEvent. Finally, when it receives EndDocument, it >> writes that stack to XMLStreamWriter. In this scenario, it can't recognise >> a JSON array which has only one value. >> >> *Apache wink * >> Apache wink also uses Jettison to convert xml to json. >> >> In stackoverflow they suggest implementing our own implementation for this >> [4] <http://stackoverflow.com/a/7218820/942164> >> >> [0]http://camel.apache.org/xmljson.html >> [1]http://json-lib.sourceforge.net/usage.html#xml >> [2]http://json-lib.sourceforge.net/apidocs/jdk15/index.html >> [3]http://stackoverflow.com/a/8368752/942164 >> [4]http://stackoverflow.com/a/7218820/942164 >> >> Thanks! >> Shameera >> >> >> On Fri, Jul 6, 2012 at 10:59 AM, Sagara Gunathunga < >> [email protected]> wrote: >> >>> On Fri, Jul 6, 2012 at 10:38 AM, Sagara Gunathunga >>> <[email protected]> wrote: >>> > @Shmeera, >>> > >>> > Can you look into how Apache Camel [1] [2] handle XML <=> JSON in your >>> > use cases I believe you can find some hints from there ? >>> > >>> > [1] - http://camel.apache.o*Apache >>> > camal*rg/xmljson.html<http://camel.apache.org/xmljson.html> >>> > [2] - http://json-lib.sourceforge.net/ >>> >>> Also you could use following convention [1] . >>> >>> >>> [1] - >>> http://www.xml.com/pub/a/2006/05/31/converting-between-xml-and-json.html >>> >>> Thanks ! >>> >>> > >>> > Thanks ! >>> > >>> > On Wed, Jul 4, 2012 at 3:37 PM, Amila Suriarachchi >>> > <[email protected]> wrote: >>> >> >>> >> >>> >> On Mon, Jul 2, 2012 at 3:44 PM, Sagara Gunathunga >>> >> <[email protected]> wrote: >>> >>> >>> >>> On Sun, Jul 1, 2012 at 8:50 PM, Amila Suriarachchi >>> >>> <[email protected]> wrote: >>> >>> > >>> >>> > >>> >>> > On Fri, Jun 29, 2012 at 12:23 PM, Shameera Rathnayaka >>> >>> > <[email protected]> wrote: >>> >>> >> >>> >>> >> Hi devs, >>> >>> >> >>> >>> >> I have a problem with, writing OMElement to the wire >>> >>> >> at the JsonFormatter, The problem is how do i identify >>> >>> >> whether it is a JSON object or JSON array. >>> >>> >> >>> >>> >> As an example let's say i have this OMElement, >>> >>> >> >>> >>> >> <student> >>> >>> >> <name>micky</name> >>> >>> >> <age>15</age> >>> >>> >> <subject>History</subject> >>> >>> >> <subject>Science</subject> >>> >>> >> </student> >>> >>> >> >>> >>> >> So the expected JSON Object is, >>> >>> >> {"student":{"name":'micky" , "age":15 , "subject":["History", >>> >>> >> "Science"]}} >>> >>> >> >>> >>> >> The thing is how should I know the student should be a JsonArray, >>> when >>> >>> >> i >>> >>> >> receive a <subject> Start element? >>> >>> >> >>> >>> >> Another thing is if i get below OMElement, How do i know subject >>> is a >>> >>> >> JsonArray? >>> >>> >> <student> >>> >>> >> <name>micky</name> >>> >>> >> <age>15</age> >>> >>> >> <subject>History</subject> >>> >>> >> </student> >>> >>> >> >>> >>> >> The relevant JSON object should be, >>> >>> >> >>> >>> >> {"student":{"name":'micky" , "age":15 , "subject":["History"]}} >>> >>> >> >>> >>> >> It would be nice to hear your ideas to overcome these problems. >>> >>> > >>> >>> > >>> >>> > It think we can not solve this issue unless the serialiser aware >>> of some >>> >>> > scheme. So this seems to be another limitation about converting >>> xml to >>> >>> > json >>> >>> > and wise versa. >>> >>> > >>> >>> > Shall we follow this convention to over come this problem. >>> >>> > >>> >>> > if we take your example, shall we stick to a method where it >>> always try >>> >>> > to >>> >>> > serialise fields as attributes unless we sure it is an array. >>> >>> > >>> >>> > For an example >>> >>> > >>> >>> > <student> >>> >>> > <name>micky</name> >>> >>> > <age>15</age> >>> >>> > <subject>History</subject> >>> >>> > </student> >>> >>> > >>> >>> > this will be >>> >>> > >>> >>> > {"student":{"name":'micky" , "age":15 , "subject":"History"}} >>> >>> > >>> >>> > and >>> >>> > >>> >>> > <student> >>> >>> > <name>micky</name> >>> >>> > <age>15</age> >>> >>> > <subject>History</subject> >>> >>> > <subject>Science</subject> >>> >>> > </student> >>> >>> > >>> >>> > {"student":{"name":'micky" , "age":15 , "subject":["History", >>> >>> > "Science"]}} >>> >>> > >>> >>> > I think even implementation wise this will not be straight >>> forward. The >>> >>> > only >>> >>> > thing we know for sure root element is not an array. >>> >>> > >>> >>> > Then after completing the first element, if the second element is >>> also >>> >>> > have >>> >>> > the same element name then we can assume it is an array and other >>> wise >>> >>> > it is >>> >>> > a normal attribute. >>> >>> >>> >>> Amila, >>> >>> >>> >>> Your suggestion introduce another problem, format of response JSON >>> >>> message depends on return data quantities. As an example for a same >>> >>> service it use two response formats when the response having size 1 >>> >>> array and having size > 1 arrays. I think this is a major issue for >>> >>> caller side. >>> >> >>> >> >>> >> yes. But as you can see this problem can not solve. so my suggestion >>> works >>> >> for single field elements. But for arrays it has the problem you >>> mentioned. >>> >> Receiving end should process the message accordingly. >>> >> >>> >>> >>> >>> >>> >>> What about to use hybrid approach where XMLStramReader based approach >>> >>> ( 2nd approach) use to handle incoming requests and use Gson stream >>> >>> directly to write response message from Java ( Java => Gson) without >>> >>> using XMLStramWriter (1st approach) ? >>> >> >>> >> >>> >> We already have java ==> Gson binding and it work fine. >>> >> >>> >> The idea of this is to implement an xml stream using json so that any >>> >> service (eg POJO, ADB services) written top of those API can use >>> that. But >>> >> as Shammera pointed out this xml json conversion has problems. >>> >> >>> >> thanks, >>> >> Amila. >>> >> >>> >>> >>> >>> >>> >>> Thanks ! >>> >>> >>> >>> > >>> >>> > thanks, >>> >>> > Amila. >>> >>> > >>> >>> > >>> >>> >> >>> >>> >> >>> >>> >> Thanks, >>> >>> >> Shameera. >>> >>> >> >>> >>> >> >>> >>> >> >>> >>> >> >>> >>> >> On Mon, Jun 25, 2012 at 11:10 AM, Shameera Rathnayaka >>> >>> >> <[email protected]> wrote: >>> >>> >>> >>> >>> >>> Hi devs, >>> >>> >>> >>> >>> >>>> Everything is fine, if i try to print OMElement using >>> >>> >>>> omElement.toString(); >>> >>> >>>> it prints OMElement without any error. But after returning from >>> >>> >>>> JsonBuilder, >>> >>> >>>> and inside the TransportUtils class it throws a class cast >>> exception >>> >>> >>>> when it try >>> >>> >>>> to add this returned OMelement to the SoapEnvelop by using >>> >>> >>>> envelope.getBody().addChild(documentElement); here is the code >>> >>> >>>> segment >>> >>> >>>> in >>> >>> >>>> TransportUtils class >>> >>> >>>> >>> >>> >>>> envelope = soapFactory.getDefaultEnvelope(); >>> >>> >>>> if (documentElement != null) { >>> >>> >>>> envelope.getBody().addChild(documentElement); // THIS LINE >>> >>> >>>> THROWS >>> >>> >>>> AN EXCEPTION >>> >>> >>>> } >>> >>> >>>> >>> >>> >>>> The exception is java.lang.ClassCastException: >>> >>> >>>> org.apache.axiom.om.impl.llom.OMDocumentImpl cannot be cast to >>> >>> >>>> org.apache.axiom.om.impl.OMNodeEx >>> >>> >>> >>> >>> >>> >>> >>> >>> I could able to solve this , there was an error in my >>> >>> >>> GsonXMLStreamReader >>> >>> >>> , I had to dig AXIOM to identify this. AXIOM process the parser >>> while >>> >>> >>> it >>> >>> >>> receive XMLStreamReader.END_ELEMENT but my implementation had an >>> error >>> >>> >>> returning the END_ELEMENT, I solved it now I an not getting above >>> >>> >>> ClassCastException. >>> >>> >>> >>> >>> >>> Thanks, >>> >>> >>> Shameera. >>> >>> >>> >>> >>> >>>> >>> >>> >>>> >>> >>> >>>> What should be the problem for this? , do i use wrong way to get >>> >>> >>>> the OMElement or something else?? devs any comments on this ?? >>> >>> >>>> >>> >>> >>>> Thanks, >>> >>> >>>> Shameera. >>> >>> >>>> >>> >>> >>>> >>> >>> >>>> On Sat, May 5, 2012 at 11:30 AM, Shameera Rathnayaka >>> >>> >>>> <[email protected]> wrote: >>> >>> >>>>> >>> >>> >>>>> Hi devs , >>> >>> >>>>> >>> >>> >>>>> According to my second approach, I need to map json elements in >>> >>> >>>>> request >>> >>> >>>>> to relevant XML tags/text and vice versa. When i am working on >>> this, >>> >>> >>>>> there >>> >>> >>>>> is a problem arises that which convention should i expect for >>> this. >>> >>> >>>>> So i >>> >>> >>>>> need to clarify whether the following convention is correct or >>> are >>> >>> >>>>> there any >>> >>> >>>>> suggestions for it. >>> >>> >>>>> >>> >>> >>>>> json message >>> >>> >>>>> >>> >>> >>>>> { "alise": { >>> >>> >>>>> "bob": { >>> >>> >>>>> "x": "valueX", >>> >>> >>>>> "y": "valueY", >>> >>> >>>>> "z": ["valueU","valueV","valueW"], >>> >>> >>>>> "l": { "name": "john", "age": 23 }, >>> >>> >>>>> "m": [ { "a": ["A","B","C" ] }, { "b": >>> ["D","E","F" ] >>> >>> >>>>> } >>> >>> >>>>> ] >>> >>> >>>>> } >>> >>> >>>>> } >>> >>> >>>>> } >>> >>> >>>>> >>> >>> >>>>> Relevant,expected xml message from this json request >>> (actually, it >>> >>> >>>>> is >>> >>> >>>>> not converted to xml) >>> >>> >>>>> >>> >>> >>>>> <json> >>> >>> >>>>> <alise> >>> >>> >>>>> <bob> >>> >>> >>>>> <x>valueX</x> >>> >>> >>>>> <y>valueY</y> >>> >>> >>>>> <z>valueU</z> >>> >>> >>>>> <z>valueV</z> >>> >>> >>>>> <z>valueW</z> >>> >>> >>>>> <l> >>> >>> >>>>> <name>john</name> >>> >>> >>>>> <age>23</age> >>> >>> >>>>> </l> >>> >>> >>>>> <m> >>> >>> >>>>> <a>A</a> >>> >>> >>>>> <a>B</a> >>> >>> >>>>> <a>C</a> >>> >>> >>>>> </m> >>> >>> >>>>> <m> >>> >>> >>>>> <b>D</b> >>> >>> >>>>> <b>E</b> >>> >>> >>>>> <b>F</b> >>> >>> >>>>> </m> >>> >>> >>>>> </bob> >>> >>> >>>>> </alise> >>> >>> >>>>> </json> >>> >>> >>>>> >>> >>> >>>>> >>> >>> >>>>> Thanks >>> >>> >>>>> Shameera. >>> >>> >>>>> >>> >>> >>>>> >>> >>> >>>>> On Tue, Apr 24, 2012 at 7:12 PM, Shameera Rathnayaka >>> >>> >>>>> <[email protected]> wrote: >>> >>> >>>>>> >>> >>> >>>>>> Hi devs, >>> >>> >>>>>> >>> >>> >>>>>> As this project is accepted for GSoC 2012, I would like >>> >>> >>>>>> to continue my work and looking forward to finish my project >>> >>> >>>>>> as a success in this summer. According to my mentor (Amila >>> >>> >>>>>> Suriarachchi) >>> >>> >>>>>> it is better to improve my knowledge further about Axis2 >>> >>> >>>>>> architecture >>> >>> >>>>>> in this community bounding period. Therefore I'll start to >>> read the >>> >>> >>>>>> Documentation and Apache Axis2 book. >>> >>> >>>>>> >>> >>> >>>>>> Andreas, as you mentioned in the previous mail thread[1] >>> could you >>> >>> >>>>>> please point out some of the code samples in synapse which do >>> >>> >>>>>> a similar work as i do in my 2nd approach of the project?. >>> >>> >>>>>> >>> >>> >>>>>> I will use this thread for future discussion about the >>> project. >>> >>> >>>>>> And I'll keep update my implementation patches to AXIS2-5270 >>> too. >>> >>> >>>>>> >>> >>> >>>>>> >>> >>> >>>>>> [1] >>> >>> >>>>>> >>> >>> >>>>>> >>> http://axis.markmail.org/thread/4lg7xefplv7o65z6#query:page:1+mid:u7zauh37nj4mje6n+state:results >>> >>> >>>>>> >>> >>> >>>>>> Thanks >>> >>> >>>>>> Shameera. >>> >>> >>>>>> >>> >>> >>>>>> -- >>> >>> >>>>>> Shameera Rathnayaka >>> >>> >>>>>> Undergraduate >>> >>> >>>>>> Department of Computer Science and Engineering >>> >>> >>>>>> University of Moratuwa. >>> >>> >>>>>> Sri Lanka. >>> >>> >>>>>> >>> >>> >>>>>> Blog : http://shameerarathnayaka.blogspot.com/ >>> >>> >>>>>> >>> >>> >>>>> >>> >>> >>>>> >>> >>> >>>>> >>> >>> >>>>> -- >>> >>> >>>>> Shameera Rathnayaka >>> >>> >>>>> Undergraduate >>> >>> >>>>> Department of Computer Science and Engineering >>> >>> >>>>> University of Moratuwa. >>> >>> >>>>> Sri Lanka. >>> >>> >>>>> >>> >>> >>>>> Blog : http://shameerarathnayaka.blogspot.com/ >>> >>> >>>>> >>> >>> >>>> >>> >>> >>>> >>> >>> >>>> >>> >>> >>>> -- >>> >>> >>>> Shameera Rathnayaka >>> >>> >>>> Undergraduate >>> >>> >>>> Department of Computer Science and Engineering >>> >>> >>>> University of Moratuwa. >>> >>> >>>> Sri Lanka. >>> >>> >>>> >>> >>> >>>> Blog : http://shameerarathnayaka.blogspot.com/ >>> >>> >>>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> -- >>> >>> >>> Shameera Rathnayaka >>> >>> >>> Undergraduate >>> >>> >>> Department of Computer Science and Engineering >>> >>> >>> University of Moratuwa. >>> >>> >>> Sri Lanka. >>> >>> >>> >>> >>> >>> Blog : http://shameerarathnayaka.blogspot.com/ >>> >>> >>> >>> >>> >> >>> >>> >> >>> >>> >> >>> >>> >> -- >>> >>> >> Shameera Rathnayaka >>> >>> >> Undergraduate >>> >>> >> Department of Computer Science and Engineering >>> >>> >> University of Moratuwa. >>> >>> >> Sri Lanka. >>> >>> >> >>> >>> >> Blog : http://shameerarathnayaka.blogspot.com/ >>> >>> >> >>> >>> > >>> >>> > >>> >>> > >>> >>> > -- >>> >>> > Amila Suriarachchi >>> >>> > WSO2 Inc. >>> >>> > blog: http://amilachinthaka.blogspot.com/ >>> >>> >>> >>> >>> >>> >>> >>> -- >>> >>> Sagara Gunathunga >>> >>> >>> >>> Blog - http://ssagara.blogspot.com >>> >>> Web - http://people.apache.org/~sagara/ >>> >>> LinkedIn - http://www.linkedin.com/in/ssagara >>> >>> >>> >>> --------------------------------------------------------------------- >>> >>> To unsubscribe, e-mail: [email protected] >>> >>> For additional commands, e-mail: [email protected] >>> >>> >>> >> >>> >> >>> >> >>> >> -- >>> >> Amila Suriarachchi >>> >> WSO2 Inc. >>> >> blog: http://amilachinthaka.blogspot.com/ >>> > >>> > >>> > >>> > -- >>> > Sagara Gunathunga >>> > >>> > Blog - http://ssagara.blogspot.com >>> > Web - http://people.apache.org/~sagara/ >>> > LinkedIn - http://www.linkedin.com/in/ssagara >>> >>> >>> >>> -- >>> Sagara Gunathunga >>> >>> Blog - http://ssagara.blogspot.com >>> Web - http://people.apache.org/~sagara/ >>> LinkedIn - http://www.linkedin.com/in/ssagara >>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: [email protected] >>> For additional commands, e-mail: [email protected] >>> >>> >> >> >> -- >> Shameera Rathnayaka >> Undergraduate >> Department of Computer Science and Engineering >> University of Moratuwa. >> Sri Lanka. >> >> Blog : http://shameerarathnayaka.blogspot.com/ >> >> > > > -- > Amila Suriarachchi > WSO2 Inc. > blog: http://amilachinthaka.blogspot.com/ > -- Shameera Rathnayaka Undergraduate Department of Computer Science and Engineering University of Moratuwa. Sri Lanka. Blog : http://shameerarathnayaka.blogspot.com/
