On Thu, Jul 19, 2012 at 2:04 PM, Dushan Abeyruwan <dus...@wso2.com> 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 <hira...@wso2.com>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 <dus...@wso2.com>wrote:
>>
>>>
>>>
>>> ---------- Forwarded message ----------
>>> From: Dushan Abeyruwan <dus...@wso2.com>
>>> Date: Thu, Jul 19, 2012 at 1:22 PM
>>> Subject: Hybrid Message Builder (Solution for
>>> To: DEV <dev@wso2.org>
>>> Cc: Miyuru Wanninayaka <miy...@wso2.com>, Udayanga Wickramasinghe <
>>> udaya...@wso2.com>, Afkham Azeez <az...@wso2.com>, Kasun Indrasiri <
>>> ka...@wso2.com>, Nuwan Dias <nuw...@wso2.com>
>>>
>>>
>>> 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: hira...@wso2.com;  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
> Dev@wso2.org
> 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
_______________________________________________
Dev mailing list
Dev@wso2.org
http://wso2.org/cgi-bin/mailman/listinfo/dev

Reply via email to