02-27-2014 10:50 AM
Bonjour
J'ai pu créer un nouvel utilisateur en utilisant CURL:
set header="Content-Type: application/json"
set auth="Administrator:Administrator"
set u="xxx"
set url="http://localhost:8081/nuxeo/api/v1/user"
set data="{ \"entity-type\": \"user\", \"id\":\"%u%\", \"properties\":{\"username\":\"%u%\", \"email\":\"%u%@a.b\", \"lastName\":\"%u%\", \"firstName\":\"x\", \"password\":\"%x%\" } }"
curl --trace-ascii log.txt -X POST -H %header% -u %auth% -d %data% %url%
set url="http://localhost:8081/nuxeo/api/v1/user/%u%"
curl --trace-ascii log.txt -X POST -H %header% -u %auth% %url%
et voici le résultat de la dernière commande qui confirme la création:
{"entity-type":"user","id":"xxx","properties":{"lastName":"xxx","username":"xxx","email":"[email protected]","company":null,"first
Name":"x","password":"","groups":[]},"extendedGroups":[{"name":"members","label":"Members group","url":"group/members"}]
,"isAdministrator":false,"isAnonymous":false}
Maintenant j'essaie de reproduire la même séquence en Python:
import urllib
import urllib2, base64, time, os
import logging as log
import json
import mimetypes, random
if __name__ == '__main__':
url="http://localhost:8081/nuxeo/api/v1/user"
login = "Administrator"
passwd = "Administrator"
auth = 'Basic %s' % base64.b64encode(login + ":" + passwd).strip()
cookie_processor = urllib2.HTTPCookieProcessor()
opener = urllib2.build_opener(cookie_processor)
headers = {
"Content-Type": "application/json",
"Authorization": auth,
"X-NXDocumentProperties": "*",
}
d = {}
user = u'xxx'
d['entity-type'] = 'user'
d['id'] = user
d['properties'] = {}
d['properties']['username'] = user
d['properties']['email'] = '%[email protected]' % user
d['properties']['lastName'] = user
d['properties']['firstName'] = 'x'
d['properties']['password'] = ''
data = json.dumps(d)
data = data.strip ()
req = urllib2.Request (url, headers=headers, data=data)
resp = opener.open(req)
print resp.read ()
malheureusement, ceci produit une erreur:
Caused by: java.lang.NullPointerException
at org.nuxeo.ecm.restapi.jaxrs.io.usermanager.NuxeoPrincipalReader.readProperties(NuxeoPrincipalReader.java:179)
at org.nuxeo.ecm.restapi.jaxrs.io.usermanager.NuxeoPrincipalReader.readJson(NuxeoPrincipalReader.java:148)
at org.nuxeo.ecm.restapi.jaxrs.io.usermanager.NuxeoPrincipalReader.readRequest(NuxeoPrincipalReader.java:100)
at org.nuxeo.ecm.restapi.jaxrs.io.usermanager.NuxeoPrincipalReader.readFrom(NuxeoPrincipalReader.java:84)
at org.nuxeo.ecm.restapi.jaxrs.io.usermanager.NuxeoPrincipalReader.readFrom(NuxeoPrincipalReader.java:57)
at com.sun.jersey.spi.container.ContainerRequest.getEntity(ContainerRequest.java:488)
at com.sun.jersey.server.impl.model.method.dispatch.EntityParamDispatchProvider$EntityInjectable.getValue(Entity
ParamDispatchProvider.java:123)
qui montre que la lecture des properties en JSON est en erreur.
Qui pourrait m'aider?
Merci d'avance Christian
02-28-2014 10:54 AM
...
OK J'ai trouvé le problème:
Pour construire les data en utilisant json.dumps, on passe un dictionnaire des propriétés. Mais on DOIT ordonner le dictionnaire, sinon, l'ordre est incorrect. En particulier, la propriété "entity-type" doit être en tête
donc on doit utiliser l'option sort_keys de la fonction dumps ainsi:
data = json.dumps(d, sort_keys=True)
J'ai proposé un PullRequest pour améliorer le package nuxeolib-py
https://github.com/nuxeo/nuxeolib-py
Cordialement Christian
Attention: Blogs & Forums are in READ-ONLY mode from Oct 9-19 as we transition to our new platform. Learn more.
Find what you came for
We want to make your experience in Hyland Connect as valuable as possible, so we put together some helpful links.