Skip to content

Commit b70e654

Browse files
committed
IMSPOXRequest.sendReplaceResult
1 parent f0911a7 commit b70e654

File tree

2 files changed

+81
-26
lines changed

2 files changed

+81
-26
lines changed

pom.xml

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<name>IMS BasicLTI Utilities</name>
66
<groupId>org.imsglobal</groupId>
77
<artifactId>basiclti-util</artifactId>
8-
<version>1.0.1</version>
8+
<version>1.1.0</version>
99
<organization>
1010
<name>IMS Global Learning Consortium</name>
1111
<url>www.imsglobal.org/</url>
@@ -53,6 +53,16 @@
5353
<artifactId>httpclient</artifactId>
5454
<version>4.0.1</version>
5555
</dependency>
56+
<dependency>
57+
<groupId>oauth.signpost</groupId>
58+
<artifactId>signpost-core</artifactId>
59+
<version>1.2.1.2</version>
60+
</dependency>
61+
<dependency>
62+
<groupId>oauth.signpost</groupId>
63+
<artifactId>signpost-commonshttp4</artifactId>
64+
<version>1.2.1.2</version>
65+
</dependency>
5666
<dependency>
5767
<groupId>junit</groupId>
5868
<artifactId>junit</artifactId>

src/main/java/org/imsglobal/pox/IMSPOXRequest.java

Lines changed: 70 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.imsglobal.pox;
22

33
import java.io.ByteArrayInputStream;
4+
import java.io.IOException;
45
import java.io.Reader;
56
import java.net.URLDecoder;
67
import java.security.MessageDigest;
@@ -27,9 +28,16 @@
2728
import net.oauth.SimpleOAuthValidator;
2829
import net.oauth.server.OAuthServlet;
2930
import net.oauth.signature.OAuthSignatureMethod;
31+
import oauth.signpost.commonshttp.CommonsHttpOAuthConsumer;
32+
import oauth.signpost.exception.OAuthException;
3033

3134
import org.apache.commons.codec.binary.Base64;
3235
import org.apache.commons.lang3.StringEscapeUtils;
36+
import org.apache.http.HttpResponse;
37+
import org.apache.http.client.HttpResponseException;
38+
import org.apache.http.client.methods.HttpPost;
39+
import org.apache.http.entity.StringEntity;
40+
import org.apache.http.impl.client.DefaultHttpClient;
3341
import org.imsglobal.basiclti.XMLMap;
3442
import org.w3c.dom.Document;
3543
import org.w3c.dom.Element;
@@ -481,35 +489,72 @@ public String getResponse(String description, String major, String severity,
481489
bodyString, newLine);
482490

483491
}
492+
493+
static final String replaceResultMessage =
494+
"<?xml version = \"1.0\" encoding = \"UTF-8\"?>"+
495+
"<imsx_POXEnvelopeRequest xmlns=\"http://www.imsglobal.org/services/ltiv1p1/xsd/imsoms_v1p0\">"+
496+
" <imsx_POXHeader>"+
497+
" <imsx_POXRequestHeaderInfo>"+
498+
" <imsx_version>V1.0</imsx_version>"+
499+
" </imsx_POXRequestHeaderInfo>"+
500+
" </imsx_POXHeader>"+
501+
" <imsx_POXBody>"+
502+
" <replaceResultRequest>"+
503+
" <resultRecord>"+
504+
" <sourcedGUID>"+
505+
" <sourcedId>%s</sourcedId>"+
506+
" </sourcedGUID>"+
507+
" <result>"+
508+
" <resultScore>"+
509+
" <textString>%s</textString>"+
510+
" </resultScore>"+
511+
" %s"+
512+
" </result>"+
513+
" </resultRecord>"+
514+
" </replaceResultRequest>"+
515+
" </imsx_POXBody>"+
516+
"</imsx_POXEnvelopeRequest>";
517+
518+
static final String resultDataText = "<resultData><text>%s</text></resultData>";
519+
520+
static final String resultDataUrl = "<resultData><text>%s</text></resultData>";
521+
522+
public static void sendReplaceResult(String url, String key, String secret, String sourcedid, String score) throws IOException, OAuthException {
523+
sendReplaceResult(url, key, secret, sourcedid, score, null);
524+
}
525+
526+
public static void sendReplaceResult(String url, String key, String secret, String sourcedid, String score, String resultData) throws IOException, OAuthException {
527+
sendReplaceResult(url, key, secret, sourcedid, score, resultData, false);
528+
}
529+
530+
public static void sendReplaceResult(String url, String key, String secret, String sourcedid, String score, String resultData, Boolean isUrl) throws IOException, OAuthException {
531+
String dataXml = "";
532+
if (resultData != null) {
533+
if (isUrl) {
534+
dataXml = String.format(resultDataUrl, StringEscapeUtils.escapeXml(resultData));
535+
} else {
536+
dataXml = String.format(resultDataText, StringEscapeUtils.escapeXml(resultData));
537+
}
538+
}
539+
String xml = String.format(replaceResultMessage, StringEscapeUtils.escapeXml(sourcedid),
540+
StringEscapeUtils.escapeXml(score), dataXml);
541+
542+
CommonsHttpOAuthConsumer signer = new CommonsHttpOAuthConsumer(key, secret);
543+
HttpPost request = new HttpPost(url);
544+
request.setHeader("Content-Type", "application/xml");
545+
request.setEntity(new StringEntity(xml, "UTF-8"));
546+
signer.sign(request);
547+
DefaultHttpClient client = new DefaultHttpClient();
548+
HttpResponse response = client.execute(request);
549+
if (response.getStatusLine().getStatusCode() >= 400) {
550+
throw new HttpResponseException(response.getStatusLine().getStatusCode(), response.getStatusLine().getReasonPhrase());
551+
}
552+
}
484553

485554
/** Unit Tests */
486-
static final String inputTestData = "<?xml version = \"1.0\" encoding = \"UTF-8\"?>\n" +
487-
"<imsx_POXEnvelopeRequest xmlns = \"http://www.imsglobal.org/services/ltiv1p1/xsd/imsoms_v1p0\">\n" +
488-
"<imsx_POXHeader>\n" +
489-
"<imsx_POXRequestHeaderInfo>\n" +
490-
"<imsx_version>V1.0</imsx_version>\n" +
491-
"<imsx_messageIdentifier>999999123</imsx_messageIdentifier>\n" +
492-
"</imsx_POXRequestHeaderInfo>\n" +
493-
"</imsx_POXHeader>\n" +
494-
"<imsx_POXBody>\n" +
495-
"<replaceResultRequest>\n" +
496-
"<resultRecord>\n" +
497-
"<sourcedGUID>\n" +
498-
"<sourcedId>3124567</sourcedId>\n" +
499-
"</sourcedGUID>\n" +
500-
"<result>\n" +
501-
"<resultScore>\n" +
502-
"<language>en-us</language>\n" +
503-
"<textString>A</textString>\n" +
504-
"</resultScore>\n" +
505-
"</result>\n" +
506-
"</resultRecord>\n" +
507-
"</replaceResultRequest>\n" +
508-
"</imsx_POXBody>\n" +
509-
"</imsx_POXEnvelopeRequest>";
510-
511555
public static void runTest() {
512556
System.out.println("Runnig test.");
557+
String inputTestData = String.format(replaceResultMessage, "3124567", "A", "");
513558
IMSPOXRequest pox = new IMSPOXRequest(inputTestData);
514559
System.out.println("Version = "+pox.getHeaderVersion());
515560
System.out.println("Operation = "+pox.getOperation());

0 commit comments

Comments
 (0)