服务的参数类似于标准的 html GET 参数,即它们只是字符串(所以答案是否定的,你不能“定义它将接受什么类型的参数”——它们总是字符串)。一旦服务被调用,所有参数都在 m_binder 中可用。
在您的情况下,调用如下:
http://<ucm_host>/<ucm_instance>/idcplg?IdcService=MEGE_DOCUMENTS&merge1=docName1,contentId1,contentId2&merge2=docName2,contentId1,contentId2
将使用 m_binder 中的 2 个参数(merge1 和 merge2)运行自定义服务 MEGE_DOCUMENTS。你可以像这样得到它们:
String parameter1 = m_binder.getLocal("merge1");
String parameter2 = m_binder.getLocal("merge2");
之后 parameter1 将具有值“ docName1,contentId1,contentId2 ”和 parameter2 -“ 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() 是一种只有一个 String 参数的方法。