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
