невозможно создать пользователя Drupal через java-клиент с использованием xml rpc

У меня есть этот код для создания пользователя, вдохновленный этим.
После выполнения у меня возникает эта ошибка:

Произошла ошибка при попытке создать нового пользователя
Требуется поле имени пользователя.
Требуется поле адреса электронной почты.
Требуется поле пароля.
Исключение в потоке "main" org.apache. xmlrpc.XmlRpcException: Поле имени пользователя обязательно.
Поле адреса электронной почты обязательно.

Вот мой код:

public boolean createUser(DrupalAccount account) throws Exception
{
    Vector<Object> params = generateDefaultParams(MethodUserCreate);
    // code can be re-factored to use ArrayList<Object>
    //ArrayList<Object> params = generateDefaultParams(MethodUserCreate);
    // must also re-factor generateDefaultParams method
    // currently objects don't work for submitting parameters to the
    // user.save service. Use an array instead

    params.add(account);
    try
    {
        Object o = xmlRpcClient.execute(MethodUserCreate, params);
        if (log.isLoggable(Level.FINEST))
        {
            log.finest(MethodUserCreate + " returned " + o.toString());
            System.out.println(o.toString());
        }
    }
    catch(Exception e)
    {
        System.err.println("An error occurred when attempting to create a user");
        System.err.println(e.getMessage());
        throw e;
    }

    //TODO add code to inform if user successfully created
    return true;
}

Редактировать: я попробовал предложение MathRo, и оно все равно выдает ошибку:

Exception in thread "main" org.apache.xmlrpc.XmlRpcException:
Server error. Requested method user.create not specified.
    at org.apache.xmlrpc.client.XmlRpcStreamTransport.readResponse(XmlRpcStreamTransport.java:197)
    at org.apache.xmlrpc.client.XmlRpcStreamTransport.sendRequest(XmlRpcStreamTransport.java:156)
    at org.apache.xmlrpc.client.XmlRpcHttpTransport.sendRequest(XmlRpcHttpTransport.java:143)
    at org.apache.xmlrpc.client.XmlRpcSunHttpTransport.sendRequest(XmlRpcSunHttpTransport.java:69)
    at org.apache.xmlrpc.client.XmlRpcClientWorker.execute(XmlRpcClientWorker.java:56)
    at org.apache.xmlrpc.client.XmlRpcClient.execute(XmlRpcClient.java:167)
    at org.apache.xmlrpc.client.XmlRpcClient.execute(XmlRpcClient.java:137)
    at org.apache.xmlrpc.client.XmlRpcClient.execute(XmlRpcClient.java:126)
    at DrupalService.userCreate(DrupalService.java:284)
    at Main.main(Main.java:29)

хотя я добавил в свой класс обслуживания это:

public HashMap userCreate(String name, String mail, String pass)
        throws XmlRpcException {
    HashMap paramUser = new HashMap();
    paramUser.put("name", name);
    paramUser.put("mail",mail);
    paramUser.put("pass",pass);
    Object[] param = {paramUser};
    HashMap ret_createUser = (HashMap)xmlRpcClient.execute("user.create", param);
    return  ret_createUser;
}

и в моем основном классе это:

service.userCreate("myname", "[email protected]", "mypass");

person hassan    schedule 05.05.2011    source источник
comment
Привет, я делаю такую ​​же работу, но не совсем так, как вы. Могу ли я помочь, но прежде вы не могли бы рассказать больше о вашей конфигурации? используя Drupal 7, Services 3, Apache XMLRPC для JavaClient? Основное отличие моего кода заключается в том, что когда я захожу на свой сайт Drupal, я сохраняю идентификатор сеанса и имя сеанса, а затем пишу его в заголовке, чтобы иметь сеанс cookie. При этом у меня есть разрешение на создание узла (поскольку зарегистрированная учетная запись имеет разрешение...) PS: извините, если мой английский плохой   -  person MathRo    schedule 05.05.2011
comment
спасибо drupal-6.20 services-6.x-2.4. apache-xmlrpc-3.1.3 мой код такой же, как и в этом я только что внес некоторые изменения . Я ввожу имя пользователя, пароль, адрес электронной почты, но выдает эту ошибку An error occurred when attempting to create a new user Username field is required. E-mail address field is required. Password field is required. Exception in thread "main" org.apache.xmlrpc.XmlRpcException: Username field is required. E-mail address field is required.   -  person hassan    schedule 06.05.2011


Ответы (1)


Хорошо, я не привык к Drupal 6 и services-6, но я постараюсь помочь (я работаю с D7).

Вы пытались вызвать метод user.save, создав параметр самостоятельно (без использования объекта DruaplAccount)?

Например, для моего JavaClient (с сервисами 3.x на D7) я сделал функцию для создания пользователя:

/**
 * Create a user 
 * @param name : 
 * @param mail
 * @param pass
 * @return
 * @throws XmlRpcException
 */
public HashMap userCreate(String name, String mail, String pass)
        throws XmlRpcException {
    HashMap paramUser = new HashMap();
    paramUser.put("name", name);
    paramUser.put("mail",mail);
    paramUser.put("pass",pass);
    Object[] param = {paramUser};
    HashMap ret_createUser =
            (HashMap) this.client.execute("user.create", param );
    return  ret_createUser;
}

Я не знаю, очень ли это полезно, но я написал на всякий случай.

person MathRo    schedule 06.05.2011
comment
Это предложение относится к службам модуля 7.x-3.x-dev. В вашем случае вы используете сервисы 6.x-2.4, поэтому я посмотрел код и имя метода для версии 6.x-2.4 — user.save, а не user.create. Поэтому вам нужно заменить this.client.execute(user.create, param) на this.client.execute(user.save, param);. - person MathRo; 06.05.2011