I came across the same problem sometime back. I was trying to connect to a legacy server which accepts POX messages with "text/xml" content type. Clearly it was some imperfection of the backend server, but I did not have control over that since it was a legacy server.
However, I was able to resolve the problem by commenting out the code block Abid has posted. Meaning, I went on the same path and got it working. But I'm not sure whether this breaks something that I have not tested. Thanks, Sadeep On Tue, Jan 31, 2012 at 12:23 PM, Hiranya Jayathilaka <[email protected]>wrote: > "text/xml" is the standard content type for SOAP 1.1. So if you try to send > a POX message with text/xml content type the formatter will change that > back to application/xml. I don't think changing this behavior will break > something though (fingers crossed on that :)). > > Thanks, > Hiranya > > On Tue, Jan 31, 2012 at 12:08 AM, Abid Khan <[email protected]> > wrote: > > > Hello all, > > > > Please look at the following code and tell me why this code is explicitly > > changing contentType from "text/xml" to "application/xml"? > > > > This issue is because this kind of code in ApplicationXMLFormatter, > > > > if (contentType == null) { > > contentType = HTTPConstants.MEDIA_TYPE_APPLICATION_XML; > > } else if (isSOAPContentType(contentType)) { > > contentType = HTTPConstants.MEDIA_TYPE_APPLICATION_XML; > > if (log.isDebugEnabled()) { > > log.debug("contentType is set incorrectly for Application > > XML."); > > log.debug("It is changed to " + contentType); > > } > > } > > > > Along with function in > > > > > > private boolean isSOAPContentType(String contentType) { > > if (JavaUtils.indexOfIgnoreCase(contentType, > > SOAP12Constants.SOAP_12_CONTENT_TYPE) > -1) { > > return true; > > } > > // search for "type=text/xml" > > else if (JavaUtils.indexOfIgnoreCase(contentType, > > > > SOAP11Constants.SOAP_11_CONTENT_TYPE) > -1) { > > return true; > > } > > return false; > > } > > > > This code is explicitly changing the content type to "application/xml" if > > it is "text/xml" > > > > I would like to know if changing this code would have any negative > impacts. > > > > Regards, > > Abid > > > > -----Original Message----- > > From: Abid Khan > > Sent: Friday, January 27, 2012 9:34 AM > > To: '[email protected]' > > Subject: RE: Help needed for endpoint level content type. > > > > Hello all, > > > > I have tried all options, I do need to change the content-type to > > "text/xml". And I do neet a quick resolution to this. > > > > Can anyone please point me to right direction. > > > > Thanks in advance, > > Abid > > > > > > > > > > > > -----Original Message----- > > From: Abid Khan > > Sent: Tuesday, January 24, 2012 4:02 PM > > To: [email protected] > > Subject: RE: Help needed for endpoint level content type. > > > > Hello Sadeep, > > > > I tried this, and several others. It look either synapse or axis2 is > > completely ignoring those properties. No matter what I set I always get > > "application/xml". > > > > So there may be a bug somewhere or this is by design. The content type > are > > always posted as "application/xml" > > > > > > -----Original Message----- > > From: Sadeep Jayasumana [mailto:[email protected]] > > Sent: Tuesday, January 24, 2012 11:23 AM > > To: [email protected] > > Subject: Re: Help needed for endpoint level content type. > > > > Hi, > > > > You can set these properties conditionally within your CBR logic. Please > > check whether it works for you. > > > > Eg: > > <proxy name="CBRProxy"> > > <target> > > <inSequence> > > <switch source="//m0:getQuote/m0:request/m0:symbol" xmlns:m0=" > > http://services.samples"> > > <case regex="IBM"> > > <!-- Send with text/xml content type to endpoint 1 --> > > <property name="messageType" value="text/xml" > > scope="axis2"/> > > <property name="ContentType" value="text/xml" > > scope="axis2"/> > > <send> > > <endpoint> > > <address uri="http://localhost:9000/endpoint1" > /> > > </endpoint> > > </send> > > </case> > > <case regex="MSFT"> > > <!-- Send with application/xml content type to endpoint > 2 > > --> > > <property name="messageType" value="application/xml" > > scope="axis2"/> > > <property name="ContentType" value="application/xml" > > scope="axis2"/> > > <send> > > <endpoint> > > <address uri="http://localhost:9000/endpoint2" > /> > > </endpoint> > > </send> > > </case> > > </switch> > > </inSequence> > > </target> > > </proxy> > > > > Thanks, > > Sadeep > > > > On Tue, Jan 24, 2012 at 9:14 PM, Abid Khan <[email protected]> > wrote: > > > > > Hello Sadeep, > > > > > > Thanks for the quicker response. > > > > > > I actually knew this approach, but my problem is multiple application > > send > > > request to same proxy. That same proxy is delivering message (using > > content > > > based routing) to different endpoints. > > > > > > One of those endpoint expects "Content-Type=text/xml", where as rest of > > > them expect "Content-Type=application/xml". > > > > > > Having said that I need something in the endpoint not in the proxy. > > > > > > Thanks, > > > Abid > > > > > > > > > > > > -----Original Message----- > > > From: Sadeep Jayasumana [mailto:[email protected]] > > > Sent: Tuesday, January 24, 2012 12:52 AM > > > To: [email protected] > > > Subject: Re: Help needed for endpoint level content type. > > > > > > Hi, > > > > > > You can force the content type while sending a message out using > > > "messageType" and "ContentType" Axis2 level properties. Please check > > > whether this works for your scenario. This might not work if the > message > > > content is not compatible with the formatter associated to the content > > type > > > you are forcibly setting. > > > > > > .. > > > .. > > > <property name="messageType" value="text/xml" scope="axis2"/> > > > <property name="ContentType" value="text/xml" scope="axis2"/> > > > <send> > > > <endpoint> > > > <address uri="http://localhost:9000/endpoint1" /> > > > </endpoint> > > > </send> > > > > > > AND > > > > > > .. > > > .. > > > <property name="messageType" value="application/xml" > scope="axis2"/> > > > <property name="ContentType" value="application/xml" > scope="axis2"/> > > > <send> > > > <endpoint> > > > <address uri="http://localhost:9000/endpoint2" /> > > > </endpoint> > > > </send> > > > > > > Thanks, > > > Sadeep > > > > > > On Tue, Jan 24, 2012 at 9:47 AM, Hiranya Jayathilaka > > > <[email protected]>wrote: > > > > > > > I believe these endpoints are being invoked through some proxy > service. > > > If > > > > so what is the content type of the requests sent to the proxy > service? > > > > > > > > Thanks, > > > > Hiranya > > > > > > > > On Tue, Jan 24, 2012 at 7:03 AM, Abid Khan <[email protected]> > > > wrote: > > > > > > > > > Hello all, > > > > > > > > > > Please help me in following scenario. (I am using synapse 1.2) > > > > > > > > > > I have two different endpoint, the application on one endpoint > > accepts > > > > > "Content-Type=application/xml", and second application on the other > > > > > endpoint accepts "Content-Type=text/xml". > > > > > > > > > > Those application are external application and are running for > > several > > > > > years, is there any way I can configure Synapse to send content > type > > > > > properly to their respective endpoint. > > > > > > > > > > A prompt response will be much appreciated. > > > > > > > > > > Regards, > > > > > Abid > > > > > > > > > > > > > > > > > > > > > -- > > > > Hiranya Jayathilaka > > > > Associate Technical Lead; > > > > WSO2 Inc.; http://wso2.org > > > > E-mail: [email protected]; Mobile: +94 77 633 3491 > > > > Blog: http://techfeast-hiranya.blogspot.com > > > > > > > > > > > > > > > > -- > > > > > > Sadeep Jayasumana**** > > > > > > Email: [email protected]**** > > > > > > Phone: +94-77-2266507 > > > > > > > > > > > -- > > > > Sadeep Jayasumana**** > > > > Email: [email protected]**** > > > > Phone: +94-77-2266507 > > > > > > -- > Hiranya Jayathilaka > Associate Technical Lead; > WSO2 Inc.; http://wso2.org > E-mail: [email protected]; Mobile: +94 77 633 3491 > Blog: http://techfeast-hiranya.blogspot.com > -- Sadeep Jayasumana**** Email: [email protected]**** Phone: +94-77-2266507
