![](/img/trans.png)
[英]How to create an enum entity type in Olingo OData V4 java API
[英]How to create a bounded action in Olingo V4 (java)
我试过到处寻找,但无法弄清楚如何在olingo V4 java中实现有界动作。
到处都是无限制的动作教程。
我试过调整这段代码。
final CsdlAction action = new CsdlAction();
action.setName("testAction");
action.setBound(true);
当我尝试访问$ metadata API时,这会给我带来错误。
如果有人能指出我如何去做一个很好的教程那么它会很棒。
我查看了olingo的源代码并调试了他们的代码。 经过大量的研究工作,我能够在Olingo中实施有限的行动。
假设我们想要实现一个有界动作,该动作与实体类型X绑定并返回实体Y.
需要做出的改变是:
元数据文档:在扩展CsdlAbstractEdmProvider或实现CsdlEdmProvider的java类(自定义类)中,
实现getActions(...)函数
// Action Names
public static final String ACTION_EXECUTE_NAME = "Execute";
// FullyQualified Action Names
public static final FullQualifiedName ACTION_EXECUTE_FQN = new FullQualifiedName("StackOverflow", ACTION_EXECUTE_NAME);
@Override
public List<CsdlAction> getActions(FullQualifiedName actionName) throws ODataException {
if (actionName.equals(ACTION_EXECUTE_FQN)) {
// It is allowed to overload actions, so we have to provide a list
// of Actions for each action name
final List<CsdlAction> actions = new ArrayList<CsdlAction>();
// Create the Csdl Action
final CsdlAction action = new CsdlAction();
action.setName(ACTION_EXECUTE_FQN.getName());
action.setBound(true);
// Creating Parameter the first one being binding parameter
final List<CsdlParameter> parameters = new ArrayList<CsdlParameter>();
final CsdlParameter parameter = new CsdlParameter();
parameter.setName("Parameter1");
parameter.setType(X);
parameter.setNullable(true);
parameter.setCollection(false);
parameters.add(parameter);
action.setParameters(parameters);
action.setReturnType(new CsdlReturnType().setCollection(false).setType(Y));
actions.add(action);
return actions;
}
return null;
}
并且在getActions(...)方法的相同元数据提供者类cal的getSchemas(...)中。
@Override
public List<CsdlSchema> getSchemas() throws ODataException {
// create Schema
CsdlSchema schema = new CsdlSchema();
schema.setNamespace("Stackoverflow");
// add EntityTypes
List<CsdlEntityType> entityTypes = new ArrayList<CsdlEntityType>();
entityTypes.add(getEntityType(X));
entityTypes.add(getEntityType(Y));
schema.setEntityTypes(entityTypes);
// add EntityContainer
schema.setEntityContainer(getEntityContainer());
// add bounded actions
List<CsdlAction> actions = new ArrayList<CsdlAction>();
schema.setActions(actions);
actions.addAll(getActions(ACTION_EXECUTE_FQN));
List<CsdlSchema> schemas = new ArrayList<CsdlSchema>();
schemas.add(schema);
return schemas;
}
我们所做的是,创建了一个名为ACTION_EXECUTE_FQN的有界动作,其中参数作为动作的第一个参数,在我们的例子中是实体X,返回类型是实体Y.
服务实施:现在,还需要服务实施。 根据已经使用的用例,我们需要创建一个实现ActionEntityProcessor的类。
在此之后,一切都是一样的。 我希望这将有所帮助。 还有其他ActionProcessor,具体取决于操作的返回类型以及操作所限定的参数类型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.