プロジェクトのニーズのために、私は以前に使用したWebサービスを手に取り、JARパッケージを必要としないJavaネイティブJaxwsを使用することを選択しました。まず、WSImportの使用が最初に共有されます。プロジェクトがCMDの下にあるパスに移動し、次のコマンドを実行します
コードコピーは次のとおりです。
wsimport -keep -extension -s./src -p com.jaxws.test http://192.168.1.1:8080/service?wsdl
com.jaxws.testパッケージの下で自動的に生成されるさまざまなクライアント関連の補助クラスを見つけることができます。これらのカテゴリがどのように詳細に使用されているかは説明しません。オンラインで多くの情報があります。それから私は自分で呼び出しクラスを書きます(私はここにいるだけです、それを呼ぶだけです)
コードコピーは次のとおりです。
public string jaxws(オブジェクト[] opargs)
{
servicesservice service = new ServicesService();
//ヘッダーを石鹸に追加します
service.sethandlerRersolver(new HandlerResolver(){
パブリックリスト<ハンドラー> gethandlerchain(portinfo portinfo){
List <Handler> HandlerList = new ArrayList <Handler>();
//認証情報を追加します
handlerlist.add(new ClientHandler());
ハンドラーリストを返します。
}
});
string result = service.getServicesPort()。getResults(opargs.toString());
//結果を取得します
system.out.println(result);
返品結果;
}
[//認証情報HandlerList.add(new ClientHandler());]を追加することに注意してください。ここでは、次のように、認証メッセージのアセンブリを実装するには、新しいClientHandlerクラスを作成する必要があります。
コードコピーは次のとおりです。
パッケージcom.jaxws.test;
java.util.setをインポートします。
javax.xml.namespace.qnameをインポートします。
javax.xml.soap。*をインポートします。
javax.xml.ws.handler.messagecontextをインポートします。
javax.xml.ws.handler.soap.soaphandlerをインポートします。
javax.xml.ws.handler.soap.soapmessagecontextをインポートします。
パブリッククラスのクライアントハンドラーはSoaphandler <SoapmessageContext> {{
パブリックブールハンドルメッジ(SoapmessageContext ctx){
//アウトバウンド、つまり、クライアントがリクエストを発行する前にヘッダー情報を追加します
boolean request_p =(boolean)ctx.get(messagecontext.message_outbound_property);
if(request_p){
試す {
soapmessage msg = ctx.getMessage();
soapenvelope env = msg.getsoappart()。getEnvelope();
soapheader hdr = env.getheader();
if(hdr == null)hdr = env.addheader();
//認定情報ヘッダーを追加します
// qname(string namespaceuri、string localpart、string prefix)
// qname(stringnamespaceuri、string localpart)
// qname(string localpart)
//@param namespaceuri:qname namespace
//@param localpart:qnameのローカル部分
//@param prefix:qname prefix
qname name = new QName( "http://csdc.info/"、 "authentication"、 "wsse");
soapheaderelement header = hdr.addheaderelement(name);
// addChildElement(string localName、string prefix、stringuri)
// addChildElement(string localName、string prefix)
// addChildElement(string localname)
//@param uri:新しい要素が属する宇宙名uri
//@param localName:新しい要素のローカル名
//@param prefix:新しい要素名のスペースプレフィックス
// JDK 1.6のAPIを参照してください
soapelement userelement = header.addchildelement( "username"、 "wsse");
userelement.addtextnode( "admin");
soapelement passelement = header.addchildelement( "password"、 "wsse");
passelement.addtextnode( "admin");
msg.savechanges();
// System.outにSOAPメッセージを出力します。つまり、コンソール
msg.writeto(system.out);
trueを返します。
} catch(例外e){
e.printstacktrace();
}
}
falseを返します。
}
@オーバーライド
public boolean handlefault(soapmessagecontextコンテキスト){
// TODO自動生成方法スタブ
falseを返します。
}
@オーバーライド
public void close(mesagecontextコンテキスト){
// TODO自動生成方法スタブ
}
@オーバーライド
public set <qname> getheaders(){
// TODO自動生成方法スタブ
nullを返します。
}
}
このクラスは、すべての石鹸メッセージにヘッダーメッセージを追加します。
コードコピーは次のとおりです。
<WSSE:認証XMLNS:WSSE = "http://csdc.info/">
<wsse:username> admin </wsse:username>
<wsse:password> admin </wsse:password>
</wsse:authentication>
これにより、SOAPヘッダー認証を備えたJaxWSベースのWebサービスクライアントが実装されます。