2012-01-25 12 views
5

WSDLを、WSDLによって提供されるデータからいくつかの異なるHTTP要求に変換しようとしています。私は似たような質問をたくさん読んだことがありますが、本当に答えはありませんでした。WSDLをそれぞれのHTTPバインディングに変換する

一部は使用していますSOAPUI - このアプリケーションに精通しており、使用しています。しかし、私は自分自身でWSDLからこれらのHTTPリクエストを作成する必要があります。

一部はJAXWSをしようと言う - 私は、Axisこの上だけでなく、上のチュートリアルの数を見て、これらは、JavaクラスのバインディングにWSDLを翻訳し、あなたは、Webサービスをテストするためにこれらのメソッドを使用します。私は実際にHTTPリクエストを自分で生成したいので、リクエストを操作して自分のテストを送ることができるようにします。

wsdl4jを使用してWSDLの解析を開始しましたが、私が実際に再構築していないと確信するまで、このパスを下りません。過去にこれが必要だったと私には思われますか?しかし、WSDL4Jと他のすべてのライブラリでは、WSDLからSOAPへのメッセージ変換が表示されません。

非常に参考になります。目標は、WSDLで各メソッドのHTTP-SOAPリクエストを作成して検査し、セキュリティ問題をテストすることができるようにすることです。最初のステップは、それらの要求を作成することです!

+0

woa、これは5年前に尋ねられました! :o - 誰も私の前でそれを編集していない:o – Gewure

答えて

2

SOAP Webサービスを呼び出すときは、静的呼び出しまたは動的呼び出しを使用できます。

静的呼び出しとは、WSDLからスタブを作成し、それを使用して呼び出しを実行することを意味します。これにより、すべての「配管」コードが作成されますが、そのWebサービスに密接に関連しており、異なる契約のある他のWebサービスには使用できません。各WSDLについて、別のスタブを作成する必要があります。

動的呼び出しでは、実行時にWSDLを読み取り、WSDLから取得した情報に基づいてWebサービスを呼び出す方法を理解します。複数のWSDLを提供し、クライアントが適応します。

動的呼び出しは、SoapUIがサンプル要求と応答を生成するために使用するものです。

これは、それをフィードするWSDLを読み取り、typesセクションからXMLスキーマを抽出し、XMLインスタンスを生成します。これを行うには、フードの下にWsdl4jXmlBeansを使用します。

Wsdl4jを使用すると、WSDLの解析時に制御できるため、Wsdl4jを使用することをお勧めします。しかし、XmlBeansも見てみましょう。たとえば、schema to instanceクラスのように役に立つかもしれないいくつかの他のtoolsがあります。

あなたが(多分上で何が起こっているのか確認するために、それをデバッグする)アクションでそれを見るために必要がある場合はSOAPUI APIで迅速な汚いテストを作成することができます。

import com.eviware.soapui.impl.wsdl.WsdlInterface; 
import com.eviware.soapui.impl.wsdl.WsdlProject; 
import com.eviware.soapui.impl.wsdl.support.wsdl.WsdlImporter; 

public class Test { 
    public static void main(String[] args) throws Exception { 
     WsdlProject project = new WsdlProject(); 
     WsdlInterface[] wsdls = WsdlImporter.importWsdl(project, "http://www.html2xml.nl/Services/Calculator/Version1/Calculator.asmx?wsdl"); 
     WsdlInterface wsdl = wsdls[0]; 
     System.out.println(wsdl.getOperationByName("Add").createRequest(true)); 
     System.exit(0); // just to clear up some threads created by the project 
    } 
} 

あなたが(印刷されるはずですメッセージ計算機WSの操作を追加する)は、次のようになります。

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/"> 
    <soapenv:Header/> 
    <soapenv:Body> 
     <tem:Add> 
     <tem:a>?</tem:a> 
     <tem:b>?</tem:b> 
     </tem:Add> 
    </soapenv:Body> 
</soapenv:Envelope> 

これは、最初のステップを超えて移動するのに役立ちます。

関連する問題