0

着信要求を適切に処理するWeb サービスを作成しています (説明です) 。SOAP WSを提示する次のようなサンプル コードを見つけました。

    @SoapAction("some fine url")
    @ResponsePayload
    public CertResponse  getCert(@RequestPayload Cert param) 
    {...}

リクエストからCertオブジェクトを取得し、適切に管理します。私はRESTアプローチでそれをやりたいので、このクラスを次のように変更しました:

    @RequestMapping(value="getCert", method = RequestMethod.POST)
    @ResponseBody
    public CertResponse  getCert(@RequestBody Cert param) 
    {...} 

しかし、HTTP Post を介してオブジェクトを送信できるクライアントを作成する方法や、可能かどうかさえわかりません。

どうすればオブジェクトを送信できますCertか? または、@SoapActionそれを機能させるために何をしなければならないのですか?@Controller削除するだけでは不十分だと思います。

4

3 に答える 3

2

SOAP アプローチでは、各クラス オブジェクトを SOAP 形式の XML に変換する明確な方法があります。したがって、努力はありません。

RESTful アプローチを使用する場合は、Cert または CertResponse オブジェクトが応答/要求に対してどのように書き込まれるか、または読み取られるかを記述する必要があります。

基本的に、次の 3 つのオプションがあります。

  1. JSON または XML またはプレーンな文字列を使用します。要求と応答がそれらのいずれか (JSON、XML、文字列) になるように、Web サービス記述子を変換します。次に、getCert メソッドはリクエストを Cert オブジェクトに変換し、レスポンスを CertResponse オブジェクトとして準備し、適切なレスポンス タイプに変換する必要があります。

  2. getCert メソッドはそのままにしておきます。ただし、「リクエストから Cert オブジェクトを読み取る方法」と「CertResponse オブジェクトをレスポンスに書き込む方法」を指定する必要があります。インターフェイス MessageBodyReader および MessageBodyWriter を拡張するクラスを定義する必要があります。これらのクラスでは、オブジェクトを JSON、XML、または String との間で変換する同様の変換ロジックを実装する必要があります。

    これら 2 つのオプションのいずれにおいても、2 つのことを実装する必要があります。JSON/XML/String を Cert に変換するメソッド、CertResponse オブジェクトを JSON/XML/String に変換するメソッド。

    テキスト処理によってリクエスト/レスポンスを解析/構築し、Stringクラスのみを使用するテキストベースの実装を行うことができます。または、JSONObject クラスを含む JSON ライブラリ、または Java バンドルに付属する Java SAX または DOM ベースの XML ライブラリなどのライブラリを使用することもできます。

  3. Spring などのアプリケーション フレームワークを確認してください。それらは、オブジェクトを JSON または XML に自動的に変換する方法を提供し、必要なプログラミング作業を削減します。

于 2012-11-22T20:29:33.050 に答える
1

Springでは、JSON オブジェクトをクライアントからリクエスト パラメータとして渡すことができます。Spring はそれらを自動的にオブジェクトに変換します。この議論にはいくつかの例があります。

于 2012-11-22T20:01:13.537 に答える
1

SOAP サービスは、実際には REST セマンティクスと互換性がありません。また、どの SOAP フレームワークを使用しているかは明確ではありません。通常、ほとんどの SOAP フレームワークは、WSDL 用の SOAP クライアント コードを生成する方法を提供します。cxf.apache.org を確認できます。REST サービスの場合は、Jersey や Spring MVC などを使用します

于 2012-11-22T20:04:36.273 に答える