This section provides several Java, XML, and JSP examples.
The following examples adds a user with several attributes. The first example returns all data, while the second returns only the identifier.
// ReturnData.EVERYTHING example
SessionAwareSpml2Client client = new SessionAwareSpml2Client("http://example.com:8080/
idm/servlet/openspml2");
ListTargetsResponse loginInfo = client.login("Configurator", "configurator");
AddRequest req = new AddRequest();
req.setReturnData(ReturnData.EVERYTHING);
Extensible attrs = new Extensible();
attrs.addOpenContentElement(new DSMLAttr("objectclass", "spml2Person"));
attrs.addOpenContentElement(new DSMLAttr("accountId", "sempiricus"));
attrs.addOpenContentElement(new DSMLAttr("credentials", "password"));
attrs.addOpenContentElement(new DSMLAttr("firstname", "Sextus"));
attrs.addOpenContentElement(new DSMLAttr("lastname", "Empiricus"));
req.setData(attrs);
AddResponse res = (AddResponse) client.request(req);
if (res.getStatus().equals(StatusCode.SUCCESS)) {
System.out.println("Received positive add response.");
}
PSO pso = res.getPso();
System.out.println("PSO ID: " + pso.getPsoID().getID());
Extensible psoData = pso.getData();
for (OpenContentElement oce : psoData.getOpenContentElements()) {
if (oce instanceof DSMLAttr) {
DSMLAttr attr = (DSMLAttr) oce;
System.out.println(attr.getName() + ": " + attr.getValues()[0].getValue());
}
}
// ReturnData.IDENTIFIER example
SessionAwareSpml2Client client = new SessionAwareSpml2Client("http://example.com:8080/
idm/servlet/openspml2");
ListTargetsResponse loginInfo = client.login("Configurator", "configurator");
AddRequest req = new AddRequest();
req.setReturnData(ReturnData.IDENTIFIER);
Extensible attrs = new Extensible();
attrs.addOpenContentElement(new DSMLAttr("objectclass", "spml2Person"));
attrs.addOpenContentElement(new DSMLAttr("accountId", "catullus"));
attrs.addOpenContentElement(new DSMLAttr("credentials", "password"));
attrs.addOpenContentElement(new DSMLAttr("firstname", "Gaius"));
attrs.addOpenContentElement(new DSMLAttr("lastname", "Catullus"));
req.setData(attrs);
AddResponse res = (AddResponse) client.request(req);
if (res.getStatus().equals(StatusCode.SUCCESS)) {
System.out.println("Received positive add response.");
}
PSO pso = res.getPso();
System.out.println("PSO ID: " + pso.getPsoID().getID());
Extensible psoData = pso.getData();
if (psoData == null) {
System.out.println("PSO contains no data, as expected.");
}
The following example shows an account lookup.
// Lookup example
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 req = new LookupRequest();
req.setPsoID(psoId);
req.setExecutionMode(ExecutionMode.SYNCHRONOUS);
try {
LookupResponse res = (LookupResponse) client.request(req);
if (res.getStatus().equals(StatusCode.SUCCESS)) {
System.out.println("Performed account lookup.");
}
PSO pso = res.getPso();
} catch (Spml2ExceptionWithResponse e) {
System.out.println("Lookup failed: " + e.getMessage());
LookupResponse res = (LookupResponse) e.getResponse();
}
The following example changes the lastname parameter to Antoninus.
SessionAwareSpml2Client client = new
SessionAwareSpml2Client("http://example.com:8080/idm/servlet/openspml2");
ListTargetsResponse loginInfo = client.login("Configurator", "configurator");
PSOIdentifier psoId = new PSOIdentifier("maurelius", null, null);
ModifyRequest req = new ModifyRequest();
req.setPsoID(psoId);
Modification modification = new Modification();
modification.addOpenContentElement(new DSMLModification("lastname", "Antoninus",
ModificationMode.REPLACE));
req.addModification(modification);
ModifyResponse res = (ModifyResponse) client.request(req);
if (res.getStatus().equals(StatusCode.SUCCESS)) {
System.out.println("Modified account.");
}
The following example shows the SPML 2.0 request that was sent.
<addRequest xmlns='urn:oasis:names:tc:SPML:2:0' requestID='rid-spmlv2'
executionMode='synchronous'>
<openspml:operationalNameValuePair xmlns:openspml='urn:org:openspml:v2:util:xml
name='session' value='AAALPgAAYD0A...'/>
<data>
<dsml:attr xmlns:dsml='urn:oasis:names:tc:DSML:2:0:core' name='accountId'>
<dsml:value>exampleSpml2Person</dsml:value>
</dsml:attr>
<dsml:attr xmlns:dsml='urn:oasis:names:tc:DSML:2:0:core' name='objectclass'>
<dsml:value>spml2Person</dsml:value>
</dsml:attr>
<dsml:attr xmlns:dsml='urn:oasis:names:tc:DSML:2:0:core' name='credentials'>
<dsml:value>pwdpwd</dsml:value>
</dsml:attr>
</data>
</addRequest>
This example shows the body of the SPML response that was returned to the client.
<addResponse xmlns='urn:oasis:names:tc:SPML:2:0' status='success'
requestID='rid-spmlv2'>
<openspml:operationalNameValuePair xmlns:openspml='urn:org:openspml:v2:util:xml'
name='session' value='AAALPgAAYD0A...'/>
<pso>
<psoID ID='anSpml2Person'/>
<data>
<dsml:attr xmlns:dsml='urn:oasis:names:tc:DSML:2:0:core' name='accountId'>
<dsml:value>anSpml2Person</dsml:value>
</dsml:attr>
<dsml:attr xmlns:dsml='urn:oasis:names:tc:DSML:2:0:core' name='objectclass'>
<dsml:value>spml2Person</dsml:value>
</dsml:attr>
<dsml:attr xmlns:dsml='urn:oasis:names:tc:DSML:2:0:core' name='credentials'>
<dsml:value>pwdpwd</dsml:value>
</dsml:attr>
</data>
</pso>
</addResponse>
The following example consists of a .jsp file that invokes an AddRequest through Waveset’s SessionAwareSpml2Client class.
<%@page contentType="text/html"%>
<%@page import="org.openspml.v2.client.*,
com.sun.idm.rpc.spml2.SessionAwareSpml2Client"%>
<%@page import="org.openspml.v2.profiles.dsml.*"%>
<%@page import="org.openspml.v2.profiles.*"%>
<%@page import="org.openspml.v2.util.xml.*"%>
<%@page import="org.openspml.v2.msg.*"%>
<%@page import="org.openspml.v2.msg.spml.*"%>
<%@page import="org.openspml.v2.util.*"%>
<%
final String url = "http://host:port/idm/servlet/openspml2";
%>
<html>
<head><title>SPML2 Test</title></head>
<body>
<%
// need a client.
SessionAwareSpml2Client client = new SessionAwareSpml2Client( url );
// login
client.login("configurator", "password");
// AddRequest
String rid = "rid-spmlv2"; // The RequestId is not strictly required.
Extensible data = new Extensible();
data.addOpenContentElement(new DSMLAttr("accountId", user));
data.addOpenContentElement(new DSMLAttr("objectclass", "spml2Person"));
data.addOpenContentElement(new DSMLAttr("credentials", password));
AddRequest add = new AddRequest(rid, // String requestId,
ExecutionMode.SYNCHRONOUS, // ExecutionMode executionMode,
null, // PSOIdentifier type,
null, // PSOIdentifier containerID,
data, // Extensible data,
null, // CapabilityData[] capabilityData,
null, // String targetId,
null // ReturnData returnData
);
// Submit the request
Response res = client.request( add );
%>
<%= res.toString()%>
</body>
</html>