2011-07-27 7 views
6

私はJava用のSOAPクライアントライブラリを探していて、WSDLに基づいてスタブとプロキシのクラスを構築するという考えに基づいて、数多くのライブラリを見つけました。私は、ユーザが実行時にWSDLを入力し、WSDLを解析してから、ユーザがWebサービスで操作を実行できるようにすることに興味があります。動的なSOAPクライアント操作に適したJavaライブラリは何ですか?

この実行時に使用できる優れたSOAPクライアントライブラリを知っている人はいますか?または、クラス2のwsdl2java機能を使用してクラスローダーにスタブを作成し、実行時に使用する方法はありますか?

答えて

3

これ以降はありません。使用可能な操作を取得するために、ユーザーによって知らさWSDLを解析

  • 1)::)

    次の2つのステップでそれを実現すべきです。簡単な方法でこれを行う方法を知るには、this questionを参照してください。

  • 2)選択した操作を使用して要求を送信するために動的クライアントを作成します。これは、Apache CXFDispatch APIを使用して行うことができます。

動的クライアントのためのDispatchオブジェクト(それは、などのWebサービスエンドポイント、ポート名を、知らせることによってその場で作成することができます)ビルドします。例では(要求メッセージを構築し

package com.mycompany.demo; 

import javax.xml.namespace.QName; 
import javax.xml.ws.Service; 

public class Client { 
    public static void main(String args[]) { 
    QName serviceName = new QName("http://org.apache.cxf", "stockQuoteReporter"); 
    Service s = Service.create(serviceName); 

    QName portName = new QName("http://org.apache.cxf", "stockQuoteReporterPort"); 
    Dispatch<DOMSource> dispatch = s.createDispatch(portName, 
                DOMSource.class, 
                Service.Mode.PAYLOAD); 
    ... 
    } 
} 

を我々は)DOMSourceを使用しているの下:

// Creating a DOMSource Object for the request 
DocumentBuilder db = DocumentBuilderFactory.newDocumentBuilder(); 
Document requestDoc = db.newDocument(); 
Element root = requestDoc.createElementNS("http://org.apache.cxf/stockExample", "getStockPrice"); 
root.setNodeValue("DOW"); 
DOMSource request = new DOMSource(requestDoc); 

は、Webサービスを呼び出す

// Dispatch disp created previously 
DOMSource response = dispatch.invoke(request); 

推奨事項:

  • 使用((BindingProvider)dispatch).getRequestContext().put("thread.local.request.context", "true");あなたはDispatchオブジェクトのスレッドセーフにしたい場合。
  • 場合によっては、Dispatchオブジェクトを後で使用するためにキャッシュします。オブジェクトを構築するプロセスは無料ではありません。

その他の方法

CXF dynamic-clients APIを使用してのように、ダイナミッククライアントを作成するための他の方法があります。価値が自分自身は、私がいることを試していない

CXFは にアプリケーションを許可するためにいくつかの選択肢をサポートしていますがSEIとデータクラスなしでサービスと通信はずですが:あなたは、プロジェクトのインデックスページを読み込むことができます試してみてください。

-1

このタイプの機能は作成できますが、Webサービスメソッドの入力タイプと戻りタイプは同じでなければなりません。

関連する問題