[英]Liferay json web service: add-user not working?
我正在创建一个使用json Web服务连接到Liferay 6.2门户的应用程序。 我已经配置了身份验证参数,然后可以成功使用多个Web服务(即“ usergroup / add-user-group”可以正常工作)。
尝试使用“ add-user”添加新用户时,出现下一个错误:
"exception":"No JSON web service action associated with path /user/add-user and method POST for /"
从这里我了解到,该错误可能是由于某些参数不正确或缺失,因此无法找到正确的Web服务,但是根据http://localhost:8080/api/jsonws
的json规范,
'/user/add-user' Parameters:
companyId long
autoPassword boolean
password1 java.lang.String
password2 java.lang.String
autoScreenName boolean
screenName java.lang.String
emailAddress java.lang.String
facebookId long
openId java.lang.String
locale java.util.Locale
firstName java.lang.String
middleName java.lang.String
lastName java.lang.String
prefixId int
suffixId int
male boolean
birthdayMonth int
birthdayDay int
birthdayYear int
jobTitle java.lang.String
groupIds long[]
organizationIds long[]
roleIds long[]
userGroupIds long[]
sendEmail boolean
serviceContext com.liferay.portal.service.ServiceContext
为了访问Web服务,我使用以下代码(基于Liferay论坛 ):
public void serverConnection(String address, String protocol, int port, String webservicesPath, String loginUser, String password) {
this.webservicesPath = webservicesPath;
// Host definition
targetHost = new HttpHost(address, port, protocol);
// Credentials
CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(new AuthScope(targetHost.getHostName(), targetHost.getPort()),
new UsernamePasswordCredentials(loginUser, password));
// Client
httpClient = HttpClients.custom().setDefaultCredentialsProvider(credentialsProvider).build();
// Create AuthCache instance
AuthCache authCache = new BasicAuthCache();
// Generate BASIC scheme object and add it to the local auth cache
BasicScheme basicScheme = new BasicScheme();
authCache.put(targetHost, basicScheme);
// Add AuthCache to the execution context
httpContext = new BasicHttpContext();
httpContext.setAttribute(HttpClientContext.AUTH_CACHE, authCache);
}
这将创建用于连接和管理身份验证的Http客户端,并且:
public String getHttpResponse(String webService, List<NameValuePair> params) throws ClientProtocolException,
IOException, NotConnectedToWebServiceException, AuthenticationRequired {
// Set authentication param if defined.
setAuthParam(params);
HttpPost post = new HttpPost("/" + webservicesPath + webService);
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(params, "UTF-8");
post.setEntity(entity);
HttpResponse response = getHttpClient().execute(targetHost, post, httpContext);
if (response.getEntity() != null) {
// A Simple JSON Response Read
String result = EntityUtils.toString(response.getEntity());
if (result.contains("{\"exception\":\"Authenticated access required\"}")) {
throw new AuthenticationRequired("Authenticated access required.");
}
return result;
}
return null;
}
那将调用网络服务并读取响应。 然后,对于调用,我执行两个操作:连接和调用Web服务。 现在连接很简单:
serverConnection("localhost", "http", 8080, "api/jsonws/", "test@liferay.com", "test");
调用“添加用户” Web服务:
public User addUser(Company company, String password, String screenName, String emailAddress, long facebookId,
String openId, String locale, String firstName, String middleName, String lastName, int prefixId,
int sufixId, boolean male, int birthdayDay, int birthdayMonth, int birthdayYear, String jobTitle,
long[] groupIds, long[] organizationIds, long[] roleIds, long[] userGroupIds, boolean sendEmail)
throws NotConnectedToWebServiceException, ClientProtocolException, IOException, AuthenticationRequired, WebServiceAccessError {
checkConnection();
boolean autoPassword = false;
boolean autoScreenName = false;
if (password == null || password.length() == 0) {
autoPassword = true;
}
if (screenName == null || screenName.length() == 0) {
autoScreenName = true;
}
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("companyId", Long.toString(company.getCompanyId())));
params.add(new BasicNameValuePair("autoPassword", Boolean.toString(autoPassword)));
params.add(new BasicNameValuePair("password1", password));
params.add(new BasicNameValuePair("password2", password));
params.add(new BasicNameValuePair("autoScreenName", Boolean.toString(autoScreenName)));
params.add(new BasicNameValuePair("screenName", screenName));
params.add(new BasicNameValuePair("emailAddress", emailAddress));
params.add(new BasicNameValuePair("facebookId", Long.toString(facebookId)));
params.add(new BasicNameValuePair("openId", openId));
params.add(new BasicNameValuePair("locale", locale));
params.add(new BasicNameValuePair("firstName", firstName));
params.add(new BasicNameValuePair("middleName", middleName));
params.add(new BasicNameValuePair("lastName", lastName));
params.add(new BasicNameValuePair("prefixId", Integer.toString(prefixId)));
params.add(new BasicNameValuePair("sufixId", Integer.toString(sufixId)));
params.add(new BasicNameValuePair("male", Boolean.toString(male)));
params.add(new BasicNameValuePair("birthdayMonth", Integer.toString(birthdayMonth));
params.add(new BasicNameValuePair("birthdayDay", Integer.toString(birthdayDay)));
params.add(new BasicNameValuePair("birthdayYear", Integer.toString(birthdayYear)));
params.add(new BasicNameValuePair("jobTitle", jobTitle));
params.add(new BasicNameValuePair("groupIds", Arrays.toString(groupIds)));
params.add(new BasicNameValuePair("organizationIds", Arrays.toString(organizationIds)));
params.add(new BasicNameValuePair("roleIds", Arrays.toString(roleIds)));
params.add(new BasicNameValuePair("userGroupIds", Arrays.toString(userGroupIds)));
params.add(new BasicNameValuePair("sendEmail", Boolean.toString(sendEmail)));
params.add(new BasicNameValuePair("serviceContext", "{}"));
String result = getHttpResponse("user/add-user", params);
User user = null;
if (result != null) {
// A Simple JSON Response Read
user = decodeFromJason(result, User.class);
userPool.addUser(user);
LiferayClientLogger.info(this.getClass().getName(), "User '" + user.getScreenName() + "' added.");
return user;
}
return user;
}
被称为:
//company is a Liferay company instance with not null value.
addUser(company, "testpass", "testUser", "mail@mail.com", 0, "", "es_ES", "testUser", "testUser", "testUser", 0, 0, true, 1, 1, 1900, "Tailor", null, null, null, null, false);
基本上,这将创建所有参数并调用Web服务。 我认为所有参数都与Web服务期望的参数完全匹配。 那么问题是:
什么意思得到的错误? 尽管参数正确,仍可能出现? 如果参数不正确,那是正确的参数吗?
替换为:
params.add(new BasicNameValuePair(“ sufixId”,Integer.toString(sufixId)));
有了这个:
params.add(new BasicNameValuePair(“ suffixId”,Integer.toString(sufixId)));
并删除此:
params.add(new BasicNameValuePair(“ serviceContext”,“ {}”)));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.