Apama 10.7.2 | Connecting Apama Applications to External Components | Standard Connectivity Plug-ins | The HTTP Client Transport Connectivity Plug-in | Using predefined generic event definitions to invoke HTTP services with JSON and string payloads
 
Using predefined generic event definitions to invoke HTTP services with JSON and string payloads
JSON payloads
You can invoke an HTTP service with a JSON payload by using predefined generic Apama event definitions. To do so, you have to use the JSON with generic request/response event definitions option when adding the HTTP client connectivity plug-in. See also Adding the HTTP client connectivity plug-in to a project.
This generic option uses a predefined chain definition with dynamic chain instances to invoke multiple HTTP services, and it uses event types in the com.softwareag.connectivity.httpclient package. For detailed information about the available event types, see the API Reference for EPL (ApamaDoc) .
The following example shows how to invoke an HTTP service using the generic events:
action performRequest() {
// 1) Get the transport instance
HttpTransport transport := HttpTransport.getOrCreate("www.example.com", 80);
// 2) Create the request event
Request req:= transport.createGETRequest("/geo/");
// 3) Execute the request and pass the callback action
req.execute(handleResponse);
}
action handleResponse(Response res) {
// 4) Handle the response
if res.isSuccess() {
// 5) Extract data from the payload
log res.payload.getString("location.city") at INFO;
} else {
log "Failed: " + res.statusMessage at ERROR;
}
}
Overriding the content-type header of an HTTP request to allow non-JSON string payloads
You can override the content-type header of an HTTP request to allow for non-JSON string payloads.
Whenever the content-type header of a request is not overridden, the payloads are encoded as JSON (this is the default setting). When you override the content-type header, the JSON codec is skipped and the payload is not encoded as JSON, allowing string data to be passed through. The decoding of the response to the request depends on the content type provided by the server.
The following example demonstrates how to override an HTTP request's content-type header to send string data:
// 1) HTTP PUT request with string ("example string payload") payload
req := transport.createPUTRequest("/plain_string", "example string payload");
// 2) Override the request's content-type header
req.setHeader("content-type", "text/plain");
// 3) Execute the request, passing the callback action handleResponse
req.execute(handleResponse);