2015-06-10 3 views
0

Мне нужно расширить существующий веб-сервис Liferay (созданный с помощью Service Builder) для обработки дополнительного необязательного параметра.Стройте веб-службу Liferay с необязательным параметром

С Service Builder, вы должны указать каждые параметры внутри подписи метода:

public String getList(String param1){ .. } 

Это создает get-list веб-службы принимающую параметр с именем param1. Вы должны указывать все параметры при совершении вызова, иначе вызов завершится с ошибкой. Если вам нужны дополнительные параметры, просто передайте пустое значение и обработайте отсутствующий параметр внутри кода.

Моя проблема в обратной совместимости: этот веб-сервис уже используется мобильным приложением, и я не могу изменить вызов, сделанный приложением. Дополнительный параметр должен обрабатываться без изменения сигнатуры метода.

Взглянув на BaseServiceImpl, я пытался получить параметр таким образом:

HttpServletRequest request = com.liferay.util.axis.ServletUtil.getRequest(); 
String value = ParamUtil.getString(request, "param-name"); 

Но бросает NoClassDefException относительно com.liferay.util.axis.ServletUtil.

Есть ли способ на самом деле сделать это?

ответ

1

Чтобы улучшить и сохранить обратную совместимость вашего кода, одним из способов является перегрузка метода getList(), который принимает дополнительный параметр. Вы можете достичь этого следующим образом:

  1. Переместите общий предварительно логический код getList() для getList(String param1) метода.
  2. Добавить фильтр для param1 в getList(String param1) для обработки случая, когда параметр не пуст/пуст.
  3. Звонок getList(null) от getList().

Хотя вы можете позвонить getList(String param1) непосредственно, когда вам потребуется передать дополнительный параметр.

Оригинальный метод:

public String getList(){ 
    return getList(null); 
} 

переопределен метод:

public String getList(String param1){ 

    if(param1 != null){ 
     // logic for param1 
    } 

    // rest of your general code 
} 
+0

Это решило мою точную проблему, но мне интересно: что, если мне нужно больше параметров, и они должны быть все OPTIONALS ? – dipanda

+0

Это общий подход к переходу и расширению методов. В зависимости от вашего требования вы можете добавить переопределенные методы или можете обновлять параметры, если метод не вызывается из многочисленных файлов. –

Смежные вопросы