服务的参数类似于标准 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)放入 binder 的本地数据中,然后使用它:
m_binder.m_localData.put(<Object>, <Object>);
不要将 m_localData 与 m_binder.putLocal() 混淆。
m_localData 是一个属性变量(HashTable 的扩展)。
putLocal() 是一种只有一个字符串参数的方法。