Hi Sagara,
   Yes, Originally I had this concern i.e the way to determine SOAP 1.1 and
POX, I think ur suggestion is best suit in this case but anyway  the
provided solution (Formatter/Builder concept) wont be a perfect one as u
mention, so will keep this as open and hope this will get sorted out in
AIXS2 context, mean time I will hold those issues reported to jira  util
that.

cheers
Dushan

On Thu, Jul 19, 2012 at 2:48 PM, Sagara Gunathunga <[email protected]> wrote:

>
>
> On Thu, Jul 19, 2012 at 2:04 PM, Dushan Abeyruwan <[email protected]> wrote:
>
>> Hi
>>       " For an example, in API Manager if you send a POX message with the
>> text/xml, the query parameters on the URL do not get passed to the backend
>> server, whereas they will get passed if we use application/xml instead"
>>          My thought is,
>>               POX message received with text/xml context to API, then
>> hybrid builder get invoke, though we are receiving TEXT/XML while building
>> the message
>>            OMElement element = applicationXMLBuilder.processDocument(new
>> ByteArrayInputStream(bytes), *HybridConstants.APPLICATION_XML*,
>> messageContext); ,
>>          we are* forcefully including the contentType as application/xml 
>> NOTE:
>> we are Keeping the flag in message context with the actual received content
>> type*, thus synapse engine will treat this as application/xml and thus
>> will wont be a issue with query parameter, then at the formatter   using
>> the flag just before send to BE setup the actual CONTENT TYPE to the
>> outgoing message thus this will write to the wire
>>
>> *sample code*
>>                      if (HybridConstants.TEXT_XML.equals(contentType)) {
>> SOAPBuilder builder = new SOAPBuilder();
>>  try {
>> return builder.processDocument(new ByteArrayInputStream(bytes),
>> contentType, messageContext);
>>  } catch (Exception e) {
>> // assumption if a failure happens this must be check
>>  // whether the message is
>> // is accepted as application XML
>> ApplicationXMLBuilder applicationXMLBuilder = new ApplicationXMLBuilder();
>>  OMElement element = applicationXMLBuilder.processDocument(new
>> ByteArrayInputStream(bytes), HybridConstants.APPLICATION_XML,
>> messageContext);
>>  *messageContext.setProperty(HybridConstants.HYBRID_BUILD, true);*
>> return element;
>>  }
>> }
>>
>
> Here you first try to build the message with SOAPBuilder and and if it
> fail try to build with ApplicationXMLBuilder, this should work but isn't
> this approach add extra cost for POX messages processing ? It can be a very
> small overhead but in context of a ESB we should not ignore such small
> overheads too.  Instead of above logic why don't you check SOAPAction
> header together with Content-Type header. According to SOAP 1.1 spec it's
> mandatory to have SOAPAction with valid SOAP 1.1 message if  SOAPAction is
> missing it's safe to assume message as POX.
>
> content-type == text/xml && SOAPAction present => SOAPBuilder
> OW => ApplicationXMLBuilder
>
> Thanks !
>
>
>>
>> cheers
>> Dushan
>>
>>
>>
>> On Thu, Jul 19, 2012 at 1:34 PM, Hiranya Jayathilaka <[email protected]>wrote:
>>
>>> This solution will take care of the message parsing issue. But the main
>>> problem is Synapse and Axis2 both associating text/xml with SOAP 1.1.
>>> There's a lot of code written based on this assumption. For instance the
>>> parsing issue can be worked around by using something like the message
>>> relay (we do this in API Manager). But still there are certain things that
>>> don't work properly when you send a POX payload with the text/xml content
>>> type. For an example, in API Manager if you send a POX message with the
>>> text/xml, the query parameters on the URL do not get passed to the backend
>>> server, whereas they will get passed if we use application/xml instead.
>>>
>>> This is a very tricky problem to solve. I tried to solve this for API
>>> Manager, but had to give it up considering the time constraint and the
>>> possible stability issues it might introduce. We need to discuss this with
>>> a larger audience before we decide on the final plan.
>>>
>>> Thanks,
>>> Hiranya
>>>
>>>
>>> On Thu, Jul 19, 2012 at 1:24 PM, Dushan Abeyruwan <[email protected]>wrote:
>>>
>>>>
>>>>
>>>> ---------- Forwarded message ----------
>>>> From: Dushan Abeyruwan <[email protected]>
>>>> Date: Thu, Jul 19, 2012 at 1:22 PM
>>>> Subject: Hybrid Message Builder (Solution for
>>>> To: DEV <[email protected]>
>>>> Cc: Miyuru Wanninayaka <[email protected]>, Udayanga Wickramasinghe <
>>>> [email protected]>, Afkham Azeez <[email protected]>, Kasun Indrasiri <
>>>> [email protected]>, Nuwan Dias <[email protected]>
>>>>
>>>>
>>>> Hi,
>>>>      Recently we had a few issues [1][2] when invoking REST services
>>>> via ESB REST API when client sends information with the content type
>>>> TEXT/XML (and if BACK END accepts TEXT/XML) so when message receives to ESB
>>>> if the content type is defined TEXT/XML by default it will try to build up
>>>> SOAP envelope, but AFAIK most REST calls are based
>>>> on TEXT/XML so theoretically this kind of messages should be able to handle
>>>> via ESB, so for this as solution I have written a Builder formatter,
>>>> basically I named this as HYBRID message builder /formatter, the idea is
>>>> when  client sends simple xml element with via REST (with content type
>>>> TEXT/XML) , the logic is first the hybrid builder checks if the message
>>>> content type defines as TEXT/XML followed by root element containing any
>>>> SOAP element. if not  Hybrid builder invokes the Application XML builder
>>>> internally and will build the message and setting up a flag to message
>>>> context thus during the HybridFormatter invocation we can determine that
>>>> the original client request content type and write it to the output pipe,
>>>>
>>>> (did few mock testings with few use cases and worked well)
>>>>
>>>> any suggestions on this
>>>>
>>>> [1] https://wso2.org/jira/browse/ESBJAVA-1160
>>>> [2]https://wso2.org/jira/browse/ESBJAVA-1160
>>>>
>>>> cheers,
>>>> Dushan Abeyruwan
>>>> *Senior Software Engineer*
>>>> *Integration Technologies Team*
>>>> *WSO2 Inc. http://wso2.com/*
>>>> *Mobile:(+94)714408632*
>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> Dushan Abeyruwan
>>>> *Senior Software Engineer*
>>>> *Integration Technologies Team*
>>>> *WSO2 Inc. http://wso2.com/*
>>>> *Mobile:(+94)714408632*
>>>>
>>>>
>>>
>>>
>>> --
>>> Hiranya Jayathilaka
>>> Senior Technical Lead;
>>> WSO2 Inc.;  http://wso2.org
>>> E-mail: [email protected];  Mobile: +94 77 633 3491
>>> Blog: http://techfeast-hiranya.blogspot.com
>>>
>>
>>
>>
>> --
>> Dushan Abeyruwan
>> *Senior Software Engineer*
>> *Integration Technologies Team*
>> *WSO2 Inc. http://wso2.com/*
>> *Mobile:(+94)714408632*
>>
>>
>> _______________________________________________
>> Dev mailing list
>> [email protected]
>> http://wso2.org/cgi-bin/mailman/listinfo/dev
>>
>>
>
>
> --
> Sagara Gunathunga
>
> Technical Lead; WSO2, Inc.;  http://wso2.com
> V.P Apache Web Services ;  http://ws.apache.org/
> Blog ;  http://ssagara.blogspot.com
>
>


-- 
Dushan Abeyruwan
*Senior Software Engineer*
*Integration Technologies Team*
*WSO2 Inc. http://wso2.com/*
*Mobile:(+94)714408632*
_______________________________________________
Dev mailing list
[email protected]
http://wso2.org/cgi-bin/mailman/listinfo/dev

Reply via email to