简体   繁体   English

Liferay JSON Web服务:添加用户无法正常工作?

[英]Liferay json web service: add-user not working?

I am creating an application that connects to Liferay 6.2 portal using json web services. 我正在创建一个使用json Web服务连接到Liferay 6.2门户的应用程序。 I have configured the authentication parameters and I can then use several web services successfully (ie "usergroup/add-user-group" works fine). 我已经配置了身份验证参数,然后可以成功使用多个Web服务(即“ usergroup / add-user-group”可以正常工作)。

When trying to add a new user using "add-user" I have the next error: 尝试使用“ add-user”添加新用户时,出现下一个错误:

"exception":"No JSON web service action associated with path /user/add-user and method POST for /"

As I have understood from here , that this error is probably because some parameters are incorrect or missing, and therefore, cannot find the correct web service, but according to the json specification in http://localhost:8080/api/jsonws , 这里我了解到,该错误可能是由于某些参数不正确或缺失,因此无法找到正确的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 

For accessing to the webservice, I use these code (based in the Liferay forum ): 为了访问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);
}

That creates the Http client for connecting and managing the authentification, and: 这将创建用于连接和管理身份验证的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;
}

That call the webservice and read the response. 那将调用网络服务并读取响应。 Then, for calling, I perform two actions: connection and call the web service. 然后,对于调用,我执行两个操作:连接和调用Web服务。 Connection is simple now: 现在连接很简单:

serverConnection("localhost", "http", 8080, "api/jsonws/", "test@liferay.com", "test");

For calling the "add-user" web service: 调用“添加用户” 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;
}

That is called: 被称为:

 //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);

That basically creates all the parameters and call the web service. 基本上,这将创建所有参数并调用Web服务。 I think that all parameters match exactly the ones the web service is expecting for. 我认为所有参数都与Web服务期望的参数完全匹配。 Then the questions are: 那么问题是:

What means the error obtained? 什么意思得到的错误? May appear despite the parameters are correct? 尽管参数正确,仍可能出现? If the parameters are incorrect witch are the correct ones? 如果参数不正确,那是正确的参数吗?

Replace this: 替换为:

params.add(new BasicNameValuePair("sufixId", Integer.toString(sufixId))); params.add(new BasicNameValuePair(“ sufixId”,Integer.toString(sufixId)));

with this: 有了这个:

params.add(new BasicNameValuePair("suffixId", Integer.toString(sufixId))); params.add(new BasicNameValuePair(“ suffixId”,Integer.toString(sufixId)));

and also remove this: 并删除此:

params.add(new BasicNameValuePair("serviceContext", "{}")); params.add(new BasicNameValuePair(“ serviceContext”,“ {}”)));

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM