我创建了一个枚举:
zero_number = ("0" * 3 - (random_number_length))
TypeError: unsupported operand type(s) for -: 'str' and 'int'
根据入门教程,我创建了正常的ODataProvider类。我所缺少的是一个代码的和平,以获取枚举作为属性实例化的FQDN类型:
public enum ROLECATEGORY {
LOW ("Low Risk", 0),
MEDIUM ("Medium Risk", 1),
public final String attrname;
public final int value;
ROLECATEGORY(String attrname, int value) {
this.attrname = attrname;
this.value = value;
}
public static ROLECATEGORY valueOf(int val){
switch(val){
case 0: return LOW;
case 1: return MEDIUM;
default: throw new IllegalArgumentException("blablabla");
}
}
public int toInt() { return value; }
}
答案 0 :(得分:1)
好的,我自己找到了一个简单的解决方案。但它可能不是最好的一个:
1。)我添加了一个新的静态FullQualifiedName:
public static final FullQualifiedName CET_ROLECAT = new FullQualifiedName(NAMESPACE, "RoleCategory");
2。)我创建了成员getEnumType()
public CsdlEnumType getEnumType(final FullQualifiedName enmuTypeName){
if (CET_ROLECAT.equals(enmuTypeName)) {
return new CsdlEnumType()
.setName(CET_ROLECAT.getName())
.setMembers(Arrays.asList(
new CsdlEnumMember().setName("LOW").setValue("0"),
new CsdlEnumMember().setName("MEDIUM").setValue("1")
))
.setUnderlyingType(EdmPrimitiveTypeKind.Int32.getFullQualifiedName())
;
}
return null;
}
3.)我已将1.)的FQDN添加到我的实体属性中:
// ...
CsdlProperty p = new CsdlProperty().setName("RoleCategory").setType(CET_ROLECAT));
//...
4.)最后我添加了EnumType我的架构:
public List<CsdlSchema> getSchemas() throws ODataException {
CsdlSchema schema = new CsdlSchema();
// ...
List<CsdlEnumType> enumTypes = new ArrayList<CsdlEnumType>();
enumTypes.add(getEnumType(CET_ROLECAT));
schema.setEnumTypes(enumTypes);
// ...
List<CsdlSchema> schemas = new ArrayList<CsdlSchema>();
schemas.add(schema);
return schemas;
}
仅供参考:“NAMESPACE”只是我的EdmODataProvider类中的公共静态最终String成员。
不幸的是,我只能在CsdlEnumMember的名称和值部分中添加字符串。我也不确定。(/ p>)的setUnderlyningType()是什么