Cosminexus V9 アプリケーションサーバ Webサービス開発ガイド

[目次][用語][索引][前へ][次へ]

17.1.3 戻り値

リソースメソッドの戻り値に使用できるJava型とMIMEメディアタイプの組み合わせを次の表に示します。戻り値はHTTPレスポンスのエンティティボディに変換されます。なお,POJOにJAXB仕様のアノテーションは使用しないでください。使用した場合,説明とは異なる動作になるおそれがあります。

表17-6 リソースメソッドの戻り値に使用できるJavaの型とMIMEメディアタイプの組み合わせ

項番 Javaの型 charset※1 MIMEメディアタイプ
1 byte[] × 任意(*/*)
2 java.lang.String 任意(*/*)
3 java.io.InputStream × 任意(*/*)
4 java.io.Reader 任意(*/*)
5 java.io.File × 任意(*/*)
6 javax.activation.DataSource × 任意(*/*)
7 javax.xml.transform.Source※2 × text/xml,
application/xml,
application/*+xml
8 javax.xml.bind.JAXBElement<String>※3 text/xml,
application/xml,
application/*+xml
9 XmlRootElementアノテーションでアノテートされたJAXBクラス※3 text/xml,
application/xml,
application/*+xml
10 javax.ws.rs.core.MultivaluedMap<String, String> application/x-www-form-urlencoded
11 javax.ws.rs.core.StreamingOutput × 任意(*/*)
12 org.w3c.dom.Document × text/xml,
application/xml,
application/*+xml
13 java.util.List<T>※4 text/xml,
application/xml,
application/*+xml
14 java.awt.image.RenderedImage × image/jpeg
15 void 任意(*/*)
16 javax.ws.rs.core.Response 任意(*/*)
17 javax.ws.rs.core.GenericEntity<T>※5 Tに指定した型と同じMIMEメディアタイプです。
18 POJO※6 ×※7 application/json

(凡例)
−:該当しないことを示します。
任意(*/*):すべてのMIMEメディアタイプをサポートしていることを示します。

注※1
Producesアノテーションまたは戻り値にcharsetパラメタが含まれる場合,HTTPレスポンスに変換するときに,その情報がContent-Type HTTPヘッダのcharsetパラメタに反映されるかどうかを示します。
○:反映されます。Producesアノテーションおよび戻り値にcharsetパラメタが含まれない場合はUTF-8が仮定されます。
△:Tに指定した型に依存します。
×:反映されません。

注※2
次に示す実装クラスを使用できます。
・javax.xml.transform.stream.StreamSource
・javax.xml.transform.sax.SAXSource
・javax.xml.transform.dom.DOMSource

注※3
MIMEメディアタイプがapplication/fastinfosetまたはapplication/jsonの場合,エラーにならないで正常終了します。

注※4
TにはXmlRootElementアノテーションでアノテートされたJAXBクラスを指定できます。

注※5
Tにはこの表の項番17以外の型を指定できます。

注※6
JSON POJOマッピングを有効にしてください。JSON POJOマッピングが有効でない場合の動作は,サポートされないJava型がエンティティパラメタに指定された場合の動作と同じです。JSON POJOマッピングを有効にする方法については「18. JSON POJOマッピング」を参照してください。

注※7
Content-Type HTTPヘッダにcharsetパラメタを追加しないでください。

戻り値とHTTPレスポンスの対応を次の表に示します。

表17-7 戻り値とHTTPレスポンスの対応

項番 戻り値 HTTPレスポンス
HTTPステータスコード エンティティボディ
1 void 204 空のエンティティボディ
2 Response nullではないインスタンス 200 Responseのエンティティプロパティ
3 null 204 空のエンティティボディ
4 String nullではないインスタンス 200 Stringの値
5 null 204 空のエンティティボディ
6 void,Response,String以外のサポートしているJavaの型 nullではないインスタンス 200 戻り値のクラスに応じて変換されたエンティティボディ
7 null 204 空のエンティティボディ

(凡例)
−:戻り値の値がないことを示します。

戻り値の型がサポートされないJavaの型の場合,エラーとなり(KDJJ10026-E),HTTPステータスコードに500が設定された,例外マッピングプロバイダで処理できるjavax.ws.rs.WebApplicationExceptionがスローされます。ただし,戻り値の型がjavax.mail.internet.MimeMultipartで,MIMEメディアタイプがmultipart/*のときは,エラーにならないで正常終了します。

HTTPレスポンスのエンティティボディへの変換で例外が発生した場合,エラーとなります。例外の処理については「17.1.8 例外ハンドリング」を参照してください。

戻り値の型が次に示すJavaの型で,HTTPレスポンスのエンティティボディが使用できないMIMEメディアタイプの場合,エラーとなり(KDJJ10026-E),HTTPステータスコードに500が設定された,例外マッピングプロバイダで処理できるjavax.ws.rs.WebApplicationExceptionがスローされます。

  1. javax.xml.bind.JAXBElement<String>
  2. XmlRootElementアノテーションでアノテートされたJAXBクラス
  3. javax.ws.rs.core.MultivaluedMap<String, String>
  4. java.util.List<T>
  5. java.awt.image.RenderedImage

ただし,1.または2.でHTTPリクエストのエンティティボディのMIMEメディアタイプがapplication/fastinfosetまたはapplication/jsonのときは,エラーにならないで正常終了します。

次に示す戻り値の場合,警告メッセージまたはエラーメッセージがログに出力されます(KDJJ20003-WまたはKDJJ10006-E)。KDJJ20003-WとKDJJ10006-Eについては,「13.7.1 Webリソース初期化時の構文チェック(KDJJ20003-WとKDJJ10006-E)」を参照してください。