OSLC: How to remove subscribers with OSLC?
I was able to update/modify a subscriber using PUT method but can not figure out how to remove a users.
I could remove a user by removing the userID if there is more than 1 users in subscription but can not remove a last subscribed user.
When I remove a user ID like below, I will get "500 Internal Server Error" with "Invalid Contributor User Id. Contributor userId must not be empty" message.
What is a proper way to specify no subscription user for a work Item update?
DATA for PUT:
<rtc_cm:subscribers rdf:resource="https://win-zdjhomb8uyp:9443/jts/users/ "/>
↓
Response
Status: 500 Internal Server Error
Data:
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:oslc="http://open-services.net/ns/core#" >
<rdf:Description rdf:nodeID="A0">
<oslc:message>Invalid Contributor User Id. Contributor userId must not be empty</oslc:message>
<oslc:statusCode>500</oslc:statusCode>
<rdf:type rdf:resource="http://open-services.net/ns/core#Error"/>
</rdf:Description>
</rdf:RDF>
============ To modify subscriber (working OK with REST client) ==================
URL
https://win-zdjhomb8uyp:9443/ccm/resource/itemName/com.ibm.team.workitem.WorkItem/1
Method - PUT
Headers
Content-Type: application/rdf+xml
OSLC-Core-Version: 2.0
Accept: application/rdf+xml
Data
<rdf:RDF
xmlns:oslc_pl="http://open-services.net/ns/pl#"
xmlns:rtc_ext="http://jazz.net/xmlns/prod/jazz/rtc/ext/1.0/"
xmlns:rtc_cm="http://jazz.net/xmlns/prod/jazz/rtc/cm/1.0/"
xmlns:dcterms="http://purl.org/dc/terms/"
xmlns:oslc_cmx="http://open-services.net/ns/cm-x#"
xmlns:acp="http://jazz.net/ns/acp#"
xmlns:oslc_cm="http://open-services.net/ns/cm#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:oslc="http://open-services.net/ns/core#">
<oslc_cm:ChangeRequest rdf:about="https://win-zdjhomb8uyp:9443/ccm/resource/itemName/com.ibm.team.workitem.WorkItem/1">
<rtc_cm:subscribers rdf:resource="https://win-zdjhomb8uyp:9443/jts/users/user1"/>
</oslc_cm:ChangeRequest>
</rdf:RDF>
=====================================
I could remove a user by removing the userID if there is more than 1 users in subscription but can not remove a last subscribed user.
When I remove a user ID like below, I will get "500 Internal Server Error" with "Invalid Contributor User Id. Contributor userId must not be empty" message.
What is a proper way to specify no subscription user for a work Item update?
DATA for PUT:
<rtc_cm:subscribers rdf:resource="https://win-zdjhomb8uyp:9443/jts/users/ "/>
↓
Response
Status: 500 Internal Server Error
Data:
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:oslc="http://open-services.net/ns/core#" >
<rdf:Description rdf:nodeID="A0">
<oslc:message>Invalid Contributor User Id. Contributor userId must not be empty</oslc:message>
<oslc:statusCode>500</oslc:statusCode>
<rdf:type rdf:resource="http://open-services.net/ns/core#Error"/>
</rdf:Description>
</rdf:RDF>
============ To modify subscriber (working OK with REST client) ==================
URL
https://win-zdjhomb8uyp:9443/ccm/resource/itemName/com.ibm.team.workitem.WorkItem/1
Method - PUT
Headers
Content-Type: application/rdf+xml
OSLC-Core-Version: 2.0
Accept: application/rdf+xml
Data
<rdf:RDF
xmlns:oslc_pl="http://open-services.net/ns/pl#"
xmlns:rtc_ext="http://jazz.net/xmlns/prod/jazz/rtc/ext/1.0/"
xmlns:rtc_cm="http://jazz.net/xmlns/prod/jazz/rtc/cm/1.0/"
xmlns:dcterms="http://purl.org/dc/terms/"
xmlns:oslc_cmx="http://open-services.net/ns/cm-x#"
xmlns:acp="http://jazz.net/ns/acp#"
xmlns:oslc_cm="http://open-services.net/ns/cm#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:oslc="http://open-services.net/ns/core#">
<oslc_cm:ChangeRequest rdf:about="https://win-zdjhomb8uyp:9443/ccm/resource/itemName/com.ibm.team.workitem.WorkItem/1">
<rtc_cm:subscribers rdf:resource="https://win-zdjhomb8uyp:9443/jts/users/user1"/>
</oslc_cm:ChangeRequest>
</rdf:RDF>
=====================================
Accepted answer
Individual properties of a change request can be modified with the "?oslc_cm.properties" URL parameter. In case of changing subscribers you would do the following:
GET https://myhost:9443/jazz/resource/itemName/com.ibm.team.workitem.WorkItem/1?oslc_cm.properties=rtc_cm:subscribers
OSLC-Core-Version: 2.0
Accept: application/rdf+xml
RTC returns the following RDF content:
<rdf:RDFRemove all the subscribers from the RDF you want to unsubscribe and PUT the resource back to the server. In case you want to remove all subscribers your resource would look like:
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:oslc_cm="http://open-services.net/ns/cm#"
xmlns:rtc_cm="http://jazz.net/xmlns/prod/jazz/rtc/cm/1.0/" >
<rdf:Description rdf:about="https://myhost:9443/jazz/resource/itemName/com.ibm.team.workitem.WorkItem/1?oslc_cm.properties=rtc_cm:subscribers">
<rdf:type rdf:resource="http://open-services.net/ns/cm#ChangeRequest"/>
<rtc_cm:subscribers rdf:resource="https://myhost:9443/jazz/users/volt"/>
<rtc_cm:subscribers rdf:resource="https://myhost:9443/jazz/users/ADMIN"/>
</rdf:Description>
</rdf:RDF>
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:oslc_cm="http://open-services.net/ns/cm#"
xmlns:rtc_cm="http://jazz.net/xmlns/prod/jazz/rtc/cm/1.0/" >
<rdf:Description rdf:about="https://myhost:9443/jazz/resource/itemName/com.ibm.team.workitem.WorkItem/1?oslc_cm.properties=rtc_cm:subscribers">
<rdf:type rdf:resource="http://open-services.net/ns/cm#ChangeRequest"/>
</rdf:Description>
</rdf:RDF>
PUT https://myhost:9443/jazz/resource/itemName/com.ibm.team.workitem.WorkItem/1?oslc_cm.properties=rtc_cm:subscribers
OSLC-Core-Version: 2.0
content-type: application/rdf+xml
HTH,
Jan.
2 other answers
Hi there, I'm not sure what happened to your RDF content but mine looks a little different. When I do a GET call with the following parameters:
from the RDF and use the following REST call, the user ADMIN will no longer be subscribed:
GET https://myhost:9443/jazz/resource/itemName/com.ibm.team.workitem.WorkItem/1
OSLC-Core-Version: 2.0
Accept: application/rdf+xml
Accept: application/rdf+xml
RTC returns the following RDF content:
<?xml version="1.0"?>
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:acp="http://jazz.net/ns/acp#"
xmlns:oslc="http://open-services.net/ns/core#"
xmlns:oslc_cmx="http://open-services.net/ns/cm-x#"
xmlns:dcterms="http://purl.org/dc/terms/"
xmlns:oslc_cm="http://open-services.net/ns/cm#"
xmlns:oslc_pl="http://open-services.net/ns/pl#"
xmlns:rtc_cm="http://jazz.net/xmlns/prod/jazz/rtc/cm/1.0/"
xmlns:rtc_ext="http://jazz.net/xmlns/prod/jazz/rtc/ext/1.0/">
<rdf:Description rdf:about="https://myhost:9443/jazz/resource/itemName/com.ibm.team.workitem.WorkItem/1">
<acp:accessControl rdf:resource="https://myhost:9443/jazz/oslc/access-control/_39WjkEqcEeKMdtrex543ww"/>
<dcterms:contributor rdf:resource="https://myhost:9443/jazz/users/unassigned"/>
<dcterms:created rdf:datatype="http://www.w3.org/2001/XMLSchema#dateTime">2012-06-23T12:00:53.026Z</dcterms:created>
<dcterms:creator rdf:resource="https://myhost:9443/jazz/users/ADMIN"/>
<dcterms:description rdf:parseType="Literal"/>
<dcterms:identifier rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1</dcterms:identifier>
<dcterms:modified rdf:datatype="http://www.w3.org/2001/XMLSchema#dateTime">2013-01-09T18:22:57.086Z</dcterms:modified>
<dcterms:subject rdf:datatype="http://www.w3.org/2001/XMLSchema#string"/>
<dcterms:title rdf:parseType="Literal">work item on this plan</dcterms:title>
<dcterms:type rdf:datatype="http://www.w3.org/2001/XMLSchema#string">Task</dcterms:type>
<oslc:discussedBy rdf:resource="https://myhost:9443/jazz/oslc/workitems/_53swYEqcEeKMdtrex543ww/rtc_cm:comments"/>
<oslc:instanceShape rdf:resource="https://myhost:9443/jazz/oslc/shapes/workitems/_53swYEqcEeKMdtrex543ww"/>
<oslc:serviceProvider rdf:resource="https://myhost:9443/jazz/oslc/contexts/_39WjkEqcEeKMdtrex543ww/workitems/services"/>
<oslc:shortTitle rdf:parseType="Literal">Task 1</oslc:shortTitle>
<oslc_cm:approved rdf:datatype="http://www.w3.org/2001/XMLSchema#boolean">false</oslc_cm:approved>
<oslc_cm:closed rdf:datatype="http://www.w3.org/2001/XMLSchema#boolean">false</oslc_cm:closed>
<oslc_cm:fixed rdf:datatype="http://www.w3.org/2001/XMLSchema#boolean">false</oslc_cm:fixed>
<oslc_cm:inprogress rdf:datatype="http://www.w3.org/2001/XMLSchema#boolean">false</oslc_cm:inprogress>
<oslc_cm:reviewed rdf:datatype="http://www.w3.org/2001/XMLSchema#boolean">false</oslc_cm:reviewed>
<oslc_cm:status rdf:datatype="http://www.w3.org/2001/XMLSchema#string">New</oslc_cm:status>
<oslc_cm:verified rdf:datatype="http://www.w3.org/2001/XMLSchema#boolean">false</oslc_cm:verified>
<oslc_cmx:priority rdf:resource="https://myhost:9443/jazz/oslc/enumerations/_39WjkEqcEeKMdtrex543ww/priority/priority.literal.l01"/>
<oslc_cmx:project rdf:resource="https://myhost:9443/jazz/oslc/projectareas/_39WjkEqcEeKMdtrex543ww"/>
<oslc_cmx:severity rdf:resource="https://myhost:9443/jazz/oslc/enumerations/_39WjkEqcEeKMdtrex543ww/severity/severity.literal.l3"/>
<oslc_pl:schedule rdf:resource="https://myhost:9443/jazz/oslc/workitems/_53swYEqcEeKMdtrex543ww/schedule"/>
<rdf:type rdf:resource="http://open-services.net/ns/cm#ChangeRequest"/>
<rtc_cm:correctedEstimate rdf:datatype="http://www.w3.org/2001/XMLSchema#long"/>
<rtc_cm:estimate rdf:datatype="http://www.w3.org/2001/XMLSchema#long"/>
<rtc_cm:filedAgainst rdf:resource="https://myhost:9443/jazz/resource/itemOid/com.ibm.team.workitem.Category/_5i_EoEqcEeKMdtrex543ww"/>
<rtc_cm:modifiedBy rdf:resource="https://myhost:9443/jazz/users/ADMIN"/>
<rtc_cm:plannedFor rdf:resource="https://myhost:9443/jazz/oslc/iterations/_4B0M0UqcEeKwhuBpkPFD3A"/>
<rtc_cm:progressTracking rdf:resource="https://myhost:9443/jazz/oslc/workitems/_53swYEqcEeKMdtrex543ww/progressTracking"/>
<rtc_cm:repository rdf:resource="https://myhost:9443/jazz/oslc/repository"/>
<rtc_cm:resolvedBy rdf:resource="https://myhost:9443/jazz/users/unassigned"/>
<rtc_cm:state rdf:resource="https://myhost:9443/jazz/oslc/workflows/_39WjkEqcEeKMdtrex543ww/states/com.ibm.team.workitem.taskWorkflow/1"/>
<rtc_cm:subscribers rdf:resource="https://myhost:9443/jazz/users/ADMIN"/>
<rtc_cm:subscribers rdf:resource="https://myhost:9443/jazz/users/volt"/>
<rtc_cm:teamArea rdf:resource="https://myhost:9443/jazz/oslc/teamareas/_5TM8MEqcEeKMdtrex543ww"/>
<rtc_cm:timeSheet rdf:resource="https://myhost:9443/jazz/oslc/workitems/_53swYEqcEeKMdtrex543ww/rtc_cm:timeSheet"/>
<rtc_cm:timeSpent rdf:datatype="http://www.w3.org/2001/XMLSchema#long"/>
<rtc_cm:type rdf:resource="https://myhost:9443/jazz/oslc/types/_39WjkEqcEeKMdtrex543ww/task"/>
<rtc_ext:archived rdf:datatype="http://www.w3.org/2001/XMLSchema#boolean">false</rtc_ext:archived>
<rtc_ext:contextId>_39WjkEqcEeKMdtrex543ww</rtc_ext:contextId>
</rdf:Description>
</rdf:RDF>
PUTting the same resource back to the server, just with a removed subscriber entry will remove it from the work item. For example, when you remove the entry
<rtc_cm:subscribers rdf:resource="https://myhost:9443/jazz/users/ADMIN"/>
PUT https://myhost:9443/jazz/resource/itemName/com.ibm.team.workitem.WorkItem/1
OSLC-Core-Version: 2.0
content-type: application/rdf+xml
content-type: application/rdf+xml
HTH,
Jan.
Comments
Jan, does this same approach work if removing the last subscriber? I think that was the main concern of the poster is that the last subscriber couldn't be removed this way. If you repeat your example, removing the other subscriber entry (so now there are no rtc_cm:subscriber entries), would you get the error or just no longer have any subscribers?
I've asked the developer who has worked in this area most recently to have a look. Until he gets to it, perhaps the discussion in these work items may help:
https://jazz.net/jazz/web/projects/Rational%20Team%20Concert#action=com.ibm.team.workitem.viewWorkItem&id=134520
https://jazz.net/jazz/web/projects/Rational%20Team%20Concert#action=com.ibm.team.workitem.viewWorkItem&id=210630
https://jazz.net/jazz/web/projects/Rational%20Team%20Concert#action=com.ibm.team.workitem.viewWorkItem&id=193651
Some of the related changes went into RTC 4.x. Since you have parts of this working, I'm assuming you are using the OSLC v2 and at least RTC 4.0.
Comments
Mike Shkolnik
Aug 21 '13, 6:40 p.m.is it possible to unsubscribe "{currentUser}" from a work item in a single HTTP command?