CsdlEnumType
データ作成中に Apaches Olingo V4 Java APIを使用する方法がわかりません。
可能な限り少ないコードでこれまでに行ったことは次のとおりです。
1) 私のEdmODataProvider.java
クラスでは、エンティティ タイプを作成しFQDN
、列挙型エンティティをプロパティに追加しました。CsdlEnumType
さらに、スキーマ プロバイダー クラスでをインスタンス化しました。部分で数字のみを使用している場合setValue()
、期待される結果が得られるため、これはうまくいくと思います。:
public CsdlEntityType getEntityType(FullQualifiedName entityTypeName) throws ODataException {
CsdlEntityType entityType = new CsdlEntityType();
List<CsdlProperty> properties = new ArrayList<CsdlProperty>();
properties.add(new CsdlProperty().setName("Attributes").setType(new FullQualifiedName("Namespace", "Attributes")));
entityType.setName("Langs").setProperties(properties);
return entityType;
}
public List<CsdlSchema> getSchemas() throws ODataException {
CsdlSchema schema = new CsdlSchema();
schema.setNamespace("Namespace");
List<CsdlEnumType> enumTypes = new ArrayList<CsdlEnumType>();
enumTypes.add(
new CsdlEnumType()
.setName("LangAttributes")
.setMembers(Arrays.asList(
// if I use setValue("0") ... setValue("1") everything works fine
new CsdlEnumMember().setName("DISPNAME").setValue("DISPNAME"),
new CsdlEnumMember().setName("DESC").setValue("DESC")
))
)
// ... add entity type and set the other stuff
}
2) 私のデータ プロバイダー クラスでは、次のようなエンティティを作成しています。
Entity e = new Entity();
// again: it would work if I would use 0 instead of "DISPNAME" here
e.addProperty(new Property(null, "LangAttributes", ValueType.Enum, "DISPNAME"));
エンティティを呼び出そうとすると、最終的にエラーが発生します:
<error xmlns="http://docs.oasis-open.org/odata/ns/metadata">
<code>400</code>
<message>The value 'DISPNAME' is not valid for property 'LangAttributes'.</message>
</error>
私の$metadata
内容:
<EnumType Name="Attribute" IsFlags="false" UnderlyingType="Edm.Int32">
<Member Name="DISPNAME" Value="DISPNAME"/>
<Member Name="DESC" Value="DESC"/>
</EnumType>
....
<EntityType Name="Attributes">
<Property Name="LangAttributes" Type="Namespace.Attribute"/>
</EntityType>
問題は、属性を文字列として追加しているパート 2) にあると思いますDISPNAME
。この問題を解決する方法はありますか?