Java JDK wsimport.exe wsdlファイルからクラスファイルを生成

7822 ワード

目次
wsimportの概要
wsimport使用例
サービス側
クライアント
テストの呼び出し
wsimportの概要
1、Java JDKのbinフォルダの下にwsimport.exeツールがあり、wsdlファイルに基づいて対応するクラスファイルを生成し、生成したクラスファイルを使用する必要があるプロジェクトにコピーすることで、ローカルのクラスを呼び出すようにwebServiceが提供する方法を呼び出すことができます.
2、wsimport.exeツールは、C#、.netなどの言語で作成されたWebServiceサービス側のようなJava以外のwebServiceサーバに使用でき、wsdlファイルを入手すればwsimportによってJavaクライアント実装を生成することができる.
3、コンピュータ上にJava JDKの環境変数が配置されている限り、任意のディレクトリの下でcmdウィンドウを使用してwsimportコマンドを実行することができ、以下に示すようにコマンドのフォーマット、およびパラメータ、使用例などを見ることができる.
C:\Users\Administrator.SC-201707281232>wsimport
   WSDL_URI

  : wsimport [options] 
\   [options]   :
  -b                     jaxws/jaxb          
                            (             -b)
  -B                    JAXB      
  -catalog                             
                               TR9401, XCatalog   OASIS XML     。
  -d                           
  -encoding                    
  -extension                        -     
                                。       
                                       
                                        
  -help                         
  -httpproxy::     HTTP       (      8080)
  -keep                            
  -p                          
  -quiet                       wsimport   
  -s                          
  -target               JAXWS         
                                2.2,       2.0, 2.1   2.2
                              , 2.0    JAXWS 2.0          
  -verbose                                   
  -version                        
  -wsdllocation   @WebServiceClient.wsdlLocation  
  -clientjar             Artifact   jar     
                               Web       WSDL    。
  -generateJWS                   JWS     
  -implDestDir        JWS        
  -implServiceName        JWS            
  -implPortName           JWS            

\  :
  -XadditionalHeaders                                 
                                   Java     
  -Xauthfile                                       :
                                   http://username:[email protected]/stock?wsdl
  -Xdebug                                
  -Xno-addressing-databinding         W3C EndpointReferenceType   Java    
  -Xnocompile                             Java   
  -XdisableAuthenticator               JAX-WS RI        ,
                                       -Xauthfile    (    )
  -XdisableSSLHostnameVerification     wsdl     SSL    
                                     

\  :
  wsimport stock.wsdl -b stock.xml -b stock.xjb
  wsimport -d generated http://example.org/stock?wsdl

C:\Users\Administrator.SC-201707281232>

一般的なコマンドは次のとおりです.
wsimport -keep -d D:\temp\d -s D:\temp\s -p com.map -verbose http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl

-keep:javaソースファイルを生成するかどうか、つまり.classファイルを生成すると同時に.javaソースファイルも生成されます.-d:.classファイルの出力ディレクトリを指定します.このディレクトリは存在する必要があります.-s:.javaファイルの出力ディレクトリを指定します.指定しない場合、デフォルトは-dで設定されたパスと一致します.-p:生成クラスのパッケージ名を定義します.指定しない場合は元と一致します.-verbose:コンソールに出力情報を表示します.-b:jaxws/jaxbバインドファイルまたは追加のschemas-extensionを指定します.拡張を使用してSOAP 1.2をサポートします.
wsimport使用例
「JWS(Java Web Service)の最初のケース入門」のウェブサービスクライアントは、サービス側と同じインタフェースを直接書いているので、社内や仲の良いパートナーが開発者を探してウェブサービスが提供するインタフェースのソースコードを直接取得してもだめではなく、lowのように見えますが、一つの方法です.
サービス側
Java JDKが提供するwsimportツールを使用して、サービス側が提供するwsdlファイルに基づいてクラスファイルを直接生成し、サービス業者がwsdlアドレスを提供すれば、自分で黙ってクラスファイルを生成して呼び出すことができます.
この例では、「JWS(Java Web Service)の最初のケース入門」の「wsサービス側」をウェブサービスのサービス側として使用しているので、コードの貼り付けを繰り返すことはありません.
WebServiceサービスを開始するには、次の手順に従います.
クライアント
「JWS(Java Web Service)の最初のケース入門」の「クライアント」プロジェクトで書き換え、CalculatorServiceファイルを削除し、wsimport.exeで生成します.
1、使用コマンドは以下のとおりです.E:/wmx/webserviceディレクトリは生成したファイルを保存するために使用されます.事前に作成する必要があります.
wsimport -d E:/wmx/webservice -keep -verbose http://192.168.1.20:3333/web_server/calculator?wsdl

2、コマンドの実行に成功した後、生成されたファイルの内容は以下の通りである.
以下にインタフェースの実装クラスも生成する CalculatorServiceImplServices.java(名前はサービス側より後ろのサービスが追加されています)ですが、その内容はウェブサービス側とは全く異なり、ソースコードの漏洩の心配はありません.
生成されたCalculatorServices.javaインタフェースの内容はほぼサーバと一致しており、インタフェースのメソッド名は必ず同じであり、他にも大きな内容が一致していないものがあります.
上記のように、サービス側は外部に1つのインタフェースしか提供していません. CalculatorServiceとその実装クラス CalculatorServiceImplですが、wsimport.exeコマンドはこんなに多くのファイルを生成します.
よく見るとAddition、Multiplicationはそれぞれサービス側CalculatorService  インタフェースでは、加算関数、乗算関数を定義します.
クライアントが使用する必要があるのは Addition.java、AdditionResponse.java、Multiplication.java、MultiplicationResponse.java、CalculatorServices.java、および ObjectFactory.javaファイル.インタフェースの実装クラスや他のクラスはインポートしなくてもよいし、もちろんすべてインポートしてもエラーはありません.
デプロイフェーズでは、上の.classファイルを直接使用してもいいです.
生成されたファイルをインポートするには、上記のようにします. Web_サービスクラスはウェブサービスを呼び出すために使用され、「JWS(Java Web Service)の最初のケース入門」のコードと完全に一致しています.ここでもう一度貼り付けます.内容は次のとおりです.

import com.lct.web_service.CalculatorService;

import javax.xml.namespace.QName;
import javax.xml.ws.Service;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.logging.Logger;

/**
 * Created by Administrator on 2019/1/25 0025.
 */
public class Web_service {
    //     
    public static final Logger logger = Logger.getGlobal();

    public static void main(String[] args) {
        try {
            /** url:webservice           ,      "?wsdl"*/
            URL url = new URL("http://192.168.1.20:3333/web_server/calculator?wsdl");

            /** QName    XML           ,QName          URI、       。
             * QName(final String namespaceURI, final String localPart):       URI        QName     。
             *                         xml       , :
             * 
             */
            QName qName = new QName("http://web_service.lct.com/", "CalculatorServiceImplService");

            /**
             * Service      Web         
             * Service          :1、         ,2、                 javax.xml.ws.Dispatch   。
             * create(java.net.URL wsdlDocumentLocation,QName serviceName):   Service   。
             * wsdlDocumentLocation :    WSDL       URL
             * serviceName :     QName
             */
            Service service = Service.create(url, qName);

            /**
             *    getPorts              /      
             * getPort(Class serviceEndpointInterface):                 
             * serviceEndpointInterface:                 
             */
            CalculatorService calculatorService = service.getPort(CalculatorService.class);
            float added = calculatorService.addition(100, 80);
            float multied = calculatorService.multiplication(2.5F, 100);

            logger.info("added:" + added);
            logger.info("multied:" + multied);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }

    }
}

テストの呼び出し
「JWS(Java Web Service)の最初のケース入門」と完全に一致し、呼び出しに成功しました.
特別説明
クライアントがwsimport.exeで生成したクラスをすべてインポートする場合、主にサービス側インタフェースの実装クラス、すなわち上のクラスを指す. CalculatorServiceImplServicejavaは、クライアントがサービス・エンド・メソッドを呼び出す場合にも、次のように使用できます.
CalculatorServiceImplService calculatorServiceImplService = new CalculatorServiceImplService();
CalculatorService calculatorService = calculatorServiceImplService.getCalculatorServiceImplPort();
float added = calculatorService.addition(100,80);
float multied = calculatorService.multiplication(2.5F,100);