A com.betfair.cougar.core.api.fault.Fault
happens under the following conditions:
<exceptions>
tag of the operation).It contains:
FaultCode
indicating whether the problem is at the client or on the servererrorCode
in the form XXX-YYYY, where XXX indicates in which functional area the error occurred, and YYYY is a number signifying the causeFaultDetail
containing a message and possibly a trace, if detailed fault reporting is enabledYou can do this statically by setting the Cougar core property cougar.fault.detailed=true
, or dynamically using the MBean CoUGAR:name=faultController
.
DSC
is the errorCode
prefix for faults returned by Cougar itself.
If you can't find what you need in this table, please look at the source of ```ServerFaultCode``` in your IDE and then update this page. |
Meaning | FaultCode | Client/Server | Associated HTTP Transport Response Code | Comments |
---|---|---|---|---|
DSC-0001 | StartupError | Server | 500 | |
DSC-0002 | FrameworkError | Server | 500 | |
DSC-0003 | InvocationResultIncorrect | Server | 500 | |
DSC-0005 | ServiceRuntimeException | Server | 500 | |
DSC-0006 | SOAPDeserialisationFailure | Client | 400 | |
DSC-0007 | XMLDeserialisationFailure | Client | 400 | |
DSC-0008 | JSONDeserialisationParseFailure | Client | 400 | |
DSC-0009 | ClassConversionFailure | Client | 400 | Invalid format for parameter, for example passing a string where a number was expected. Can also happen when a value is passed that does not match any valid enum. |
DSC-0010 | InvalidInputMediaType | Client | 415 | |
DSC-0011 | ContentTypeNotValid | Client | 415 | |
DSC-0012 | MediaTypeParseFailure | Client | 415 | |
DSC-0013 | AcceptTypeNotValid | Client | 406 | |
DSC-0014 | ResponseContentTypeNotValid | Server | 500 | |
DSC-0015 | SecurityException | Client | 403 | |
DSC-0016 | ServiceDisabled | Server | 503 | |
DSC-0017 | OperationDisabled | Server | 503 | |
DSC-0018 | MandatoryNotDefined | Client | 400 | A parameter marked as mandatory was not provided |
DSC-0019 | Timeout | Server | 504 | |
DSC-0020 | BinDeserialisationParseFailure | Client | 400 | |
DSC-0021 | NoSuchOperation | Client | 404 | |
DSC-0022 | SubscriptionAlreadyActiveForEvent | Server | 500 | |
DSC-0023 | NoSuchService | Client | 404 | |
DSC-0024 | RescriptDeserialisationFailure | Client | 400 | |
DSC-0025 | JMSTransportCommunicationFailure | Server | 500 | |
DSC-0026 | RemoteCougarCommunicationFailure | Server | 500 | |
DSC-0027 | OutputChannelClosedCantWrite | Server | ? | |
DSC-0028 | XMLSerialisationFailure | Server | 500 | |
DSC-0029 | JSONSerialisationFailure | Server | 500 | |
DSC-0030 | SOAPSerialisationFailure | Server | 500 | |
DSC-0031\ | NoRequestsFound | Client\ | 400\ | |
DSC-0032\ | EPNSerialisationFailure | Server\ | 500\ | |
DSC-0033\ | UnidentifiedCaller | Client | 400\ | |
DSC-0034\ | UnknownCaller | Client | 400\ | |
DSC-0035\ | UnrecognisedCredentials | Client | 400\ | |
DSC-0036\ | InvalidCredentials | Client | 400\ | |
DSC-0037\ | SubscriptionRequired | Client | 403\ | |
DSC-0038\ | OperationForbidden | Client | 403\ | |
DSC-0039\ | NoLocationSupplied | Client\ | 400\ | |
DSC-0040\ | BannedLocation | Client\ | 403\ |
These are defined in the service BSIDLs, for example here we see that WEX-0001
indicates “The wotsit is closed”.
<interface name="Baseline" ...
...
<exceptionType name="WotsitException" prefix="WEX">
<description>This exception might be thrown when an operation fails</description>
<parameter name="errorCode" type="string">
<description>the unique code for this error</description>
<validValues>
<value id="1" name="CLOSED">
<description>The wotsit is closed</description>
</value>
...
A SOAP fault for a malformed request with detailed fault reporting switched on:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header/>
<soap:Body>
<soap:Fault>
<faultcode>soap:Client</faultcode>
<faultstring>DSC-0006</faultstring>
<detail>
<trace/>
<message>com.ctc.wstx.exc.WstxParsingException: Unexpected close tag </bas:TestExceptionRquest>; expected </bas:TestExceptionRequest>.
at [row,col {unknown-source}]: [5,31]</message>
</detail>
</soap:Fault>
</soap:Body>
</soap:Envelope>
A SOAP fault for a Null pointer exception being thrown in the application code with detailed fault reporting switched off:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sec="http://www.betfair.com/security/">
<soap:Header/>
<soap:Body>
<soap:Fault>
<faultcode>soap:Server</faultcode>
<faultstring>DSC-0005</faultstring>
<detail/>
</soap:Fault>
</soap:Body>
</soap:Envelope>
A SOAP fault for a defined exception (WotsitException) with 2 parameters (errorCode & type) being thrown and detailed fault reporting switched on
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sec="http://www.betfair.com/security/">
<soap:Header/>
<soap:Body>
<soap:Fault>
<faultcode>soap:Client</faultcode>
<faultstring>WEX-0001</faultstring>
<detail>
<app:WotsitException xmlns:app="http://www.betfair.com/servicetypes/v1/Baseline/">
<app:errorCode>CLOSED</app:errorCode>
<app:type>SPICY</app:type>
</app:WotsitException>
<trace>com.betfair.baseline.v1_0.exception.WotsitException: WEX-0001
at com.betfair.cougar.baseline.BaselineServiceImpl.testException(BaselineServiceImpl.java:189)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.betfair.cougar.core.impl.handler.OperationInvoker.handleInternal(OperationInvoker.java:45)
at com.betfair.cougar.core.api.handler.InternalHandler.handle(InternalHandler.java:18)
at com.betfair.cougar.core.impl.ChainImpl.execute(ChainImpl.java:53)
at com.betfair.cougar.core.impl.server.CougarServer.service(CougarServer.java:128)
at com.betfair.cougar.transport.http.jetty.JettyServiceHandler.handle(JettyServiceHandler.java:45)
at org.mortbay.jetty.handler.HandlerList.handle(HandlerList.java:49)
at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:113)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:324)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:550)
at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:890)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:743)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:215)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:407)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:421)
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:520)</trace>
<message>WotsitException</message>
</detail>
</soap:Fault>
</soap:Body>
</soap:Envelope>
A fault for an internal problem in the cougar code with detailed fault reporting switched on:
<fault>
<faultcode>Server</faultcode>
<faultstring>DSC-0002</faultstring>
<detail>
<trace/>
<message>Unhandled event found in serialiser</message>
</detail>
</fault>
An IDL defined exception (SimpleException with fields errorCode and reason) thrown by the application code:
{
"detail": {
"message": "SimpleException",
"trace": "com.betfair.baseline.v1_0.exception.SimpleException: SEX-0001\r\n\tat com.betfair.cougar.baseline.BaselineServiceImpl.testException(BaselineServiceImpl.java:179)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)\r\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)\r\n\tat java.lang.reflect.Method.invoke(Method.java:597)\r\n\tat com.betfair.cougar.core.impl.handler.OperationInvoker.handleInternal(OperationInvoker.java:45)\r\n\tat com.betfair.cougar.core.api.handler.InternalHandler.handle(InternalHandler.java:18)\r\n\tat com.betfair.cougar.core.impl.ChainImpl.execute(ChainImpl.java:53)\r\n\tat com.betfair.cougar.core.impl.server.CougarServer.service(CougarServer.java:129)\r\n\tat com.betfair.cougar.transport.http.jetty.JettyServiceHandler.handle(JettyServiceHandler.java:45)\r\n\tat org.mortbay.jetty.handler.HandlerList.handle(HandlerList.java:49)\r\n\tat org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:113)\r\n\tat org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)\r\n\tat org.mortbay.jetty.Server.handle(Server.java:324)\r\n\tat org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:550)\r\n\tat org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:876)\r\n\tat org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:535)\r\n\tat org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:209)\r\n\tat org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:407)\r\n\tat org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:421)\r\n\tat org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:520)\r\n",
"SimpleException": {
"reason": "GENERIC",
"errorCode": "GENERIC"
}
},
"faultcode": "Client",
"faultstring": "SEX-0001"
}