Scenario
There's a REST API hosted WSO2 ESB. And when you invoke it, ESB only returns a 202 Accept response similar to follows and no processing is done to the request. And there are no errors printed in the wso2carbon.log too.HTTP/1.1 202 Accepted
Date: Wed, 25 Feb 2015 13:43:14 GMT
Server: WSO2-PassThrough-HTTP
Transfer-Encoding: chunked
Connection: keep-alive
Reason
The reason for this is, there's no API or a resource that matches the request URL. Let me elaborate more on this. Let's say the request URL is as follows,
https://esb.api.host:8243/myapicontext/myresource/myvar/
If this request returns a response similar to above, following are the possible causes,
- There's no API with the context="/myapicontext"
- If there's an API with context="/myapicontext", it has no resource with uri-template or a url-mapping which matches /myresource/myvar/ portion of the request URL.
In order for the ESB to send a more meaning full response in case 2 ONLY, add the following sequence to the ESB.
<sequence xmlns="http://ws.apache.org/ns/synapse" name="_resource_mismatch_handler_">
<payloadFactory media-type="xml">
<format>
<tp:fault xmlns:tp="http://test.com">
<tp:code>404</tp:code>
<tp:type>Status report</tp:type>
<tp:message>Not Found</tp:message>
<tp:description>The requested resource (/$1) is not available.</tp:description>
</tp:fault>
</format>
<args>
<arg xmlns:ns="http://org.apache.synapse/xsd" xmlns:ns3="http://org.apache.synapse/xsd" expression="$axis2:REST_URL_POSTFIX" evaluator="xml"></arg>
</args>
</payloadFactory>
<property name="NO_ENTITY_BODY" action="remove" scope="axis2"></property>
<property name="HTTP_SC" value="404" scope="axis2"></property>
<respond/>
<drop></drop>
</sequence>
So that the ESB will return a response as follows if there's no matching resource in API,
<tp:fault xmlns:tp="http://test.com">
<tp:code>404</tp:code>
<tp:type>Status report</tp:type>
<tp:message>Not Found</tp:message>
<tp:description>The requested resource (//myresource/myvar/) is not available.</tp:description>
</tp:fault>
Hi,
ReplyDeleteCan we also use this in case of proxy services...?
I added this sequence in the ESB(4.8.1) and made a soap call with the wrong endpoint but still receiving 202 accepted...
This will not work with proxy services becuse the "_resource_mismatch_handler_" handler is for handling REST APIs resource mismathces
ReplyDelete