gpt4 book ai didi

java - 如何在 Olingo V4 (java) 中创建有界 Action

转载 作者:搜寻专家 更新时间:2023-11-01 03:18:37 25 4
gpt4 key购买 nike

我尝试到处寻找,但无法弄清楚如何在 olingo V4 java 中实现有界操作。

处处给出无界 Action 教程

我尝试调整这段代码。

  final CsdlAction action = new CsdlAction();
action.setName("testAction");
action.setBound(true);

当我尝试访问 $metadata API 时出现错误。

如果有人能给我指点一个关于如何去做的好教程,那就太好了。

最佳答案

我查看了 olingo 的源代码并调试了他们的代码。经过大量研究工作后,我能够在 Olingo 中实现有界 Action 。

假设我们要实现一个绑定(bind)到实体类型 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;
}

并在同一元数据提供程序类的 getSchemas(...) 中调用 getActions(...) 方法。

@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 的类。

在这之后,一切都一样了。我希望这将有所帮助。根据操作的返回类型和操作绑定(bind)的参数类型,还有其他 ActionProcessor。

关于java - 如何在 Olingo V4 (java) 中创建有界 Action ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38736115/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com