JSON の配列シリアライズの問題

Apache CXF のバグ (JSON の応答形式でのみ発生)

JSON 書式によるホテル リストの応答を要求する際、HotelSummaryRoomRateDetails などの配列要素に 1 つのホテル/部屋しか含まれていない場合、正しくシリアライズされません。そのような場合、配列からは、ハッシュ テーブルではなく単一のインスタンスとして返されることになり、特定のコーディング環境では問題が発生することがあります。

例 :

Apache による投稿 : http://cxf.apache.org/docs/jax-rs-data-bindings.html

JSON での配列シリアライズの問題の処理

JSON コミュニティでよく知られた問題があり、それ自体が、リスト オブジェクトに含まれるのが単一の値のみである場合に誤ったシリアライズになることを示しています。この問題を回避するには、JSONProvider の serializeAsArray 機能を有効にし、arrayKeys プロパティを使用することにより、該当する方法で処理する必要のある個々のフィールドを指定する付加的なオプションを使用します。

serializeAsArray と arrayKeys を組み合わせることにより、自然慣例シーケンスと呼ばれるものが得られます。

回避例 :

<util:list id="jsonKeys"><value>HotelSummary</value></util:list>

<bean id="jsonProvider" class="org.apache.cxf.jaxrs.provider.JSONProvider">
  <property name="serializeAsArray" value="true" />
  <property name="arrayKeys" ref="jsonKeys" />
</bean>

独自のフレームワークでは、異なるコードが必要になることがあります。ここに示すのは、例に過ぎません。

予約リクエストでの回復不能エラーまたは認証の問題

PHP や Java などの一部のテクノロジーで、お客様が正しい形式の予約リクエストを渡しても、リクエストに正しい content-type 値が欠落していると、問題が発生します。

予約リクエストの URL 構造のトラブルシューティングを実施して検証したにもかかわらず、回復不能エラーが発生する場合は、HTTP ヘッダーに以下を設定してみてください。

Content-type:application/x-www-form-urlencoded Accept:application/xml

また、&_type=json または &_type=xml を使用して設定されるのは、応答の形式のみであることに注意してください。EAN で受け付けるのは、XML コンテンツのみです。

Content Type について詳しくは、予約リクエスト の概要を参照してください。

Java 手動変換コード

過去の 8859-1 から UTF-8 への手動変換コードの例。

private static String convertEncoding(String value) {
        if (value != null) {
            try {
                return new String(value.getBytes("8859_1"), "UTF-8");

            } catch (UnsupportedEncodingException e) { 
                LOG.error("サポートされていないエンコーディング。", e);
            }
        }

        return value;
    }

Axis ユーザー

Axis のバグ

Axis の一部のバージョンには、既知のバグがあります。一部のデータ タイプを誤って変えてしまい (int の代わりに integer)、誤ったソース ファイルが生成されてしまう、などの問題があります。そのような誤りがあると、ソース ファイルのコンパイル時のエラーや、ソース ファイルが EAN Web サービスと正常にやり取りできないなどの問題が発生します。

ソース ファイルをコンパイルする前にデータ タイプを修正するか、または http://ws.apache.org/axis/ を参照することにより、バグ修正済みの Axis 最新バージョンにアップデートすることができます。

アプリケーションで予期されている通りの動作をするバージョンであれば、任意のバージョンを使用できます。サーバー アプリケーションまたはサーバーの問題についての支援はできません。

Axis 1.4 のバグ

Axis のバージョン 1.4 には既知のバグがあります。最低出現回数 =0 また nil 可能 =false を指定しても、nil 可能定義が作成されてしまいます。

この誤りのため、要求で EAN Web サービスと正常にやり取りしようとしてエラーになります。

この問題を修正する方法については、http://ws.apache.org/axis/ を参照してください。

アプリケーションで予期されている通りの動作をするバージョンであれば、任意のバージョンを使用できます。サーバー アプリケーションまたはサーバーの問題についての支援はできません。

.NET ユーザー

.NET ナレッジ ベース

デフォルトでは、.NET Framework において machine.config で最大接続 =2 になっています。このため、リモート Web 呼び出しでは、一度に 1 つのワーカー プロセスについて接続が 2 つまでに制限されてしまいます。応答時間が長かったり、Web サービス呼び出しがタイムアウトになったりする場合は、サーバーのセットアップでこれを詳しく確認してください。

パフォーマンスに関して有用な .NET のその他のリンク :

CS.NET / MS WSDL 2.0+ の問題

C# で HotelFunctions.cs ファイルを生成する際に問題が発生するという報告を、アフィリエイト様から受け取っています。これは、WSDL 2.0 以上で発生するようです。WSDL 1.1 以下では、ソース ファイル生成において付加的な要素は作成されません。

この手順では、hotelIdSpecified という独自要素や他の nil 可能要素が作成され、デフォルトでは false になります。

  • そのため、要求からホテル ID が 欠落する (または他の項目がこの指定された項目を生成する) ことになり、ホテル ID を解決できないことを示すエラーが発生します。
  • 利用状況の結果を受け取るには C# でホテル ID (または指定された要素を作成する他の項目) を送信する必要があり、そのためには、コードに手動で変更を加えてこれを true にする必要があります。
  • hotelIdSpecified (またはその他の指定された項目) は、WSDL や Web サービス要求オブジェクトの一部ではなく、この要素はドキュメンテーション中には見つかりません。
  • この問題は VB.NET や MS WSDL 1.1 では発生しません。また、HotelFunctions.vb 生成時に新しい要素は作成されません。

この問題について詳しくは、お問い合わせください。喜んでそれを含めさせていただきます。あるいは、投稿されている最新情報を修正します。

VS の場合、正規表現の置換で : 検索 : private bool {.*}FieldSpecified; 置換 : private bool \1FieldSpecified = true; {: .brush: .xml;fontsize: .100; .first-line: .1;}