Sun Identity Manager 8.1 Web Services

Async Capabilities

Identity Manager supports the Async capabilities described in the following table.

Table 2–3 Async Capabilities

Capability 

Description 

OperationalAttributes

CancelRequest

Cancels a request, using the request ID. 

None 

StatusRequest

Returns the status of a request, using the request ID. 

None 

The following example performs an asynchronous status request.


Example 2–10 Example Async Requests

String REQUEST_ID = "test-req-id-00000000000001";
String PRE_ASYNC_DELAY = "45";
String POST_ASYNC_DELAY = "15";

SessionAwareSpml2Client client = new 
   SessionAwareSpml2Client("http://example.com:8080/idm/servlet/openspml2");
ListTargetsResponse loginInfo = client.login("Configurator", "configurator");

PSOIdentifier psoId = new PSOIdentifier("maurelius", null, null);
LookupRequest lookupReq = new LookupRequest();
lookupReq.setPsoID(psoId);
lookupReq.setReturnData(ReturnData.EVERYTHING);
lookupReq.setRequestID(REQUEST_ID);
lookupReq.setExecutionMode(ExecutionMode.ASYNCHRONOUS);

lookupReq.addOpenContentElement(
    new OperationalNameValuePair(
        com.sun.idm.rpc.spml2.async.AsyncExecutorTask.IDM_BEFORE_ASYNC_DELAY_NAME, 
        PRE_ASYNC_DELAY
    )
);
lookupReq.addOpenContentElement(
    new OperationalNameValuePair(
        com.sun.idm.rpc.spml2.async.AsyncExecutorTask.IDM_AFTER_ASYNC_DELAY_NAME, 
        POST_ASYNC_DELAY
    )
);

LookupResponse lookupRes = (LookupResponse) client.send(lookupReq);
if (lookupRes.getStatus().equals(StatusCode.SUCCESS)) {
    System.out.println("Lookup response is pending.");
}

StatusRequest statusReq = new StatusRequest();
statusReq.setAsyncRequestID(REQUEST_ID);
statusReq.setReturnResults(false);
statusReq.setExecutionMode(ExecutionMode.SYNCHRONOUS);
StatusResponse statusRes = (StatusResponse) client.send(statusReq);
if (lookupRes.getStatus().equals(StatusCode.SUCCESS)) {
    System.out.println("Status response received.");
}

java.util.Iterator responseIterator = statusRes.responseIterator();
while (responseIterator.hasNext()) {
    Response nestedResponse = (Response) responseIterator.next();
    if (nestedResponse instanceof LookupResponse) {
        if (nestedResponse.getStatus().equals(StatusCode.SUCCESS)) {
            System.out.println("Successfully received nested lookup response.");
        }
    }
}