2016-05-23 9 views
0

SOAPでは、RESTの場合と同様に、クライアントがWebサービスを呼び出すのは、最終的にいくつかのXMLをエンドポイントURLにポストすることを前提にしていますか?この場合、Axisやwsimportのようなツールを使用してWSDLからクライアントスタブクラスを生成する必要がありますか?SOAPの場合、WSDLからクライアントスタブを生成する必要がありますか?

この手順をスキップして生のXMLを自分で作成し、そのSOAPエンベロープ全体のHTTP Postを実行すると何か問題がありますか?

ここは私がgroovyでやりたいことです。

def myXml = "<soapenv:Envelope>" + 
      " <soapenv:Body>" + 
      " <myservice:invoke>" + 
      "  <username xsi:type=\"xsd:string\">$username</username>" + 
      "  <apiKey xsi:type=\"xsd:string\">$apiKey</apiKey>" + 
      " </myservice:invoke>" + 
      " </soapenv:Body></soapenv:Envelope>" 

HttpMethod method = new PostMethod('https://myservice.javaguy.com/Service.asmx') 

method.setRequestEntity(new StringRequestEntity(myXml)) 
method.setRequestHeader('Content-type','text/xml') 
def responseCode = httpClient.executeMethod(method) 
+1

はい、手動アプローチを使用しても問題ありませんが、冗長性とエラーの可能性のためには推奨されません。 – ACV

答えて

2

「SOAP、RESTとして」というステートメントは意味をなさない。 RESTはアーキテクチャスタイルです。 SOAPは、REST標準に準拠していないWebサービスプロトコルです。 SOAPサービスはHTTP経由で呼び出すことができます。

SOAP over HTTPを使用する場合は、SOAPメッセージを正しいリソースにポストすることでSOAPを呼び出すことができます。以下にリンクされたSOAPウィキペディアのページでこれを行う合理的な例があります。 https://en.wikipedia.org/wiki/SOAP#Example_message

WSDLクライアントジェネレータを避け、独自のSOAPクライアントを構築するには何も問題ありません。ジェネレータは、これを簡単にするためにこれを行うだけの場所です。生成されたクライアントは、HTTPクライアントの管理、非直列化/直列化ロジック、SOAP例外処理、変換を処理します。あなたがそれらを使用しないことを決めた場合は、あなた自身でその論理を書く必要があります。

関連する問題