On Tue, Jan 10, 2012 at 11:28 PM, Shameera Rathnayaka <
shameerai...@gmail.com> wrote:

>
>
> On Sat, Jan 7, 2012 at 5:21 PM, Amila Suriarachchi <
> amilasuriarach...@gmail.com> wrote:
>
>>
>>
>> On Sat, Jan 7, 2012 at 2:34 AM, Andreas Veithen <
>> andreas.veit...@gmail.com> wrote:
>>
>>> On Thu, Jan 5, 2012 at 05:57, Shameera Rathnayaka
>>> <shameerai...@gmail.com> wrote:
>>> > Here what i understood simply is under the 1st approch Inside the
>>> message
>>> > builder class i need to get the input stream and store it inside the
>>> message
>>> > context as a property to access later, while putting a dummy SOAP
>>> envelope.
>>> > And dispatching will be occurred request uri based.i.e dummy message
>>> would
>>> > be some thing like
>>> >
>>> >
>>>  
>>> <soap:Envelope><soap:Body><ns:wrapper>Json</ns:wrapper></soap:Body></soap:Envelope>
>>> >
>>> > This input-stream is processed only inside the message receiver when
>>> gson
>>> > reads the input stream and create relavant java objects from that.
>>> >
>>> > Response is also handled same as request handle but bottom up way.
>>> >
>>> > In the 2nd approach Inside the message builder class i have to get the
>>> input
>>> > stream and build the Json String first and then store it as
>>>
>>> Not exactly. You would not read the input stream in the message
>>> builder, but construct a SOAPEnvelope that builds that representation
>>> lazily (using the OMSourcedElement/OMDataSource API). If something
>>> (e.g. a logging/auditing handler) between the message builder and the
>>> message receiver attempts to access the SOAPEnvelope, then the input
>>> stream will be read and the corresponding Axiom objects created on the
>>> fly. If the SOAPEnvelope reaches the message receiver untouched, then
>>> you would feed the input stream (more or less) directly to
>>> google-gson.
>>>
>>
>> Another option is to write an xmlstream reader/writer implementation to
>> parse the json stream. And provide that xml stream implementation to Axiom.
>>
>> This model works with other data bindings such as ADB as well.
>>
>
> If we use xmlstream reader/writer to parse the json stream. How it works
> with ADB ?
>

ADB I mean the ADB generated code. Which only uses the xmlstream API
instead of Axiom. Anyway Axiom is also written on top of xmlstream layer.
So if we can create a json type implementation for xmlstreams that will
work with any axis2 instance.


> as i know ADB needs xml representation of all elements to process i.e ADB
> create complex and simple types of relevant xml representation of the
> request, and process the request. But here we only have wrapped xml
> elements. Should i implement ADB to use with json?
>
>
>> thanks,
>> Amila.
>>
>>
>>>
>>> Once you start your GSOC project, we will point you to some samples
>>> (such as the plain text handling in Synapse) that show how this works.
>>>
>>> >  <soap:Envelope><soap:Body>json-string</soap:Body></soap:Envelope> ,
>>> > json-string would be something like "method":{"name":"value"}.
>>> >
>>> > After that inside the message receiver it is processed using google
>>> gson.
>>> > It can be dispatched using request uri based and qname based as sagara
>>> > mentioned previous post.
>>> >
>>> > I'am interesting in doing these two approaches as the GSoc project.
>>> >  According to the knowledge that i have in Axis2 this implementation
>>> > can be done. But not sure about the workload of each approach because
>>> >  most probably i will meet lot of problems with these approaches.
>>> >
>>> >
>>> > About the analyzing part - First as a student i would like touch
>>> > architecture
>>> > and designing side also, But can you clarify your idea a little bit as
>>> i
>>> > have seen
>>> > there are few blog posts explaining why axis2 cant support Mapped
>>> > convention?.
>>> >  Because it's not possible to know the namespace mappings used on one
>>> side
>>> > of the transport to the other side (client or service).
>>>
>>> The situation is actually somewhat similar to how WSDL 2.0 attempted
>>> to describe REST services: on one side you have a client that speaks
>>> REST (using various HTTP verbs, resource identifiers, etc.) and on the
>>> other side you have a Web service with an abstract interface that is
>>> described in terms of operations, messages and XML schema constructs.
>>> The Web service engine then also needs to know how to map REST
>>> requests/responses to operations, messages, etc. These mappings are
>>> described in a WSDL binding.
>>>
>>> In the case of mapped JSON, it's actually even simpler, because the
>>> engine "only" needs to map between JSON prefixes and XML namespaces.
>>> However, as in the REST/WSDL 2.0 case that mapping is specific to a
>>> given service. It would actually be trivial to implement something
>>> that lets the developer specify these mappings on a service (a service
>>> parameter would be enough for that), but the problem is that the
>>> message builder (which is responsible to generate the XML
>>> representation) doesn't know which service will be invoked and is
>>> therefore unable to locate that configuration.
>>>
>>> >
>>> > On Wed, Jan 4, 2012 at 7:57 PM, Andreas Veithen <
>>> andreas.veit...@gmail.com>
>>> > wrote:
>>> >>
>>> >>
>>> >> I think that it would also be interesting to add another task in the
>>> >> scope of that GSOC project, namely to analyze why Axis2 doesn't have a
>>> >> good support for mapped JSON. In fact, if you look at Shameera's
>>> >> initial post, he (she?)
>>> >
>>> > It's he :)
>>> >
>>> >
>>> > Thanks
>>> > Shameera
>>> >
>>> >>
>>> >> takes the fact that "Mapped formatted JSON
>>> >> with namespaces are not supported in Axis2" as a basic assumption. The
>>> >> interesting question is actually why this is so. I was thinking about
>>> >> this a couple of months ago, and I believe that this is actually due
>>> >> to a too restrictive assumption that is made in the Axis2 architecture
>>> >> (which is that it is possible to construct a SOAP infoset solely based
>>> >> on the properties of the incoming message, i.e. the content of the
>>> >> message and its content type), and that this is connected to some
>>> >> other problems as well as the presence of code in Axis2 that doesn't
>>> >> fit naturally into the architecture.
>>> >>
>>> >> Fixing that properly would probably be out of scope for a GSOC
>>> >> project, but doing an analysis would be highly interesting, in
>>> >> particular if Shameera is interested not only in development, but also
>>> >> in architecture and design.
>>> >>
>>> >> I think that if one includes these different things into the proposal,
>>> >> it would indeed make a very interesting GSOC project. Can we agree on
>>> >> that?
>>> >>
>>> >> Andreas
>>> >>
>>> >> On Wed, Jan 4, 2012 at 13:54, Sagara Gunathunga
>>> >> <sagara.gunathu...@gmail.com> wrote:
>>> >> > This proposal is to address real issue with Axis2, that is in Axis2
>>> JSON
>>> >> > messages are not perform well as XML messages. Since we have enough
>>> time
>>> >> > for
>>> >> > GSoC we can decide the best approach for this. With your
>>> explanation 2nd
>>> >> > approach sound good to me , also this approach enable to use QName
>>> based
>>> >> > dispatching on JSON messages too.
>>> >> >
>>> >> > One design consideration need to fulfill is full streaming support
>>> in
>>> >> > builders/formatters level so that gson can process underline stream
>>> >> > directly, otherwise this proposal is meaningless.
>>> >> >
>>> >> > My thought about project scope is first let student to define the
>>> goals
>>> >> > and
>>> >> > scope and give our comments later during community discussion
>>> period so
>>> >> > that
>>> >> > he can add/remove some additional goals that he has confidence on
>>> >> > implementing them.
>>> >> >
>>> >> > Thanks !
>>> >> >
>>> >> > On Wed, Jan 4, 2012 at 4:27 PM, Andreas Veithen
>>> >> > <andreas.veit...@gmail.com>
>>> >> > wrote:
>>> >> >>
>>> >> >> Axiom is an object model for XML and SOAP. Using it to store
>>> something
>>> >> >> that doesn't have an XML representation is sonsense. What you are
>>> >> >> probably referring to is the fact that an OMDataSource that backs
>>> an
>>> >> >> OMSourcedElement can store an arbitrary Java object. However, the
>>> >> >> OMDataSource must be able to produce an XML representation of that
>>> >> >> data. More precisely it must be able to create a representation in
>>> the
>>> >> >> form of an XMLStreamReader and it must be able to write the XML
>>> >> >> representation to an XMLStreamWriter.
>>> >> >>
>>> >> >> At the level of Axis2 that translates into the fact that when a
>>> >> >> message flows through the Axis2 engine, at any given point in time
>>> >> >> that message has a well defined SOAP infoset. In principle you
>>> could
>>> >> >> serialize the message to an XML document, deserialize it again and
>>> >> >> replace the SOAPEnvelope in the MessageContext with that
>>> deserialized
>>> >> >> message, without changing the outcome of the request.
>>> >> >>
>>> >> >> I don't know what you are doing in WSO2 products, but to my
>>> knowledge
>>> >> >> there is no exception to that rule in Axis2 or Synapse, even for
>>> plain
>>> >> >> text and binary messages. For both types of messages, Axis2/Synapse
>>> >> >> internally uses a well defined SOAP infoset:
>>> >> >>
>>> >> >> - For plain text messages, the SOAP infoset uses an element that
>>> wraps
>>> >> >> the entire text message as character data. E.g. for a message with
>>> >> >> content "my message", the SOAP infoset would be (namespaces
>>> removed):
>>> >> >>
>>> >> >> <soap:Envelope><soap:Body><ns:wrapper>my
>>> >> >> message</ns:wrapper></soap:Body></soap:Envelope>
>>> >> >>
>>> >> >> - For binary messages, the SOAP infoset uses an element that wraps
>>> the
>>> >> >> message encoded as base64Binary.
>>> >> >>
>>> >> >> That being said, Axis2 uses several Axiom features to avoid
>>> building a
>>> >> >> full DOM like in memory representation of the entire SOAP infoset:
>>> >> >>
>>> >> >> - For a request, the databindings consume the SOAP infoset without
>>> >> >> building the Axiom tree.
>>> >> >> - For a response, the databindings use an
>>> >> >> OMDataSource/OMSourcedElement that is able to write the XML
>>> >> >> representation directly to an XMLStreamWriter.
>>> >> >> - For plain text, we also use a special OMDataSource implementation
>>> >> >> that is able to produce the XML representation shown above, but
>>> that
>>> >> >> at the same time allows to stream the character data.
>>> >> >> - For binary messages, we simply use the Axiom features that are
>>> also
>>> >> >> used for XOP/MTOM, i.e. we construct a complete Axiom tree, but
>>> with
>>> >> >> an OMText instance that refers to a DataHandler with the binary
>>> data.
>>> >> >>
>>> >> >> However, these various optimizations don't change anything about
>>> the
>>> >> >> fact that in Axis2, a message always has a well defined SOAP
>>> infoset.
>>> >> >>
>>> >> >> Since google-gson defines a direct mapping between JSON and Java
>>> >> >> without defining an XML representation, you will have two options:
>>> >> >>
>>> >> >> 1. Use an OMDataSource that doesn't have an XML representation,
>>> i.e.
>>> >> >> that doesn't have meaningful implementations of the getReader and
>>> >> >> serialize methods, but that only acts as a holder for a Java object
>>> >> >> that can't be transformed to XML. That would clearly be a misuse of
>>> >> >> Axiom.
>>> >> >>
>>> >> >> 2. Define a trivial XML representation, which would be the JSON
>>> string
>>> >> >> wrapped in a wrapper element. Since this is the same thing as we do
>>> >> >> for plain text, we already have the corresponding message builders
>>> and
>>> >> >> formatters, and one would simply map these builders/formatters to
>>> the
>>> >> >> JSON content type. Implementing the proposal would then require
>>> only
>>> >> >> three things:
>>> >> >>
>>> >> >> - Implementing the message receiver.
>>> >> >> - Probably one would have to create a specialized OMDataSource that
>>> >> >> enables streaming of the response.
>>> >> >> - Potentially some minor enhancements to Axiom and/or the plain
>>> text
>>> >> >> message builders/formatters to make sure that streaming is fully
>>> >> >> supported.
>>> >> >>
>>> >> >> Since the message receiver is basically glue gode between
>>> google-gson,
>>> >> >> Axiom and the service object, it will be fairly trivial. The
>>> problem
>>> >> >> is then that the scope of this is likely not large enough for a
>>> GSOC
>>> >> >> project.
>>> >> >>
>>> >> >> Andreas
>>> >> >>
>>> >> >> On Sun, Jan 1, 2012 at 16:25, Sanjiva Weerawarana
>>> >> >> <sanj...@opensource.lk>
>>> >> >> wrote:
>>> >> >> > +1 - while Andreas this functionality can be implemented without
>>> >> >> > Axis2,
>>> >> >> > the
>>> >> >> > proposed feature would add a lot of value to use of Axis2 as a
>>> way to
>>> >> >> > have
>>> >> >> > services that have a good JSON binding in addition to other
>>> bindings.
>>> >> >> > Axiom's design allows passing of non-XML content without forcing
>>> XML
>>> >> >> > and
>>> >> >> > that model performs perfectly fine and well (Synapse and WSO2 ESB
>>> >> >> > both
>>> >> >> > leverage that heavily).
>>> >> >> >
>>> >> >> > Sanjiva.
>>> >> >> >
>>> >> >> >
>>> >> >> > On Fri, Dec 30, 2011 at 10:25 AM, Amila Suriarachchi
>>> >> >> > <amilasuriarach...@gmail.com> wrote:
>>> >> >> >>
>>> >> >> >>
>>> >> >> >>
>>> >> >> >> On Fri, Dec 30, 2011 at 12:35 AM, Andreas Veithen
>>> >> >> >> <andreas.veit...@gmail.com> wrote:
>>> >> >> >>>
>>> >> >> >>> On Thu, Dec 29, 2011 at 15:55, Amila Suriarachchi
>>> >> >> >>> <amilasuriarach...@gmail.com> wrote:
>>> >> >> >>> >
>>> >> >> >>> >
>>> >> >> >>> > On Tue, Dec 27, 2011 at 7:58 PM, Andreas Veithen
>>> >> >> >>> > <andreas.veit...@gmail.com>
>>> >> >> >>> > wrote:
>>> >> >> >>> >>
>>> >> >> >>> >> On Sun, Dec 25, 2011 at 15:09, Shameera Rathnayaka
>>> >> >> >>> >> <shameerai...@gmail.com> wrote:
>>> >> >> >>> >> > 2. store json string without doing any process untill it
>>> >> >> >>> >> > reaches
>>> >> >> >>> >> > JsonMessageReceiver. JsonMessageReceiver is a new Message
>>> >> >> >>> >> > Receiver
>>> >> >> >>> >> > which
>>> >> >> >>> >> > use
>>> >> >> >>> >> > gson to convert json to java objects, call relevant
>>> operation
>>> >> >> >>> >> > and
>>> >> >> >>> >> > get
>>> >> >> >>> >> > result.
>>> >> >> >>> >>
>>> >> >> >>> >> What this means in practice is that you will have a message
>>> >> >> >>> >> builder, a
>>> >> >> >>> >> message receiver and a message formatter that interact with
>>> each
>>> >> >> >>> >> other, but that have no meaningful interaction with any
>>> other
>>> >> >> >>> >> component of the Axis2 framework (the fundamental reason
>>> being
>>> >> >> >>> >> that
>>> >> >> >>> >> google-gson defines a mapping between JSON and Java
>>> objects, but
>>> >> >> >>> >> eliminates XML from the picture). The question is then why
>>> would
>>> >> >> >>> >> a
>>> >> >> >>> >> user go through all the pain of setting up Axis2 for this?
>>> >> >> >>> >
>>> >> >> >>> >
>>> >> >> >>> > if you look into a point where users only need to expose a
>>> POJO
>>> >> >> >>> > with
>>> >> >> >>> > json
>>> >> >> >>> > then they don't have to use Axis2.
>>> >> >> >>> >
>>> >> >> >>> > But if the user want to expose the same POJO service both
>>> soap
>>> >> >> >>> > and
>>> >> >> >>> > json
>>> >> >> >>> > formats this provides a value in terms of performance for
>>> latter
>>> >> >> >>> > case.
>>> >> >> >>> > In
>>> >> >> >>> > this case JSON message receiver can be written extending RPC
>>> >> >> >>> > message
>>> >> >> >>> > receiver and call the normal RPC processing if the received
>>> >> >> >>> > message
>>> >> >> >>> > is
>>> >> >> >>> > not a
>>> >> >> >>> > json one.
>>> >> >> >>> >
>>> >> >> >>> > thanks,
>>> >> >> >>> > Amila.
>>> >> >> >>>
>>> >> >> >>> As you know, Axis2 assumes that every message it processes is
>>> >> >> >>> representable as XML (which is different from CXF where a
>>> message
>>> >> >> >>> can
>>> >> >> >>> have different representations, depending on the phase that is
>>> >> >> >>> executed). Until now this has always been the case, even for
>>> plain
>>> >> >> >>> text and unstructured binary data. Are you going to drop that
>>> >> >> >>> requirement from the Axis2 architecture
>>> >> >> >>
>>> >> >> >>
>>> >> >> >> Drop that requirement ( I would say initially Axis2 is designed
>>> like
>>> >> >> >> that
>>> >> >> >> but latter specially in all contract first approaches it has not
>>> >> >> >> followed
>>> >> >> >> this for performance reasons)  and make an efficient way to work
>>> >> >> >> with
>>> >> >> >> JSON.
>>> >> >> >> Then obviously this won't support WS-Security etc .. which are
>>> >> >> >> anyway
>>> >> >> >> meaningless for json.
>>> >> >> >>
>>> >> >> >> If you look at how ADB works for non security (or non message
>>> >> >> >> building
>>> >> >> >> case) is similar to this. It stores the xml stream in the Axiom
>>> >> >> >> object
>>> >> >> >> (this
>>> >> >> >> feature has come from axiom differed building) and get that
>>> >> >> >> underline
>>> >> >> >> stream
>>> >> >> >> at the message receiver and directly build the java objects from
>>> >> >> >> that.
>>> >> >> >> Then
>>> >> >> >> at the response also it save the response in OMDatasource and
>>> >> >> >> directly
>>> >> >> >> serialize to the xml stream at the formatter.
>>> >> >> >>
>>> >> >> >> So idea for this is to provide such a direct stream parsing
>>> >> >> >> serializing
>>> >> >> >> technique which performs well for POJO objects to communicate
>>> using
>>> >> >> >> json.
>>> >> >> >>
>>> >> >> >> thanks,
>>> >> >> >> Amila.
>>> >> >> >>
>>> >> >> >>>
>>> >> >> >>> or else, what would be the XML
>>> >> >> >>> representation of a JSON message received by that message
>>> receiver?
>>> >> >> >>>
>>> >> >> >>> >
>>> >> >> >>> >>
>>> >> >> >>> >>
>>> >> >> >>> >> Andreas
>>> >> >> >>> >>
>>> >> >> >>> >>
>>> >> >> >>> >>
>>> >> >> >>> >>
>>> ---------------------------------------------------------------------
>>> >> >> >>> >> To unsubscribe, e-mail:
>>> java-dev-unsubscr...@axis.apache.org
>>> >> >> >>> >> For additional commands, e-mail:
>>> java-dev-h...@axis.apache.org
>>> >> >> >>> >>
>>> >> >> >>> >
>>> >> >> >>> >
>>> >> >> >>> >
>>> >> >> >>> > --
>>> >> >> >>> > Amila Suriarachchi
>>> >> >> >>> > WSO2 Inc.
>>> >> >> >>> > blog: http://amilachinthaka.blogspot.com/
>>> >> >> >>>
>>> >> >> >>>
>>> >> >> >>>
>>> ---------------------------------------------------------------------
>>> >> >> >>> To unsubscribe, e-mail: java-dev-unsubscr...@axis.apache.org
>>> >> >> >>> For additional commands, e-mail: java-dev-h...@axis.apache.org
>>> >> >> >>>
>>> >> >> >>
>>> >> >> >>
>>> >> >> >>
>>> >> >> >> --
>>> >> >> >> Amila Suriarachchi
>>> >> >> >> WSO2 Inc.
>>> >> >> >> blog: http://amilachinthaka.blogspot.com/
>>> >> >> >
>>> >> >> >
>>> >> >> >
>>> >> >> >
>>> >> >> > --
>>> >> >> > Sanjiva Weerawarana, Ph.D.
>>> >> >> > Founder, Director & Chief Scientist; Lanka Software Foundation;
>>> >> >> > http://www.opensource.lk/
>>> >> >> > Founder, Chairman & CEO; WSO2; http://wso2.com/
>>> >> >> > Founder & Director; Thinkcube Systems; http://www.thinkcube.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/
>>> >> >> >
>>> >> >>
>>> >> >>
>>> ---------------------------------------------------------------------
>>> >> >> To unsubscribe, e-mail: java-dev-unsubscr...@axis.apache.org
>>> >> >> For additional commands, e-mail: java-dev-h...@axis.apache.org
>>> >> >>
>>> >> >
>>> >> >
>>> >> >
>>> >> > --
>>> >> > Sagara Gunathunga
>>> >> >
>>> >> > Blog      - http://ssagara.blogspot.com
>>> >> > Web      - http://people.apache.org/~sagara/
>>> >> > LinkedIn - http://www.linkedin.com/in/ssagara
>>> >>
>>> >> ---------------------------------------------------------------------
>>> >> To unsubscribe, e-mail: java-dev-unsubscr...@axis.apache.org
>>> >> For additional commands, e-mail: java-dev-h...@axis.apache.org
>>> >>
>>> >
>>> >
>>> >
>>> > --
>>> > Shameera Rathnayaka
>>> > Undergraduate
>>> > Department of Computer Science and Engineering
>>> > University of Moratuwa.
>>> > Sri Lanka.
>>> >
>>> > Blog : http://shameerarathnayaka.blogspot.com/
>>> >
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: java-dev-unsubscr...@axis.apache.org
>>> For additional commands, e-mail: java-dev-h...@axis.apache.org
>>>
>>>
>>
>>
>> --
>> 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/
>
>


-- 
Amila Suriarachchi
WSO2 Inc.
blog: http://amilachinthaka.blogspot.com/

Reply via email to