Параметры для сервисов аналогичны стандартным параметрам html GET, т.е. это просто строки (поэтому ответ - нет, вы не можете "определить, какой тип параметров он будет принимать" - они всегда строки) . После вызова службы все параметры доступны в m_binder.
В вашем случае звоните так:
http://<ucm_host>/<ucm_instance>/idcplg?IdcService=MEGE_DOCUMENTS&merge1=docName1,contentId1,contentId2&merge2=docName2,contentId1,contentId2
запустит пользовательский сервис MEGE_DOCUMENTS с двумя параметрами — merge1 и merge2 — в m_binder. Вы можете получить их следующим образом:
String parameter1 = m_binder.getLocal("merge1");
String parameter2 = m_binder.getLocal("merge2");
после этого параметр1 будет иметь значение "docName1,contentId1,contentId2", а параметр2 - "docName2,contentId1,contentId2"
Итак, если этот сервис предполагается запускать независимо (например, из браузера/как отдельный сервис) - боюсь, вам придется перебирать параметры. Вот так, например (я знаю, что это некрасиво, но это все, что вы можете сделать в вашей ситуации):
Map<String, String> params = new HashMap<String,String>();
String prefix = "merge";
int index = 1;
boolean hasMoreParams = true;
while(hasMoreParams) {
String paramName = prefix + index;
if(m_binder.m_localData.containsKey(paramName)) {
String paramValue = m_binder.getLocal(paramName);
params.put(paramName, paramValue);
index++;
} else {
hasMoreParams = false;
}
}
В случае, если ваша служба будет использоваться другими службами/фильтрами (т.е. вызываться из кода Java только), вы можете поместить любой объект Java (например, HashMap) в локальные данные биндера перед вызовом службы, а затем использовать его:
m_binder.m_localData.put(<Object>, <Object>);
Не путайте m_localData с m_binder.putLocal(). m_localData — это переменная свойства (расширение HashTable). putLocal() — это метод, который имеет только один строковый параметр.
person
Mikhail Berastau
schedule
11.06.2012