Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ensure statement JSON is completely consumed in multipart #62

Merged
merged 1 commit into from
Oct 6, 2021
Merged

Conversation

milt
Copy link
Member

@milt milt commented Oct 6, 2021

LRS-57 Given the following multipart request containing lots of statements:

POST /xapi/statements HTTP/1.1
X-Experience-API-Version: 1.0.3
Content-Type: multipart/mixed; boundary=105423a5219f5a63362a375ba7a64a8f234da19c7d01e56800c3c64b26bb2fa0
Host: localhost:8080
Connection: close
User-Agent: Paw/3.3.1 (Macintosh; OS X/11.6.0) GCDHTTPRequest
Content-Length: 45207

--105423a5219f5a63362a375ba7a64a8f234da19c7d01e56800c3c64b26bb2fa0
Content-Type:application/json

[{"actor":{"objectType":"Agent","name":"xAPI mbox","mbox":"mailto:xapi@adlnet.gov"},"verb":{"id":"http://adlnet.gov/expapi/verbs/attended","display":{"en-GB":"attended","en-US":"attended"}},"object":{"objectType":"Activity","id":"http://www.example.com/meetings/occurances/34534"},"id":"72fbeb28-6a28-4117-b546-b936553c7adb","stored":"2021-10-05T15:09:06.973896000Z","timestamp":"2021-10-05T15:09:06.973896000Z","authority":{"name":"Memory LRS","objectType":"Agent","account":{"name":"root","homePage":"http://localhost:8080"}},"version":"1.0.3"},{"actor":{"objectType":"Agent","name":"xAPI account","mbox":"mailto:xapi@adlnet.gov"},"verb":{"id":"http://adlnet.gov/expapi/verbs/attended","display":{"en-GB":"attended","en-US":"attended"}},"object":{"objectType":"Activity","id":"http://www.example.com/meetings/occurances/34534","definition":{"type":"http://adlnet.gov/expapi/activities/meeting","name":{"en-GB":"example meeting","en-US":"example meeting"},"description":{"en-GB":"An example meeting that happened on a specific occasion with certain people present.","en-US":"An example meeting that happened on a specific occasion with certain people present."},"moreInfo":"http://virtualmeeting.example.com/345256","extensions":{"http://example.com/null":null}}},"stored":"2021-10-05T15:09:07.115516000Z","id":"259d6c9c-d330-4b92-8390-a924408ae3b2","timestamp":"2021-10-05T15:09:07.115516000Z","authority":{"name":"Memory LRS","objectType":"Agent","account":{"name":"root","homePage":"http://localhost:8080"}},"version":"1.0.3"},{"object":{"objectType":"Activity","id":"http://www.example.com/meetings/occurances/34534"},"authority":{"name":"Memory LRS","objectType":"Agent","account":{"name":"root","homePage":"http://localhost:8080"}},"verb":{"id":"http://adlnet.gov/expapi/verbs/attended","display":{"en-GB":"attended","en-US":"attended"}},"id":"91ea5145-4fb6-432e-88b8-c1ab00c0d0d4","timestamp":"2021-10-05T15:09:07.136998000Z","version":"1.0.3","stored":"2021-10-05T15:09:07.136998000Z","actor":{"objectType":"Agent","name":"xAPI account","mbox":"mailto:xapi@adlnet.gov"},"result":{"score":{"scaled":0.95,"raw":95,"min":0,"max":100},"success":true,"completion":true,"response":"We agreed on some example actions.","duration":"PT1H0M0S","extensions":{"http://example.com/null":null}}},{"object":{"objectType":"Activity","id":"http://www.example.com/meetings/occurances/34534"},"authority":{"name":"Memory LRS","objectType":"Agent","account":{"name":"root","homePage":"http://localhost:8080"}},"verb":{"id":"http://adlnet.gov/expapi/verbs/attended","display":{"en-GB":"attended","en-US":"attended"}},"id":"6829f937-99da-4292-ad20-160c230aef82","timestamp":"2021-10-05T15:09:07.149659000Z","context":{"registration":"ec531277-b57b-4c15-8d91-d292c5b2b8f7","platform":"Example virtual meeting software","language":"tlh","statement":{"objectType":"StatementRef","id":"6690e6c9-3ef0-4ed3-8b37-7f3964730bee"},"extensions":{"http://example.com/null":null}},"version":"1.0.3","stored":"2021-10-05T15:09:07.149659000Z","actor":{"objectType":"Agent","name":"xAPI account","mbox":"mailto:xapi@adlnet.gov"}},{"actor":{"objectType":"Agent","name":"xAPI account","mbox":"mailto:xapi@adlnet.gov"},"verb":{"id":"http://adlnet.gov/expapi/verbs/attended","display":{"en-GB":"attended","en-US":"attended"}},"object":{"objectType":"SubStatement","actor":{"objectType":"Agent","name":"xAPI mbox_sha1sum","mbox_sha1sum":"cd9b00a5611f94eaa7b1661edab976068e364975"},"verb":{"id":"http://adlnet.gov/expapi/verbs/reported","display":{"en-GB":"reported","en-US":"reported"}},"object":{"objectType":"Activity","id":"http://www.example.com/meetings/occurances/34534","definition":{"type":"http://adlnet.gov/expapi/activities/meeting","name":{"en-GB":"example meeting","en-US":"example meeting"},"description":{"en-GB":"An example meeting that happened on a specific occasion with certain people present.","en-US":"An example meeting that happened on a specific occasion with certain people present."},"moreInfo":"http://virtualmeeting.example.com/345256","extensions":{"http://example.com/null":null}}}},"stored":"2021-10-05T15:09:07.166136000Z","id":"92c729d1-4ecd-49fb-84d2-51cd046ed897","timestamp":"2021-10-05T15:09:07.166136000Z","authority":{"name":"Memory LRS","objectType":"Agent","account":{"name":"root","homePage":"http://localhost:8080"}},"version":"1.0.3"},{"actor":{"objectType":"Agent","name":"xAPI account","mbox":"mailto:xapi@adlnet.gov"},"verb":{"id":"http://adlnet.gov/expapi/verbs/attended","display":{"en-GB":"attended","en-US":"attended"}},"object":{"objectType":"SubStatement","actor":{"objectType":"Agent","name":"xAPI account","mbox":"mailto:xapi@adlnet.gov"},"verb":{"id":"http://adlnet.gov/expapi/verbs/reported","display":{"en-GB":"reported","en-US":"reported"}},"result":{"score":{"scaled":0.95,"raw":95,"min":0,"max":100},"success":true,"completion":true,"response":"We agreed on some example actions.","duration":"PT1H0M0S","extensions":{"http://example.com/null":null}},"object":{"objectType":"Activity","id":"http://www.example.com/meetings/occurances/34534"}},"stored":"2021-10-05T15:09:07.181985000Z","id":"a81df8a8-88dc-47f7-9004-5aa11eb25420","timestamp":"2021-10-05T15:09:07.181985000Z","authority":{"name":"Memory LRS","objectType":"Agent","account":{"name":"root","homePage":"http://localhost:8080"}},"version":"1.0.3"},{"actor":{"objectType":"Agent","name":"xAPI account","mbox":"mailto:xapi@adlnet.gov"},"verb":{"id":"http://adlnet.gov/expapi/verbs/attended","display":{"en-GB":"attended","en-US":"attended"}},"object":{"objectType":"SubStatement","actor":{"objectType":"Agent","name":"xAPI account","mbox":"mailto:xapi@adlnet.gov"},"verb":{"id":"http://adlnet.gov/expapi/verbs/reported","display":{"en-GB":"reported","en-US":"reported"}},"context":{"registration":"ec531277-b57b-4c15-8d91-d292c5b2b8f7","platform":"Example virtual meeting software","language":"tlh","statement":{"objectType":"StatementRef","id":"6690e6c9-3ef0-4ed3-8b37-7f3964730bee"},"extensions":{"http://example.com/null":null}},"object":{"objectType":"Activity","id":"http://www.example.com/meetings/occurances/34534"}},"stored":"2021-10-05T15:09:07.198559000Z","id":"1f38fb1a-9b2b-4539-9210-6c8631212b93","timestamp":"2021-10-05T15:09:07.198559000Z","authority":{"name":"Memory LRS","objectType":"Agent","account":{"name":"root","homePage":"http://localhost:8080"}},"version":"1.0.3"},{"actor":{"objectType":"Agent","name":"xAPI mbox","mbox":"mailto:xapi@adlnet.gov"},"verb":{"id":"http://adlnet.gov/expapi/verbs/attended","display":{"en-GB":"attended","en-US":"attended","de":"besucht"}},"object":{"objectType":"Activity","id":"http://www.example.com/meetings/occurances/34534"},"stored":"2021-10-05T15:09:07.722800000Z","id":"2dba0da1-5339-4ecb-9ec9-9c551f72feeb","timestamp":"2021-10-05T15:09:07.722800000Z","authority":{"name":"Memory LRS","objectType":"Agent","account":{"name":"root","homePage":"http://localhost:8080"}},"version":"1.0.3"},{"actor":{"objectType":"Agent","name":"xAPI account","mbox":"mailto:xapi@adlnet.gov"},"verb":{"id":"http://adlnet.gov/expapi/verbs/attended","display":{"en-GB":"attended","en-US":"attended"}},"object":{"objectType":"Activity","id":"http://www.example.com/meetings/occurances/34534","definition":{"type":"http://adlnet.gov/expapi/activities/meeting","name":{"en-GB":"example meeting","en-US":"example meeting","de-DE":"Beispiel Treffen"},"description":{"en-GB":"An example meeting that happened on a specific occasion with certain people present.","en-US":"An example meeting that happened on a specific occasion with certain people present.","de-DE":"Ein Beispiel Sitzung, die auf einem bestimmten Anlass mit bestimmten Personen zufällig anwesend."},"moreInfo":"http://virtualmeeting.example.com/345256","extensions":{"http://example.com/profiles/meetings/extension/location":"X:\\meetings\\minutes\\examplemeeting.one","http://example.com/profiles/meetings/extension/reporter":{"name":"Thomas","id":"http://openid.com/342"}}}},"stored":"2021-10-05T15:09:07.740161000Z","id":"8c5233bd-809f-4c3d-ba12-2b0a7c3ab05f","timestamp":"2021-10-05T15:09:07.740161000Z","authority":{"name":"Memory LRS","objectType":"Agent","account":{"name":"root","homePage":"http://localhost:8080"}},"version":"1.0.3"},{"actor":{"objectType":"Agent","name":"xAPI account","mbox":"mailto:xapi@adlnet.gov"},"verb":{"id":"http://adlnet.gov/expapi/verbs/attended","display":{"en-GB":"attended","en-US":"attended"}},"object":{"objectType":"Activity","id":"http://www.example.com/meetings/occurances/34534","definition":{"type":"http://adlnet.gov/expapi/activities/meeting","name":{"en-GB":"example meeting","en-US":"example meeting","de-DE":"Beispiel Treffen"},"description":{"en-GB":"An example meeting that happened on a specific occasion with certain people present.","en-US":"An example meeting that happened on a specific occasion with certain people present.","zh-Hant":"所發生的與目前某些人特定場合的一個例子會議。"},"moreInfo":"http://virtualmeeting.example.com/345256","extensions":{"http://example.com/profiles/meetings/extension/location":"X:\\meetings\\minutes\\examplemeeting.one","http://example.com/profiles/meetings/extension/reporter":{"name":"Thomas","id":"http://openid.com/342"}}}},"stored":"2021-10-05T15:09:07.759598000Z","id":"bf05b2f3-c9ce-4289-b24a-4e130e274ea5","timestamp":"2021-10-05T15:09:07.759598000Z","authority":{"name":"Memory LRS","objectType":"Agent","account":{"name":"root","homePage":"http://localhost:8080"}},"version":"1.0.3"},{"actor":{"objectType":"Agent","name":"xAPI account","mbox":"mailto:xapi@adlnet.gov"},"verb":{"id":"http://adlnet.gov/expapi/verbs/attended","display":{"en-GB":"attended","en-US":"attended"}},"object":{"objectType":"Activity","id":"http://www.example.com/meetings/categories/teammeeting","definition":{"name":{"en":"Likert"},"description":{"en":"How awesome is Experience API?"},"type":"http://adlnet.gov/expapi/activities/cmi.interaction","moreInfo":"http://virtualmeeting.example.com/345256","interactionType":"likert","correctResponsesPattern":["likert_3"],"scale":[{"id":"likert_0","description":{"en-US":"It's OK","sr-Latn-RS":"U redu je"}},{"id":"likert_1","description":{"en-US":"It's Pretty Cool"}},{"id":"likert_2","description":{"en-US":"It's Damn Cool"}},{"id":"likert_3","description":{"en-US":"It's Gonna Change the World"}}],"extensions":{"http://example.com/profiles/meetings/extension/location":"X:\\meetings\\minutes\\examplemeeting.one","http://example.com/profiles/meetings/extension/reporter":{"name":"Thomas","id":"http://openid.com/342"}}}},"stored":"2021-10-05T15:09:07.780553000Z","id":"b2f015d9-50fd-4993-b65a-327054eca2cb","timestamp":"2021-10-05T15:09:07.780553000Z","authority":{"name":"Memory LRS","objectType":"Agent","account":{"name":"root","homePage":"http://localhost:8080"}},"version":"1.0.3"},{"object":{"objectType":"Activity","id":"http://www.example.com/meetings/occurances/34534"},"authority":{"name":"Memory LRS","objectType":"Agent","account":{"name":"root","homePage":"http://localhost:8080"}},"verb":{"id":"http://adlnet.gov/expapi/verbs/attended","display":{"en-GB":"attended","en-US":"attended"}},"id":"45a9a045-df00-4ac0-9745-bd4ff433f512","timestamp":"2021-10-05T15:09:07.790848000Z","context":{"registration":"ec531277-b57b-4c15-8d91-d292c5b2b8f7","revision":"rev_10_3_2","platform":"Example virtual meeting software","language":"cmn","statement":{"objectType":"StatementRef","id":"6690e6c9-3ef0-4ed3-8b37-7f3964730bee"},"extensions":{"http://example.com/profiles/meetings/contextextensions/airspeed":"600mph","http://example.com/profiles/meetings/contextextensions/pilot":{"name":"Thomas","id":"http://openid.com/342"}}},"version":"1.0.3","stored":"2021-10-05T15:09:07.790848000Z","actor":{"objectType":"Agent","name":"xAPI account","mbox":"mailto:xapi@adlnet.gov"}},{"object":{"objectType":"Activity","id":"http://www.example.com/meetings/occurances/34534"},"authority":{"name":"Memory LRS","objectType":"Agent","account":{"name":"root","homePage":"http://localhost:8080"}},"verb":{"id":"http://adlnet.gov/expapi/verbs/attended","display":{"en-GB":"attended","en-US":"attended"}},"id":"1b15b1b7-4cff-46bc-9f71-43e757816650","timestamp":"2021-10-05T15:09:07.808303000Z","version":"1.0.3","stored":"2021-10-05T15:09:07.808303000Z","attachments":[{"usageType":"http://example.com/attachment-usage/test","display":{"en-US":"A test attachment","es":"Un accesorio de prueba"},"description":{"en-US":"A test attachment (description)"},"contentType":"text/plain; charset=ascii","length":27,"sha2":"495395e777cd98da653df9615d09c0fd6bb2f8d4788394cd53c56a3bfdcd848a","fileUrl":"http://over.there.com/file.txt"}],"actor":{"objectType":"Agent","name":"xAPI account","mbox":"mailto:xapi@adlnet.gov"}},{"object":{"objectType":"Activity","id":"http://www.example.com/meetings/occurances/34534"},"authority":{"name":"Memory LRS","objectType":"Agent","account":{"name":"root","homePage":"http://localhost:8080"}},"verb":{"id":"http://adlnet.gov/expapi/verbs/attended","display":{"en-GB":"attended","en-US":"attended"}},"id":"d4d7db35-8fe3-436f-ae8a-c3deeb5f715a","timestamp":"2021-10-05T15:09:07.827297000Z","version":"1.0.3","stored":"2021-10-05T15:09:07.827297000Z","attachments":[{"usageType":"http://example.com/attachment-usage/test","display":{"en-US":"A test attachment"},"description":{"en-US":"A test attachment (description)","es-MX":"Un accesorio de prueba (descripción)"},"contentType":"text/plain; charset=ascii","length":27,"sha2":"495395e777cd98da653df9615d09c0fd6bb2f8d4788394cd53c56a3bfdcd848a","fileUrl":"http://over.there.com/file.txt"}],"actor":{"objectType":"Agent","name":"xAPI account","mbox":"mailto:xapi@adlnet.gov"}},{"actor":{"objectType":"Agent","name":"xAPI account","mbox":"mailto:xapi@adlnet.gov"},"verb":{"id":"http://adlnet.gov/expapi/verbs/attended","display":{"en-GB":"attended","en-US":"attended"}},"object":{"objectType":"SubStatement","actor":{"objectType":"Agent","name":"xAPI mbox_sha1sum","mbox_sha1sum":"cd9b00a5611f94eaa7b1661edab976068e364975"},"verb":{"id":"http://adlnet.gov/expapi/verbs/reported","display":{"en-GB":"reported","en-US":"reported","sr-Cyrl":"пријавио"}},"object":{"objectType":"Activity","id":"http://www.example.com/meetings/occurances/34534"}},"stored":"2021-10-05T15:09:07.843910000Z","id":"c6c07b67-805e-497f-adb8-898fb96c435e","timestamp":"2021-10-05T15:09:07.843910000Z","authority":{"name":"Memory LRS","objectType":"Agent","account":{"name":"root","homePage":"http://localhost:8080"}},"version":"1.0.3"},{"actor":{"objectType":"Agent","name":"xAPI account","mbox":"mailto:xapi@adlnet.gov"},"verb":{"id":"http://adlnet.gov/expapi/verbs/attended","display":{"en-GB":"attended","en-US":"attended"}},"object":{"objectType":"SubStatement","actor":{"objectType":"Agent","name":"xAPI mbox_sha1sum","mbox_sha1sum":"cd9b00a5611f94eaa7b1661edab976068e364975"},"verb":{"id":"http://adlnet.gov/expapi/verbs/reported","display":{"en-GB":"reported","en-US":"reported"}},"object":{"objectType":"Activity","id":"http://www.example.com/meetings/occurances/34534","definition":{"type":"http://adlnet.gov/expapi/activities/meeting","name":{"en-GB":"example meeting","en-US":"example meeting","zh-Hans-CN":"例如会议"},"description":{"en-GB":"An example meeting that happened on a specific occasion with certain people present.","en-US":"An example meeting that happened on a specific occasion with certain people present."},"moreInfo":"http://virtualmeeting.example.com/345256","extensions":{"http://example.com/profiles/meetings/extension/location":"X:\\meetings\\minutes\\examplemeeting.one","http://example.com/profiles/meetings/extension/reporter":{"name":"Thomas","id":"http://openid.com/342"}}}}},"stored":"2021-10-05T15:09:07.860696000Z","id":"0915448f-50b3-4136-81ca-12e67f79680d","timestamp":"2021-10-05T15:09:07.860696000Z","authority":{"name":"Memory LRS","objectType":"Agent","account":{"name":"root","homePage":"http://localhost:8080"}},"version":"1.0.3"},{"actor":{"objectType":"Agent","name":"xAPI account","mbox":"mailto:xapi@adlnet.gov"},"verb":{"id":"http://adlnet.gov/expapi/verbs/attended","display":{"en-GB":"attended","en-US":"attended"}},"object":{"objectType":"SubStatement","actor":{"objectType":"Agent","name":"xAPI mbox_sha1sum","mbox_sha1sum":"cd9b00a5611f94eaa7b1661edab976068e364975"},"verb":{"id":"http://adlnet.gov/expapi/verbs/reported","display":{"en-GB":"reported","en-US":"reported"}},"object":{"objectType":"Activity","id":"http://www.example.com/meetings/occurances/34534","definition":{"type":"http://adlnet.gov/expapi/activities/meeting","name":{"en-GB":"example meeting","en-US":"example meeting"},"description":{"en-GB":"An example meeting that happened on a specific occasion with certain people present.","en-US":"An example meeting that happened on a specific occasion with certain people present.","ase":"An example meeting that happened on a specific occasion with certain people present."},"moreInfo":"http://virtualmeeting.example.com/345256","extensions":{"http://example.com/profiles/meetings/extension/location":"X:\\meetings\\minutes\\examplemeeting.one","http://example.com/profiles/meetings/extension/reporter":{"name":"Thomas","id":"http://openid.com/342"}}}}},"stored":"2021-10-05T15:09:07.878973000Z","id":"1f2cd1f8-6ab2-4d29-82c4-728f8d55a478","timestamp":"2021-10-05T15:09:07.878973000Z","authority":{"name":"Memory LRS","objectType":"Agent","account":{"name":"root","homePage":"http://localhost:8080"}},"version":"1.0.3"},{"actor":{"objectType":"Agent","name":"xAPI account","mbox":"mailto:xapi@adlnet.gov"},"verb":{"id":"http://adlnet.gov/expapi/verbs/attended","display":{"en-GB":"attended","en-US":"attended"}},"object":{"objectType":"SubStatement","actor":{"objectType":"Agent","name":"xAPI mbox_sha1sum","mbox_sha1sum":"cd9b00a5611f94eaa7b1661edab976068e364975"},"verb":{"id":"http://adlnet.gov/expapi/verbs/reported","display":{"en-GB":"reported","en-US":"reported"}},"object":{"objectType":"Activity","id":"http://www.example.com/meetings/categories/teammeeting","definition":{"extensions":{"http://example.com/profiles/meetings/extension/location":"X:\\meetings\\minutes\\examplemeeting.one","http://example.com/profiles/meetings/extension/reporter":{"name":"Thomas","id":"http://openid.com/342"}},"moreInfo":"http://virtualmeeting.example.com/345256","interactionType":"matching","name":{"en":"Matching"},"source":[{"id":"ben","description":{"en-US":"Ben"}},{"id":"chris","description":{"en-US":"Chris"}},{"id":"troy","description":{"en-US":"Troy"}},{"id":"freddie","description":{"en-US":"Freddie"}}],"type":"http://adlnet.gov/expapi/activities/cmi.interaction","target":[{"id":"1","description":{"en-US":"Swift Kick in the Grass","ja":"草でスイフトキック"}},{"id":"2","description":{"en-US":"We got Runs"}},{"id":"3","description":{"en-US":"Duck"}},{"id":"4","description":{"en-US":"Van Delay Industries"}}],"correctResponsesPattern":["ben[.]3[,]chris[.]2[,]troy[.]4[,]freddie[.]1"],"description":{"en":"Match these people to their kickball team:"}}}},"stored":"2021-10-05T15:09:07.897565000Z","id":"c960efa7-793d-4c49-af43-07b0c76c52bb","timestamp":"2021-10-05T15:09:07.897565000Z","authority":{"name":"Memory LRS","objectType":"Agent","account":{"name":"root","homePage":"http://localhost:8080"}},"version":"1.0.3"},{"actor":{"objectType":"Agent","name":"xAPI account","mbox":"mailto:xapi@adlnet.gov"},"verb":{"id":"http://adlnet.gov/expapi/verbs/attended","display":{"en-GB":"attended","en-US":"attended"}},"object":{"objectType":"SubStatement","actor":{"objectType":"Agent","name":"xAPI account","mbox":"mailto:xapi@adlnet.gov"},"verb":{"id":"http://adlnet.gov/expapi/verbs/reported","display":{"en-GB":"reported","en-US":"reported"}},"context":{"registration":"ec531277-b57b-4c15-8d91-d292c5b2b8f7","revision":"rev_10_3_2","platform":"Example virtual meeting software","language":"fr-CA","statement":{"objectType":"StatementRef","id":"6690e6c9-3ef0-4ed3-8b37-7f3964730bee"},"extensions":{"http://example.com/profiles/meetings/contextextensions/airspeed":"600mph","http://example.com/profiles/meetings/contextextensions/pilot":{"name":"Thomas","id":"http://openid.com/342"}}},"object":{"objectType":"Activity","id":"http://www.example.com/meetings/occurances/34534"}},"stored":"2021-10-05T15:09:07.909772000Z","id":"1a78761c-483a-45bd-98fb-10d5800dc1d7","timestamp":"2021-10-05T15:09:07.909772000Z","authority":{"name":"Memory LRS","objectType":"Agent","account":{"name":"root","homePage":"http://localhost:8080"}},"version":"1.0.3"},{"object":{"objectType":"Activity","id":"http://www.example.com/meetings/occurances/34534"},"authority":{"name":"Memory LRS","objectType":"Agent","account":{"name":"root","homePage":"http://localhost:8080"}},"verb":{"id":"http://adlnet.gov/expapi/verbs/attended","display":{"en-GB":"attended","en-US":"attended"}},"id":"172c1030-efbe-44e8-af7a-8f78f9912a40","timestamp":"2021-10-05T15:09:07.927830000Z","version":"1.0.3","stored":"2021-10-05T15:09:07.927830000Z","actor":{"objectType":"Agent","name":"xAPI account","mbox":"mailto:xapi@adlnet.gov"},"result":{"score":{"scaled":0.12123434,"raw":12.125,"min":0.12123434,"max":45.45},"extensions":{"http://example.com/profiles/meetings/resultextensions/minuteslocation":"X:\\meetings\\minutes\\examplemeeting.one","http://example.com/profiles/meetings/resultextensions/reporter":{"name":"Thomas","id":"http://openid.com/342"}},"success":true,"completion":true,"response":"We agreed on some example actions.","duration":"PT1H0M0S"}},{"actor":{"objectType":"Agent","name":"xAPI mbox","mbox":"mailto:xapi@adlnet.gov"},"verb":{"id":"http://adlnet.gov/expapi/verbs/attended","display":{"en-GB":"attended","en-US":"attended"}},"object":{"objectType":"Activity","id":"http://www.example.com/meetings/occurances/34534"},"timestamp":"2013-05-18T05:32:34.804Z","stored":"2021-10-05T15:09:08.004572000Z","id":"52f547a4-2fbf-43fd-ae73-c757092f94e3","authority":{"name":"Memory LRS","objectType":"Agent","account":{"name":"root","homePage":"http://localhost:8080"}},"version":"1.0.3"},{"actor":{"objectType":"Agent","name":"xAPI mbox","mbox":"mailto:xapi@adlnet.gov"},"verb":{"id":"http://adlnet.gov/expapi/verbs/attended","display":{"en-GB":"attended","en-US":"attended"}},"object":{"objectType":"Activity","id":"http://www.example.com/meetings/occurances/34534"},"stored":"2021-10-05T15:09:08.015006000Z","id":"d93d211b-0842-49b3-8d4b-62e7070fde42","timestamp":"2021-10-05T15:09:08.015006000Z","authority":{"name":"Memory LRS","objectType":"Agent","account":{"name":"root","homePage":"http://localhost:8080"}},"version":"1.0.3"},{"actor":{"objectType":"Agent","name":"xAPI account","mbox":"mailto:xapi@adlnet.gov"},"verb":{"id":"http://adlnet.gov/expapi/verbs/attended","display":{"en-GB":"attended","en-US":"attended"}},"authority":{"name":"Memory LRS","objectType":"Agent","account":{"name":"root","homePage":"http://localhost:8080"}},"object":{"objectType":"Activity","id":"http://www.example.com/meetings/occurances/34534"},"stored":"2021-10-05T15:09:08.025678000Z","id":"44ebe99b-8144-461a-9085-a6bb8a241dcb","timestamp":"2021-10-05T15:09:08.025678000Z","version":"1.0.3"},{"object":{"objectType":"Activity","id":"http://www.example.com/meetings/occurances/34534"},"authority":{"name":"Memory LRS","objectType":"Agent","account":{"name":"root","homePage":"http://localhost:8080"}},"verb":{"id":"http://adlnet.gov/expapi/verbs/attended","display":{"en-GB":"attended","en-US":"attended"}},"id":"a2e1085a-a7ac-48ad-98f9-84862cf00fa2","timestamp":"2021-10-05T15:09:08.035765000Z","context":{"registration":"ec531277-b57b-4c15-8d91-d292c5b2b8f7","instructor":{"objectType":"Agent","name":"xAPI mbox","mbox":"mailto:xapi@adlnet.gov"},"platform":"Example virtual meeting software","language":"tlh","statement":{"objectType":"StatementRef","id":"6690e6c9-3ef0-4ed3-8b37-7f3964730bee"}},"version":"1.0.3","stored":"2021-10-05T15:09:08.035765000Z","actor":{"objectType":"Agent","name":"xAPI account","mbox":"mailto:xapi@adlnet.gov"}},{"actor":{"objectType":"Agent","name":"xAPI account","mbox":"mailto:xapi@adlnet.gov"},"verb":{"id":"http://adlnet.gov/expapi/verbs/attended","display":{"en-GB":"attended","en-US":"attended"}},"object":{"objectType":"Agent","name":"xAPI mbox","mbox":"mailto:xapi@adlnet.gov"},"stored":"2021-10-05T15:09:08.045910000Z","id":"7e44a2d4-0008-4f38-8a27-354fd1f9a50a","timestamp":"2021-10-05T15:09:08.045910000Z","authority":{"name":"Memory LRS","objectType":"Agent","account":{"name":"root","homePage":"http://localhost:8080"}},"version":"1.0.3"},{"actor":{"objectType":"Agent","name":"xAPI account","mbox":"mailto:xapi@adlnet.gov"},"verb":{"id":"http://adlnet.gov/expapi/verbs/attended","display":{"en-GB":"attended","en-US":"attended"}},"object":{"objectType":"SubStatement","actor":{"objectType":"Agent","name":"xAPI mbox","mbox":"mailto:xapi@adlnet.gov"},"verb":{"id":"http://adlnet.gov/expapi/verbs/reported","display":{"en-GB":"reported","en-US":"reported"}},"object":{"objectType":"Activity","id":"http://www.example.com/meetings/occurances/34534"}},"stored":"2021-10-05T15:09:08.056534000Z","id":"b8ab933d-9ada-4758-8fd4-b4f81380873c","timestamp":"2021-10-05T15:09:08.056534000Z","authority":{"name":"Memory LRS","objectType":"Agent","account":{"name":"root","homePage":"http://localhost:8080"}},"version":"1.0.3"},{"actor":{"objectType":"Agent","name":"xAPI account","mbox":"mailto:xapi@adlnet.gov"},"verb":{"id":"http://adlnet.gov/expapi/verbs/attended","display":{"en-GB":"attended","en-US":"attended"}},"object":{"objectType":"SubStatement","actor":{"objectType":"Agent","name":"xAPI account","mbox":"mailto:xapi@adlnet.gov"},"verb":{"id":"http://adlnet.gov/expapi/verbs/reported","display":{"en-GB":"reported","en-US":"reported"}},"context":{"registration":"ec531277-b57b-4c15-8d91-d292c5b2b8f7","instructor":{"objectType":"Agent","name":"xAPI mbox","mbox":"mailto:xapi@adlnet.gov"},"platform":"Example virtual meeting software","language":"tlh","statement":{"objectType":"StatementRef","id":"6690e6c9-3ef0-4ed3-8b37-7f3964730bee"}},"object":{"objectType":"Activity","id":"http://www.example.com/meetings/occurances/34534"}},"stored":"2021-10-05T15:09:08.067241000Z","id":"6fd62183-026a-4a2f-ad7c-d61b7ba66e46","timestamp":"2021-10-05T15:09:08.067241000Z","authority":{"name":"Memory LRS","objectType":"Agent","account":{"name":"root","homePage":"http://localhost:8080"}},"version":"1.0.3"},{"actor":{"objectType":"Group","name":"Group Identified","mbox":"mailto:xapi@adlnet.gov"},"verb":{"id":"http://adlnet.gov/expapi/verbs/attended","display":{"en-GB":"attended","en-US":"attended"}},"object":{"objectType":"Activity","id":"http://www.example.com/meetings/occurances/34534"},"stored":"2021-10-05T15:09:08.078335000Z","id":"3d0d97c7-0481-41ba-8c3b-4a73d2293e4a","timestamp":"2021-10-05T15:09:08.078335000Z","authority":{"name":"Memory LRS","objectType":"Agent","account":{"name":"root","homePage":"http://localhost:8080"}},"version":"1.0.3"},{"actor":{"objectType":"Agent","name":"xAPI account","mbox":"mailto:xapi@adlnet.gov"},"verb":{"id":"http://adlnet.gov/expapi/verbs/attended","display":{"en-GB":"attended","en-US":"attended"}},"authority":{"name":"Memory LRS","objectType":"Agent","account":{"name":"root","homePage":"http://localhost:8080"}},"object":{"objectType":"Activity","id":"http://www.example.com/meetings/occurances/34534"},"stored":"2021-10-05T15:09:08.089206000Z","id":"7858893a-325f-4596-8a32-a77c1d35e952","timestamp":"2021-10-05T15:09:08.089206000Z","version":"1.0.3"},{"object":{"objectType":"Activity","id":"http://www.example.com/meetings/occurances/34534"},"authority":{"name":"Memory LRS","objectType":"Agent","account":{"name":"root","homePage":"http://localhost:8080"}},"verb":{"id":"http://adlnet.gov/expapi/verbs/attended","display":{"en-GB":"attended","en-US":"attended"}},"id":"1cc53ae7-19f0-4904-a87f-5a43d2370b4a","timestamp":"2021-10-05T15:09:08.099863000Z","context":{"registration":"ec531277-b57b-4c15-8d91-d292c5b2b8f7","instructor":{"objectType":"Group","name":"Group Identified","mbox":"mailto:xapi@adlnet.gov"},"platform":"Example virtual meeting software","language":"tlh","statement":{"objectType":"StatementRef","id":"6690e6c9-3ef0-4ed3-8b37-7f3964730bee"}},"version":"1.0.3","stored":"2021-10-05T15:09:08.099863000Z","actor":{"objectType":"Agent","name":"xAPI account","mbox":"mailto:xapi@adlnet.gov"}},{"object":{"objectType":"Activity","id":"http://www.example.com/meetings/occurances/34534"},"authority":{"name":"Memory LRS","objectType":"Agent","account":{"name":"root","homePage":"http://localhost:8080"}},"verb":{"id":"http://adlnet.gov/expapi/verbs/attended","display":{"en-GB":"attended","en-US":"attended"}},"id":"a866e2bc-4d31-4140-994c-5b8551c985a3","timestamp":"2021-10-05T15:09:08.111168000Z","context":{"registration":"ec531277-b57b-4c15-8d91-d292c5b2b8f7","team":{"objectType":"Group","name":"Group Identified","mbox":"mailto:xapi@adlnet.gov"},"platform":"Example virtual meeting software","language":"tlh","statement":{"objectType":"StatementRef","id":"6690e6c9-3ef0-4ed3-8b37-7f3964730bee"}},"version":"1.0.3","stored":"2021-10-05T15:09:08.111168000Z","actor":{"objectType":"Agent","name":"xAPI account","mbox":"mailto:xapi@adlnet.gov"}},{"actor":{"objectType":"Agent","name":"xAPI account","mbox":"mailto:xapi@adlnet.gov"},"verb":{"id":"http://adlnet.gov/expapi/verbs/attended","display":{"en-GB":"attended","en-US":"attended"}},"object":{"objectType":"Group","name":"Group Identified","mbox":"mailto:xapi@adlnet.gov"},"stored":"2021-10-05T15:09:08.123159000Z","id":"f3d4f843-c61d-4a3f-a6ae-e75f3175bed8","timestamp":"2021-10-05T15:09:08.123159000Z","authority":{"name":"Memory LRS","objectType":"Agent","account":{"name":"root","homePage":"http://localhost:8080"}},"version":"1.0.3"},{"actor":{"objectType":"Agent","name":"xAPI account","mbox":"mailto:xapi@adlnet.gov"},"verb":{"id":"http://adlnet.gov/expapi/verbs/attended","display":{"en-GB":"attended","en-US":"attended"}},"object":{"objectType":"SubStatement","actor":{"objectType":"Group","name":"Group Identified","mbox":"mailto:xapi@adlnet.gov"},"verb":{"id":"http://adlnet.gov/expapi/verbs/reported","display":{"en-GB":"reported","en-US":"reported"}},"object":{"objectType":"Activity","id":"http://www.example.com/meetings/occurances/34534"}},"stored":"2021-10-05T15:09:08.134390000Z","id":"5c96bb1e-9cb5-4c3b-9cea-43b9063e4320","timestamp":"2021-10-05T15:09:08.134390000Z","authority":{"name":"Memory LRS","objectType":"Agent","account":{"name":"root","homePage":"http://localhost:8080"}},"version":"1.0.3"},{"actor":{"objectType":"Agent","name":"xAPI account","mbox":"mailto:xapi@adlnet.gov"},"verb":{"id":"http://adlnet.gov/expapi/verbs/attended","display":{"en-GB":"attended","en-US":"attended"}},"object":{"objectType":"SubStatement","actor":{"objectType":"Agent","name":"xAPI account","mbox":"mailto:xapi@adlnet.gov"},"verb":{"id":"http://adlnet.gov/expapi/verbs/reported","display":{"en-GB":"reported","en-US":"reported"}},"context":{"registration":"ec531277-b57b-4c15-8d91-d292c5b2b8f7","instructor":{"objectType":"Group","name":"Group Identified","mbox":"mailto:xapi@adlnet.gov"},"platform":"Example virtual meeting software","language":"tlh","statement":{"objectType":"StatementRef","id":"6690e6c9-3ef0-4ed3-8b37-7f3964730bee"}},"object":{"objectType":"Activity","id":"http://www.example.com/meetings/occurances/34534"}},"stored":"2021-10-05T15:09:08.145709000Z","id":"edec97e5-1b02-48dd-b198-a60db301f96a","timestamp":"2021-10-05T15:09:08.145709000Z","authority":{"name":"Memory LRS","objectType":"Agent","account":{"name":"root","homePage":"http://localhost:8080"}},"version":"1.0.3"},{"actor":{"objectType":"Agent","name":"xAPI account","mbox":"mailto:xapi@adlnet.gov"},"verb":{"id":"http://adlnet.gov/expapi/verbs/attended","display":{"en-GB":"attended","en-US":"attended"}},"object":{"objectType":"SubStatement","actor":{"objectType":"Agent","name":"xAPI account","mbox":"mailto:xapi@adlnet.gov"},"verb":{"id":"http://adlnet.gov/expapi/verbs/reported","display":{"en-GB":"reported","en-US":"reported"}},"context":{"registration":"ec531277-b57b-4c15-8d91-d292c5b2b8f7","team":{"objectType":"Group","name":"Group Identified","mbox":"mailto:xapi@adlnet.gov"},"platform":"Example virtual meeting software","language":"tlh","statement":{"objectType":"StatementRef","id":"6690e6c9-3ef0-4ed3-8b37-7f3964730bee"}},"object":{"objectType":"Activity","id":"http://www.example.com/meetings/occurances/34534"}},"stored":"2021-10-05T15:09:08.157732000Z","id":"e88ff166-05f1-4e72-89c8-271e7060a017","timestamp":"2021-10-05T15:09:08.157732000Z","authority":{"name":"Memory LRS","objectType":"Agent","account":{"name":"root","homePage":"http://localhost:8080"}},"version":"1.0.3"},{"actor":{"objectType":"Group","name":"Group Identified","mbox":"mailto:xapi@adlnet.gov"},"verb":{"id":"http://adlnet.gov/expapi/verbs/attended","display":{"en-GB":"attended","en-US":"attended"}},"object":{"objectType":"Activity","id":"http://www.example.com/meetings/occurances/34534"},"stored":"2021-10-05T15:09:08.170099000Z","id":"7a9eee2c-c81d-4720-9ae0-20faaf819b03","timestamp":"2021-10-05T15:09:08.170099000Z","authority":{"name":"Memory LRS","objectType":"Agent","account":{"name":"root","homePage":"http://localhost:8080"}},"version":"1.0.3"},{"actor":{"objectType":"Agent","name":"xAPI account","mbox":"mailto:xapi@adlnet.gov"},"verb":{"id":"http://adlnet.gov/expapi/verbs/attended","display":{"en-GB":"attended","en-US":"attended"}},"authority":{"name":"Memory LRS","objectType":"Agent","account":{"name":"root","homePage":"http://localhost:8080"}},"object":{"objectType":"Activity","id":"http://www.example.com/meetings/occurances/34534"},"stored":"2021-10-05T15:09:08.181675000Z","id":"3f098966-dd7b-44aa-a375-41c3a7db1fb6","timestamp":"2021-10-05T15:09:08.181675000Z","version":"1.0.3"},{"object":{"objectType":"Activity","id":"http://www.example.com/meetings/occurances/34534"},"authority":{"name":"Memory LRS","objectType":"Agent","account":{"name":"root","homePage":"http://localhost:8080"}},"verb":{"id":"http://adlnet.gov/expapi/verbs/attended","display":{"en-GB":"attended","en-US":"attended"}},"id":"b29b89ea-5da5-458d-ad77-5aa0f9592d1a","timestamp":"2021-10-05T15:09:08.193845000Z","context":{"registration":"ec531277-b57b-4c15-8d91-d292c5b2b8f7","instructor":{"objectType":"Group","name":"Group Identified","mbox":"mailto:xapi@adlnet.gov"},"platform":"Example virtual meeting software","language":"tlh","statement":{"objectType":"StatementRef","id":"6690e6c9-3ef0-4ed3-8b37-7f3964730bee"}},"version":"1.0.3","stored":"2021-10-05T15:09:08.193845000Z","actor":{"objectType":"Agent","name":"xAPI account","mbox":"mailto:xapi@adlnet.gov"}},{"object":{"objectType":"Activity","id":"http://www.example.com/meetings/occurances/34534"},"authority":{"name":"Memory LRS","objectType":"Agent","account":{"name":"root","homePage":"http://localhost:8080"}},"verb":{"id":"http://adlnet.gov/expapi/verbs/attended","display":{"en-GB":"attended","en-US":"attended"}},"id":"aedf4520-5f75-482d-a0e3-99785a21002e","timestamp":"2021-10-05T15:09:08.208343000Z","context":{"registration":"ec531277-b57b-4c15-8d91-d292c5b2b8f7","team":{"objectType":"Group","name":"Group Identified","mbox":"mailto:xapi@adlnet.gov"},"platform":"Example virtual meeting software","language":"tlh","statement":{"objectType":"StatementRef","id":"6690e6c9-3ef0-4ed3-8b37-7f3964730bee"}},"version":"1.0.3","stored":"2021-10-05T15:09:08.208343000Z","actor":{"objectType":"Agent","name":"xAPI account","mbox":"mailto:xapi@adlnet.gov"}},{"actor":{"objectType":"Agent","name":"xAPI account","mbox":"mailto:xapi@adlnet.gov"},"verb":{"id":"http://adlnet.gov/expapi/verbs/attended","display":{"en-GB":"attended","en-US":"attended"}},"object":{"objectType":"Group","name":"Group Identified","mbox":"mailto:xapi@adlnet.gov"},"stored":"2021-10-05T15:09:08.221996000Z","id":"9c08330a-91f5-4653-a276-44a16284e4a4","timestamp":"2021-10-05T15:09:08.221996000Z","authority":{"name":"Memory LRS","objectType":"Agent","account":{"name":"root","homePage":"http://localhost:8080"}},"version":"1.0.3"},{"actor":{"objectType":"Agent","name":"xAPI account","mbox":"mailto:xapi@adlnet.gov"},"verb":{"id":"http://adlnet.gov/expapi/verbs/attended","display":{"en-GB":"attended","en-US":"attended"}},"object":{"objectType":"SubStatement","actor":{"objectType":"Group","name":"Group Identified","mbox":"mailto:xapi@adlnet.gov"},"verb":{"id":"http://adlnet.gov/expapi/verbs/reported","display":{"en-GB":"reported","en-US":"reported"}},"object":{"objectType":"Activity","id":"http://www.example.com/meetings/occurances/34534"}},"stored":"2021-10-05T15:09:08.236038000Z","id":"29a9e902-a645-4b72-9246-9e256233180c","timestamp":"2021-10-05T15:09:08.236038000Z","authority":{"name":"Memory LRS","objectType":"Agent","account":{"name":"root","homePage":"http://localhost:8080"}},"version":"1.0.3"},{"actor":{"objectType":"Agent","name":"xAPI account","mbox":"mailto:xapi@adlnet.gov"},"verb":{"id":"http://adlnet.gov/expapi/verbs/attended","display":{"en-GB":"attended","en-US":"attended"}},"object":{"objectType":"SubStatement","actor":{"objectType":"Agent","name":"xAPI account","mbox":"mailto:xapi@adlnet.gov"},"verb":{"id":"http://adlnet.gov/expapi/verbs/reported","display":{"en-GB":"reported","en-US":"reported"}},"context":{"registration":"ec531277-b57b-4c15-8d91-d292c5b2b8f7","instructor":{"objectType":"Group","name":"Group Identified","mbox":"mailto:xapi@adlnet.gov"},"platform":"Example virtual meeting software","language":"tlh","statement":{"objectType":"StatementRef","id":"6690e6c9-3ef0-4ed3-8b37-7f3964730bee"}},"object":{"objectType":"Activity","id":"http://www.example.com/meetings/occurances/34534"}},"stored":"2021-10-05T15:09:08.249802000Z","id":"d6aab388-5970-418b-ad31-62873ebab04e","timestamp":"2021-10-05T15:09:08.249802000Z","authority":{"name":"Memory LRS","objectType":"Agent","account":{"name":"root","homePage":"http://localhost:8080"}},"version":"1.0.3"},{"actor":{"objectType":"Agent","name":"xAPI account","mbox":"mailto:xapi@adlnet.gov"},"verb":{"id":"http://adlnet.gov/expapi/verbs/attended","display":{"en-GB":"attended","en-US":"attended"}},"object":{"objectType":"SubStatement","actor":{"objectType":"Agent","name":"xAPI account","mbox":"mailto:xapi@adlnet.gov"},"verb":{"id":"http://adlnet.gov/expapi/verbs/reported","display":{"en-GB":"reported","en-US":"reported"}},"context":{"registration":"ec531277-b57b-4c15-8d91-d292c5b2b8f7","team":{"objectType":"Group","name":"Group Identified","mbox":"mailto:xapi@adlnet.gov"},"platform":"Example virtual meeting software","language":"tlh","statement":{"objectType":"StatementRef","id":"6690e6c9-3ef0-4ed3-8b37-7f3964730bee"}},"object":{"objectType":"Activity","id":"http://www.example.com/meetings/occurances/34534"}},"stored":"2021-10-05T15:09:08.264192000Z","id":"232ed061-7f2b-494b-8ea1-36e12b669ef7","timestamp":"2021-10-05T15:09:08.264192000Z","authority":{"name":"Memory LRS","objectType":"Agent","account":{"name":"root","homePage":"http://localhost:8080"}},"version":"1.0.3"},{"actor":{"objectType":"Group","name":"Group Anonymous","member":[{"objectType":"Agent","name":"xAPI mbox","mbox":"mailto:xapi@adlnet.gov"}]},"verb":{"id":"http://adlnet.gov/expapi/verbs/attended","display":{"en-GB":"attended","en-US":"attended"}},"object":{"objectType":"Activity","id":"http://www.example.com/meetings/occurances/34534"},"stored":"2021-10-05T15:09:08.280190000Z","id":"0962635c-9d2b-4264-9d00-6efea0f1fb88","timestamp":"2021-10-05T15:09:08.280190000Z","authority":{"name":"Memory LRS","objectType":"Agent","account":{"name":"root","homePage":"http://localhost:8080"}},"version":"1.0.3"},{"actor":{"objectType":"Agent","name":"xAPI account","mbox":"mailto:xapi@adlnet.gov"},"verb":{"id":"http://adlnet.gov/expapi/verbs/attended","display":{"en-GB":"attended","en-US":"attended"}},"authority":{"name":"Memory LRS","objectType":"Agent","account":{"name":"root","homePage":"http://localhost:8080"}},"object":{"objectType":"Activity","id":"http://www.example.com/meetings/occurances/34534"},"stored":"2021-10-05T15:09:08.293437000Z","id":"695d820a-1c9d-476e-bffc-77e5c40f59c3","timestamp":"2021-10-05T15:09:08.293437000Z","version":"1.0.3"},{"object":{"objectType":"Activity","id":"http://www.example.com/meetings/occurances/34534"},"authority":{"name":"Memory LRS","objectType":"Agent","account":{"name":"root","homePage":"http://localhost:8080"}},"verb":{"id":"http://adlnet.gov/expapi/verbs/attended","display":{"en-GB":"attended","en-US":"attended"}},"id":"492e61ef-1fc3-404b-a89d-2d8ca589dbcb","timestamp":"2021-10-05T15:09:08.306096000Z","context":{"registration":"ec531277-b57b-4c15-8d91-d292c5b2b8f7","instructor":{"objectType":"Group","name":"Group Anonymous","member":[{"objectType":"Agent","name":"xAPI mbox","mbox":"mailto:xapi@adlnet.gov"}]},"platform":"Example virtual meeting software","language":"tlh","statement":{"objectType":"StatementRef","id":"6690e6c9-3ef0-4ed3-8b37-7f3964730bee"}},"version":"1.0.3","stored":"2021-10-05T15:09:08.306096000Z","actor":{"objectType":"Agent","name":"xAPI account","mbox":"mailto:xapi@adlnet.gov"}},{"object":{"objectType":"Activity","id":"http://www.example.com/meetings/occurances/34534"},"authority":{"name":"Memory LRS","objectType":"Agent","account":{"name":"root","homePage":"http://localhost:8080"}},"verb":{"id":"http://adlnet.gov/expapi/verbs/attended","display":{"en-GB":"attended","en-US":"attended"}},"id":"4675da48-e083-4744-83de-9871d5fb61bf","timestamp":"2021-10-05T15:09:08.318732000Z","context":{"registration":"ec531277-b57b-4c15-8d91-d292c5b2b8f7","team":{"objectType":"Group","name":"Group Anonymous","member":[{"objectType":"Agent","name":"xAPI mbox","mbox":"mailto:xapi@adlnet.gov"}]},"platform":"Example virtual meeting software","language":"tlh","statement":{"objectType":"StatementRef","id":"6690e6c9-3ef0-4ed3-8b37-7f3964730bee"}},"version":"1.0.3","stored":"2021-10-05T15:09:08.318732000Z","actor":{"objectType":"Agent","name":"xAPI account","mbox":"mailto:xapi@adlnet.gov"}},{"actor":{"objectType":"Agent","name":"xAPI account","mbox":"mailto:xapi@adlnet.gov"},"verb":{"id":"http://adlnet.gov/expapi/verbs/attended","display":{"en-GB":"attended","en-US":"attended"}},"object":{"objectType":"Group","name":"Group Anonymous","member":[{"objectType":"Agent","name":"xAPI mbox","mbox":"mailto:xapi@adlnet.gov"}]},"stored":"2021-10-05T15:09:08.332051000Z","id":"fe2ffdcc-50af-4dc9-ac05-1867ebea6153","timestamp":"2021-10-05T15:09:08.332051000Z","authority":{"name":"Memory LRS","objectType":"Agent","account":{"name":"root","homePage":"http://localhost:8080"}},"version":"1.0.3"},{"actor":{"objectType":"Agent","name":"xAPI account","mbox":"mailto:xapi@adlnet.gov"},"verb":{"id":"http://adlnet.gov/expapi/verbs/attended","display":{"en-GB":"attended","en-US":"attended"}},"object":{"objectType":"SubStatement","actor":{"objectType":"Group","name":"Group Anonymous","member":[{"objectType":"Agent","name":"xAPI mbox","mbox":"mailto:xapi@adlnet.gov"}]},"verb":{"id":"http://adlnet.gov/expapi/verbs/reported","display":{"en-GB":"reported","en-US":"reported"}},"object":{"objectType":"Activity","id":"http://www.example.com/meetings/occurances/34534"}},"stored":"2021-10-05T15:09:08.344789000Z","id":"1a7d294e-1833-4beb-84b9-c520d8abdeec","timestamp":"2021-10-05T15:09:08.344789000Z","authority":{"name":"Memory LRS","objectType":"Agent","account":{"name":"root","homePage":"http://localhost:8080"}},"version":"1.0.3"},{"actor":{"objectType":"Agent","name":"xAPI account","mbox":"mailto:xapi@adlnet.gov"},"verb":{"id":"http://adlnet.gov/expapi/verbs/attended","display":{"en-GB":"attended","en-US":"attended"}},"object":{"objectType":"SubStatement","actor":{"objectType":"Agent","name":"xAPI account","mbox":"mailto:xapi@adlnet.gov"},"verb":{"id":"http://adlnet.gov/expapi/verbs/reported","display":{"en-GB":"reported","en-US":"reported"}},"context":{"registration":"ec531277-b57b-4c15-8d91-d292c5b2b8f7","instructor":{"objectType":"Group","name":"Group Anonymous","member":[{"objectType":"Agent","name":"xAPI mbox","mbox":"mailto:xapi@adlnet.gov"}]},"platform":"Example virtual meeting software","language":"tlh","statement":{"objectType":"StatementRef","id":"6690e6c9-3ef0-4ed3-8b37-7f3964730bee"}},"object":{"objectType":"Activity","id":"http://www.example.com/meetings/occurances/34534"}},"stored":"2021-10-05T15:09:08.357687000Z","id":"bdda97c5-02f4-4741-bc02-629bc2999efd","timestamp":"2021-10-05T15:09:08.357687000Z","authority":{"name":"Memory LRS","objectType":"Agent","account":{"name":"root","homePage":"http://localhost:8080"}},"version":"1.0.3"}]
--105423a5219f5a63362a375ba7a64a8f234da19c7d01e56800c3c64b26bb2fa0
Content-Type:text/plain
Content-Transfer-Encoding:binary
X-Experience-API-Hash:495395e777cd98da653df9615d09c0fd6bb2f8d4788394cd53c56a3bfdcd848a

here is a simple attachment
--105423a5219f5a63362a375ba7a64a8f234da19c7d01e56800c3c64b26bb2fa0
Content-Type:text/plain
Content-Transfer-Encoding:binary
X-Experience-API-Hash:495395e777cd98da653df9615d09c0fd6bb2f8d4788394cd53c56a3bfdcd848a

here is a simple attachment
--105423a5219f5a63362a375ba7a64a8f234da19c7d01e56800c3c64b26bb2fa0--

lrs fails to parse the JSON and throws:

ERROR c.y.lrs.pedestal.interceptor - {:msg "Unhandled LRS Error", :line 244}
clojure.lang.ExceptionInfo: java.io.IOException in Interceptor :com.yetanalytics.lrs.pedestal.interceptor.xapi.statements/validate-request-statements - Stream closed
    at io.pedestal.interceptor.chain$throwable__GT_ex_info.invokeStatic(chain.clj:35)
    at io.pedestal.interceptor.chain$throwable__GT_ex_info.invoke(chain.clj:32)
    at io.pedestal.interceptor.chain$try_f.invokeStatic(chain.clj:57)
    at io.pedestal.interceptor.chain$try_f.invoke(chain.clj:44)
    at io.pedestal.interceptor.chain$process_all_with_binding.invokeStatic(chain.clj:171)
    at io.pedestal.interceptor.chain$process_all_with_binding.invoke(chain.clj:146)
    at io.pedestal.interceptor.chain$process_all$fn__13839.invoke(chain.clj:188)
    at clojure.lang.AFn.applyToHelper(AFn.java:152)
    at clojure.lang.AFn.applyTo(AFn.java:144)
    at clojure.core$apply.invokeStatic(core.clj:665)
    at clojure.core$with_bindings_STAR_.invokeStatic(core.clj:1973)
    at clojure.core$with_bindings_STAR_.doInvoke(core.clj:1973)
    at clojure.lang.RestFn.invoke(RestFn.java:425)
    at io.pedestal.interceptor.chain$process_all.invokeStatic(chain.clj:186)
    at io.pedestal.interceptor.chain$process_all.invoke(chain.clj:182)
    at io.pedestal.interceptor.chain$enter_all.invokeStatic(chain.clj:235)
    at io.pedestal.interceptor.chain$enter_all.invoke(chain.clj:229)
    at io.pedestal.interceptor.chain$execute.invokeStatic(chain.clj:379)
    at io.pedestal.interceptor.chain$execute.invoke(chain.clj:352)
    at io.pedestal.interceptor.chain$go_async$fn__13763$state_machine__7536__auto____13768$fn__13770.invoke(chain.clj:122)
    at io.pedestal.interceptor.chain$go_async$fn__13763$state_machine__7536__auto____13768.invoke(chain.clj:120)
    at clojure.core.async.impl.ioc_macros$run_state_machine.invokeStatic(ioc_macros.clj:978)
    at clojure.core.async.impl.ioc_macros$run_state_machine.invoke(ioc_macros.clj:977)
    at clojure.core.async.impl.ioc_macros$run_state_machine_wrapped.invokeStatic(ioc_macros.clj:982)
    at clojure.core.async.impl.ioc_macros$run_state_machine_wrapped.invoke(ioc_macros.clj:980)
    at clojure.core.async.impl.ioc_macros$take_BANG_$fn__7554.invoke(ioc_macros.clj:991)
    at clojure.core.async.impl.channels.ManyToManyChannel$fn__2279$fn__2280.invoke(channels.clj:95)
    at clojure.lang.AFn.run(AFn.java:22)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at clojure.core.async.impl.concurrent$counted_thread_factory$reify__2148$fn__2149.invoke(concurrent.clj:29)
    at clojure.lang.AFn.run(AFn.java:22)
    at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.io.IOException: Stream closed

This PR addresses the issue (which only occurs on the clj lrs) by wrapping the JSON parsing for attachments in a doall

@milt milt changed the title LRS-57 Ensure statement JSON is completely consumed in multipart Ensure statement JSON is completely consumed in multipart Oct 6, 2021
@kelvinqian00
Copy link
Contributor

kelvinqian00 commented Oct 6, 2021

I would strongly advise adding a test for this fix, though I'm not going to block on it since 1) the doall fix is really small and obvious and 2) being buried deep in interceptor code, I'm not sure how easy it would be to test this.

@milt
Copy link
Member Author

milt commented Oct 6, 2021

I don't feel a test is really needed here: If you look at the docs and issues on Cheshire you'll find that it intentionally lazily parses top-level arrays (which we have in this case) unless you use parse-stream-strict, which has some other connotations so I don't want to swap out the function used.

As you point out a test would also be pretty difficult here, and would approach testing a dep which one should not do.

@milt milt merged commit 5fea5b9 into master Oct 6, 2021
@milt milt deleted the LRS-57 branch October 6, 2021 15:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants