是否可以使用相当于sessionAsSigner的ExtLib REST服务xe:viewJsonService(和xe:documentJsonService)?
如果我使用xe:customRestService并为doGet和doPost编写代码,我可以这样做,但只是想知道是否有办法对内置服务做同样的事情。
答案 0 :(得分:3)
从源代码中我可以看出,遗憾的是你不能:(
这些服务扩展了抽象类'RestDominoService'。并且他们使用它的loadDatabase方法来获取数据库的句柄。它使用它的'defaultSession'成员字段来做到这一点。
protected void loadDatabase(DominoParameters parameters) throws NotesException {
String dbName = parameters.getDatabaseName();
if(StringUtil.isEmpty(dbName)) {
if(defaultDatabase==null) {
throw new IllegalStateException("No default database assigned to the service"); // $NLX-RestDominoService.Nodefaultdatabaseassignedtotheser-1$
}
this.database = defaultDatabase;
this.shouldRecycleDatabase = false;
return;
}
if(defaultSession==null) {
throw new IllegalStateException("No default session assigned to the service"); // $NLX-RestDominoService.Nodefaultsessionassignedtotheserv-1$
}
this.database = DominoUtils.openDatabaseByName(defaultSession,dbName);
this.shouldRecycleDatabase = true;
}
创建RestEngine时会设置此“defaultSession”,并使用DominoUtils.getCurrentSession()。这相当于xpages中的'session'变量,不幸的是不是sessionAsSigner。 似乎没有任何关系可以在RestEngine创建和生成响应的renderService方法之间进行更改。
private class Engine extends RestViewJsonService {
Engine(HttpServletRequest httpRequest, HttpServletResponse httpResponse, Parameters params) {
super(httpRequest,httpResponse,params);
setDefaultSession(DominoUtils.getCurrentSession());
setDefaultDatabase(DominoUtils.getCurrentDatabase());
}
如果你真的需要这样做,肯定可以修改它以允许它由属性控制,但这意味着你将构建自己的扩展库版本。
可以将'sessionAsSigner'属性添加到com.ibm.xsp.extlib.component.rest.DominoService,以及在相应的xsp-config文件中将其定义为属性。
创建休息引擎
时可以访问此属性 private class Engine extends RestViewJsonService {
Engine(HttpServletRequest httpRequest, HttpServletResponse httpResponse, Parameters params) {
super(httpRequest,httpResponse,params);
if (isSessionAsSigner()) {
setDefaultSession(ExtLibUtil.getCurrentSessionAsSigner());
} else {
setDefaultSession(DominoUtils.getCurrentSession());
}
setDefaultDatabase(DominoUtils.getCurrentDatabase());
}
我没有测试过,但是我的大脑说它会起作用,但是星期五晚上11点。
如果您不习惯于编写自己的扩展库版本,那么现在可能更容易坚持使用customRestService。