If WSO2 ESB is behind a firewall, your proxy service might need to talk to a server through a proxy server, which might require HTTP basic authentication.
To configure the ESB to communicate with the proxy server:
In
<PRODUCT_HOME>/repository/conf/axis2/axis2.xml
, edit thetransportSender
configuration of the http transport to specify the proxy server as follows:<transportSender name="http" class="org.apache.synapse.transport.nhttp.HttpCoreNIOSender"> <parameter name="non-blocking" locked="false">true</parameter> <parameter name="http.proxyHost" locked="false">localhost</parameter> <parameter name="http.proxyPort" locked="false">8080</parameter> </transportSender>
In the Synapse configuration of the proxy service that sends messages to this proxy server, set the following two properties before the send mediator:
<syn:property name="Proxy-Authorization" expression="fn:concat('Basic', base64Encode('userName:password'))" scope="transport"/> <syn:property name="POST_TO_URI" value="true" scope="axis2"/>
The first property sets the
Proxy-Authorization
HTTP transport header with the base64 encoded user name and password as expected by the HTTP basic authentication. The second property makes the outgoing URL a complete URL understandable by the proxy server.
For example, in normal scenarios the outgoing request is sent as following:
POST /services/SimpleStockQuoteService HTTP/1.1
But the proxy server requires sending the actual URL:
POST [http://localhost:9000/services/SimpleStockQuoteService] HTTP/1.1
Following is a sample proxy service configuration that sets these two properties:
<syn:proxy name="StockQuoteProxy" startOnLoad="true"> <syn:target> <syn:inSequence> <syn:property name="Proxy-Authorization" expression="fn:concat('Basic ', base64Encode('supun:test123'))" scope="transport"/> <syn:property name="POST_TO_URI" value="true" scope="axis2"/> <syn:send> <syn:endpoint name="endpoint_urn_uuid_379C485AD3CB65037F10216600509076498395882"> <syn:address uri="http://localhost:9000/services/SimpleStockQuoteService"/> </syn:endpoint> </syn:send> </syn:inSequence> <syn:outSequence> <syn:send/> </syn:outSequence> </syn:target> <syn:publishWSDL uri="file:repository/samples/resources/proxy/sample_proxy_1.wsdl"/> </syn:proxy>