1

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。この問題を解決する方法はありますか?

4

1 に答える 1

1

あなたがまだこの問題に直面しているかどうかはわかりません。しかし、私の答えは誰かにとって役立つかもしれません。OASIS OData ドキュメントによると:

列挙型は名前付きプリミティブ型であり、その値は基になる整数値を持つ名前付き定数です。

String の基になる型を持つ Olingo で列挙型を作成することはできません。私の提案は、コードの一部をスキップ.setValue("")して、デフォルト値 (0、1、2 など) に依存することです。心配しないでください。名前または値のいずれかを指定することで、リクエストで列挙値を操作できます。だからただ名前に頼ってください。

valueOfString(name, null, null, null, null, null, Long)コードでは、メソッド fromを使用できますEdmEnumType

于 2016-05-31T11:23:29.650 に答える