JSON InterchangeフォーマットからRESTスキーマへの変換に関する必知事項

RESTスキーマは、ネイティブ・フォーマット・ビルダー・ウィザードの「タイプの選択」ダイアログで、JSON Interchangeフォーマット・サンプルから作成することを選択できます(図37-13を参照)。スキーマの生成中、このウィザードは次のことを試行します。

  • ネームスペース情報のないRESTスキーマを生成します。

  • ネームスペース情報のないJSON Interchangeフォーマット・サンプルを消費し、適切なネームスペースを持つXMLを生成します。

ノート:

JVMプロパティsoa.rest.nillable.supportを使用して、SOA RESTサービスのnillableサポートを有効にします。値:
  • false (デフォルト): レスポンス内の空の文字列に対して、常にnullを返します。たとえば、ペイロードにデータ"mileage" : ""が含まれる場合、レスポンスは"mileage" : nullを返します
  • true: ""nullを区別します。たとえば、ペイロードにデータ"mileage" : ""が腹案れる場合、レスポンスは"mileage" : ""を返します

soa.rest.nillable.supporttrueに設定するには:

  • NXSD要素に属性nillable="true"を含めます
  • XML要素に属性xsi:nil="true"を含めます

例:

soa.rest.nillable.supportedtrueの場合、mileage要素は、入力に指定された内容(""またはnull)に合うように""またはnullを返します。

{
  "sampleData" : {
    "dateTime" : "2022-04-07 10:58:30",
    "mileage" : ""
  },
  "userInfo" : {
    "user" : "Davidson",
    "ctryCode" : "IN"
  }
}

soa.rest.nillable.supportedfalse (デフォルト)の場合、mileage要素は常にnullを返します。入力に指定された内容(""またはnull)には関係ありません。

{
  "sampleData" : {
    "dateTime" : "2022-04-07 10:58:30",
    "mileage" : null
  },
  "userInfo" : {
    "user" : "Davidson",
    "ctryCode" : "IN"
  }
}

変換を処理できない場合もあります。

  • 連続したグループ要素の下にある、名前が重複した兄弟要素は変換できません。これはJSONではキーが重複したオブジェクトに変換されてしまい、こうしたオブジェクトは無効であるためです。

  • ネームスペース情報が保持され、次の例に示すJSON Interchangeフォーマット・サンプルの変換が可能になります。これは、基礎となるスキーマに複数のネームスペースからの要素および属性があるためです。

    <schema xmlns:us="http://xmlns.oracle.com/addresses/us"
    xmlns:india="http://xmlns.oracle.com/addresses/india"
    targetNamespace="http://xmlns.oracle.com"
    xmlns="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
       <import ...>
       <element name="Person">
           <complexType>
               <choice>
                    <element ref="us:Address"/>
                    <element ref="india:Address"/>
               </choice>
           </complexType>
       </element>
    </schema>
    <schema targetNamespace="http://xmlns.oracle.com/addresses/us"
    xmlns="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
       <element name="Address">
           <complexType>
               <sequence>
                    <element name="Street" type="xsd:string"/>
                    <element name="City" type="xsd:string"/>
                    <element name="State" type="xsd:string"/>
                    <element name="ZipCode" type="xsd:integer" minOccurs="0"/>
               </sequence>
           </complexType>
       </element>
    </schema>
    <schema targetNamespace="http://xmlns.oracle.com/addresses/india"
    xmlns="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
       <element name="Address">
           <complexType>
               <sequence>
                    <element name="Street" type="xsd:string"/>
                    <element name="City" type="xsd:string"/>
                    <element name="District" type="xsd:string" minOccurs="0"/>
                    <element name="State" type="xsd:string"/>
                    <element name="PinCode" type="xsd:integer" minOccurs="0"/>
               </sequence>
           </complexType>
       </element>
    </schema>