webService
1.1Webサービス
Webサービスは、オペレーティングシステム間、言語間データ呼び出し、およびデータ交換を行う一種のサービステクノロジです。ネットワーク通信、複数のマシン間のデータ交換に使用されます。
最大の利点:ウェブサービスの最大の利点はあるの互換性、クライアントとサーバーの言語と対話するときにオブジェクトを渡す機能。
1.2Webサービスとソケットの違い
1ソケットは、データ伝送層ネットワークにおけるTCP / UDPプロトコルを使用し、およびWebサービスは、HTTPプロトコルを使用するアプリケーション層に属します
2.ソケットの確立は長い接続であり、Webサービスは短い接続を確立します(接続はサービスが呼び出されたときに確立され、呼び出しが完了した後に接続が切断されます)
1.3wsdlドキュメント
1.3.1定義
定義:Webサービス記述言語。Webサービスの情報をxml形式で記述するために使用されます。
1.3.2機能
機能:wsdl仕様を通じて、Webサービスサーバーによって公開されたサービスを記述できます。
1.3.3ドキュメントフォーマット
ドキュメント形式:
サービス:関連するインターフェース、操作、メッセージなどを含む関連するポートのコレクションを含む、サービスによって公開される名前を指定します。
バインディング:メッセージ転送の形式を指定し、特定のプロトコルとデータフォーマットの仕様の特定のポートタイプ、および結合を介してのportTypeをポイントし
portType:インターフェース指定サーバー、実行可能なWebサービス操作方法、メッセージ、および操作の内外でのそれぞれのメッセージのバインディング:パラメーターで表され、戻り値はout、、を示します。
メッセージ:複数のSOAPメッセージが定義されています。各メソッドには通常2つのメッセージタグがあります。名前の属性はそれぞれxxxとxxxResponseです。
types:サービスの名前空間とキー情報のタイプ(メソッドパラメータータイプと戻り値タイプ)を定義します
1.3.4読み取り方法
WSDLドキュメントは下から上に読む必要があります。
1.最初にサービスラベルを確認し、対応するポートのバインディング属性を確認してから、上記のバインディングラベルを値で見つけます。
2.バインディングタグを介して特定のプロトコルに関する情報やその他の情報を取得し、バインディングのtype属性を確認できます。
3.バインディングのtype属性から対応するportTypeを見つけます。操作可能なメソッドとパラメーター、戻り値などを取得できます。
4. portTypeの下の操作タグのメッセージ属性を介して、メッセージを検索し、特定のデータパラメータ情報を取得できます。
1.4クライアントインターフェイスのtargetnamespaceに関する注意事項
クライアントインターフェイス呼び出しのnamespance、targetnamespanceは次のように記述する必要があります:package。クラス名の逆
targetNamespace:必要な名前空間を指定します。デフォルトでは、インターフェイス実装クラスのパッケージ名の逆サフィックスが使用されます。
2つのwebServiceケースサーバーコード
2.1サーバーの作成
2.2Webサービスの公開クラスの作成
2.2.1リリースインターフェイススピーカーを定義する
package com.bonc.xj.webservice;
import javax.jws.WebService;
/**
* 定义服务的接口
* @author Beauxie
*
*/
@WebService//此注解用在类上指定将此类发布成一个WebService
public interface Speaker {
String sayHello(String name);
}
2.2.2リリースインターフェイス実装クラスPersonを定義します
注:インターフェースと実装クラスには@WebServiceアノテーションを付ける必要があり、endpointInterface属性の値は、インターフェースの完全修飾名として実装クラスのアノテーションで指定する必要があります。
package com.bonc.xj.webservice.impl;
/**
* @ClassName: Person
* @Description: TODO
* @Author: liujianfu
* @Date: 2021/03/18 10:26:08
* @Version: V1.0
**/
import com.bonc.xj.webservice.Speaker;
import javax.jws.WebService;
/**
* 定义服务的实现类
* @author Beauxie
*/
@WebService(endpointInterface="com.bonc.xj.webservice.Speaker")
public class Person implements Speaker {
public String sayHello(String name) {
return "Hello,"+name+"我在美丽的新疆吉木萨尔!";
}
}
2.3サービスクラスの作成と公開
// 1.公開アドレスを定義します:ポート番号、公開コンテキストパス、定義
String url = "http:// localhost:8002 / ws-demo";
package com.bonc.xj;
import com.bonc.xj.webservice.impl.Person;
import javax.xml.ws.Endpoint;
/**
* Hello world!
*
*/
public class ServerApp
{
public static void main( String[] args )
{
//1.定义发布的地址:端口号,发布的上下文路径,自己定义
String url = "http://localhost:8002/ws-demo";
//2.发布服务
//第一个参数是指定你要发布的地址,第二个参数是你要发布的服务对象
Endpoint.publish(url, new Person());
System.out.println("服务器已启动");
System.out.println( "Hello World!" );
}
}
サービスを開始します。
次に、ブラウザーを開いてhttp:// localhost:8002 / ws-demo?wsdlにアクセスします。次のWSDLドキュメントがクライアントブラウザーで表示できる限り、サービスは正常に公開されます。
2.4クライアントの作成
このサーバープロジェクトの下に、呼び出し元のクライアントを作成します。このクライアントはサーバーと同じプロジェクトにあります。コードは次のとおりです。
package com.bonc.xj;
import com.bonc.xj.webservice.Speaker;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;
import java.net.MalformedURLException;
import java.net.URL;
/**
* Hello world!
*
*/
public class ClientApp
{
public static void main( String[] args ) throws MalformedURLException {
//1.声明所发布的服务对应的wsdl地址
URL url=new URL("http://localhost:8002/ws-demo?wsdl");
//2.声明所要调用的Qname
QName qname=new QName("http://impl.webservice.xj.bonc.com/", "PersonService");
//3.创建客户端的服务代理对象
Service service=Service.create(url,qname);
Speaker speaker = service.getPort(Speaker.class);
//4.调用服务的方法
String str=speaker.sayHello("Beauxie");
System.out.println(str);
}
}
結果:
3つのwebServiceケース-クライアントコード
上記のサーバー側でのクライアントコードの記述も調整できますが、わかりやすく説得力を持たせるために、サーバー側のサービスインターフェイスを呼び出すために別のクライアントプロジェクトをここに作成します。
3.1Webサービスクライアントプロジェクト
3.2クライアントスピーカーインターフェース
ここのインターフェース
@WebService(targetNamespace = "http://webservice.xj.bonc.com/") 配置原则参考,服务端发布的wsdl的说明文档:namespace的值。
package com.bonc.ws.client.service;
import javax.jws.WebService;
/**
* 定义服务的接口
* @author Beauxie
*
*/
/*
这个接口中targetnamespace的配置原则为:
参考服务端发布的wsdl文档中,wsdl=speaker.wsdl 中的namespace的值,这里配置为http://webservice.xj.bonc.com/ ,其实就是映射成服务端
这个接口speaker所在的包.类的绝对路径。
<wsdl:import location="http://localhost:8002/ws-demo?wsdl=Speaker.wsdl" namespace="http://webservice.xj.bonc.com/"> </wsdl:import>
*/
@WebService(targetNamespace = "http://webservice.xj.bonc.com/")
public interface Speaker {
String sayHello(String name);
}
3.3クライアント呼び出しインターフェース
ここに
QName qname=new QName("http://impl.webservice.xj.bonc.com/", "PersonService"); 里面的参数配置原则:QName中两个参数所对应wsdl文档中参数:
package com.bonc.ws.client;
import com.bonc.ws.client.service.Speaker;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;
import java.net.MalformedURLException;
import java.net.URL;
/**
* Hello world!
*
*/
public class App2
{
public static void main( String[] args ) throws MalformedURLException {
//1.声明所发布的服务对应的wsdl地址
URL url=new URL("http://localhost:8002/ws-demo?wsdl");
//2.声明所要调用的Qname
QName qname=new QName("http://impl.webservice.xj.bonc.com/", "PersonService");
//3.创建客户端的服务代理对象
Service service=Service.create(url,qname);
Speaker speaker = service.getPort(Speaker.class);
//4.调用服务的方法
String str=speaker.sayHello("Beauxie");
System.out.println(str);
}
}
通話結果:
参照アドレス:https://blog.csdn.net/BeauXie/article/details/52851862
続行するには、次の記事:wsimportコマンドを使用してWebサービスクライアントインターフェイスを生成します