title: Liferay json web service: add-user not working?
body: <p>I am creating an application that connects to Liferay 6.2 portal using json web services. 
  I have configured the authentication parameters and I can then use several web services successfully (i.e "usergroup/add-user-group" works fine).</p>
  
  <p>When trying to add a new user using "add-user" I have the next error:</p>
  
  <pre><code>"exception":"No JSON web service action associated with path /user/add-user and method POST for /"
  </code></pre>
  
  <p>As I have understood from <a href="https://issues.liferay.com/browse/LPS-29265" rel="nofollow">here</a>, 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 <code>http://localhost:8080/api/jsonws</code>, </p>
  
  <pre><code> '/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 
  </code></pre>
  
  <p>For accessing to the webservice, I use these code (based in the <a href="https://www.liferay.com/es/web/james.falkner/blog/-/blogs/9308485" rel="nofollow">Liferay forum</a>):</p>
  
  <pre><code>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);
  }
  </code></pre>
  
  <p>That creates the Http client for connecting and managing the authentification, and:</p>
  
  <pre><code>public String getHttpResponse(String webService, List&lt;NameValuePair&gt; 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;
  }
  </code></pre>
  
  <p>That call the webservice and read the response.  Then, for calling, I perform two actions: connection and call the web service. 
  Connection is simple now: </p>
  
  <pre><code>serverConnection("localhost", "http", 8080, "api/jsonws/", "test@liferay.com", "test");
  </code></pre>
  
  <p>For calling the "add-user" web service:</p>
  
  <pre><code>    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&lt;NameValuePair&gt; params = new ArrayList&lt;NameValuePair&gt;();
      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;
  }
  </code></pre>
  
  <p>That is called:</p>
  
  <pre><code> //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);
  </code></pre>
  
  <p>That basically creates all the parameters and call the web service. I think that all parameters match exactly the ones the web service is expecting for. Then the questions are:</p>
  
  <p>What means the error obtained? May appear despite the parameters are correct?
  If the parameters are incorrect witch are the correct ones?</p>