WSO2 ESB overwrites a ContentType property

Alex Yakimovich picture Alex Yakimovich · Jun 19, 2013 · Viewed 13.4k times · Source

I am working on the WSO2 ESB Proxy service, which involves exposing the internal RESTful service via SOAP endpoint on the ESB. My RESTful service requires Content-type = "application/rdf+xml". I tried setting it using all 3 properties mentioned in the documentation: messageType, ContentType and CONTENT_TYPE. However, the request Content-type still remains "application/xml".

Here is an excerpt from my sequence that calls REST service:

   <property xmlns:ns="http://org.apache.synapse/xsd" name="REST_URL_POSTFIX" value="/record/12345" scope="axis2" type="STRING"/>
   <property name="HTTP_METHOD" value="PUT" scope="axis2" type="STRING"/>
   <property name="messageType" value="application/rdf+xml" scope="axis2" type="STRING"/>
   <property name="ContentType" value="application/rdf+xml" scope="axis2" type="STRING"/>
   <property name="CONTENT_TYPE" value="application/rdf+xml" scope="axis2" type="STRING"/>
   <send>
      <endpoint name="CQ">
         <address uri="http://my_url" format="pox">
         </address>
         <property xmlns:ns="http://org.apache.synapse/xsd" name="Authorization" expression="fn:concat('Basic ', base64Encode('username:password'))" scope="transport"/>
         <property name="OSLC-Core-Version" value="2.0" scope="transport"/>
         <property name="Accept" value="application/rdf+xml" scope="transport"/>
      </endpoint>
   </send>

I tested it with TCPMon and no matter what Content-type property I use, request still contains "application/xml".

Please advice.

Answer

S.Uthaiyashankar picture S.Uthaiyashankar · Jul 12, 2013

Can you try WSO2 ESB 4.7.0 with following configuration? Note that, I have changed the address format from "pox" to "rest"

   <property xmlns:ns="http://org.apache.synapse/xsd" name="REST_URL_POSTFIX" value="/record/12345" scope="axis2" type="STRING"/>
   <property name="HTTP_METHOD" value="PUT" scope="axis2" type="STRING"/>
   <property name="messageType" value="application/rdf+xml" scope="axis2" type="STRING"/>
   <property name="ContentType" value="application/rdf+xml" scope="axis2" type="STRING"/>
   <property name="CONTENT_TYPE" value="application/rdf+xml" scope="axis2" type="STRING"/>
   <send>
      <endpoint name="CQ">
         <address uri="http://my_url" format="rest">
         </address>
         <property xmlns:ns="http://org.apache.synapse/xsd" name="Authorization" expression="fn:concat('Basic ', base64Encode('username:password'))" scope="transport"/>
         <property name="OSLC-Core-Version" value="2.0" scope="transport"/>
         <property name="Accept" value="application/rdf+xml" scope="transport"/>
      </endpoint>
   </send>

These are the http headers sent now (captured from tcpmon)

PUT /record/12345 HTTP/1.1
Cookie: region1_configure_menu=none; region3_registry_menu=none; region4_monitor_menu=none; region5_tools_menu=none; JSESSIONID=54D2911FCD5559C6B2F723E7C6FA9B44; requestedURI="../../carbon/service-mgt/index.jsp?region=region1&item=services_list_menu"; current-breadcrumb=manage_menu%2Cservices_menu%2Cservices_list_menu%23
Authorization: null
OSLC-Core-Version: 2.0
Content-Type: application/rdf+xml
Accept: application/rdf+xml
Transfer-Encoding: chunked
Host: www.foo.com:8080
Connection: Keep-Alive
User-Agent: Synapse-PT-HttpComponents-NIO