Karena kebutuhan proyek, saya mengambil layanan web yang saya gunakan sebelumnya dan memilih untuk menggunakan Java Jaxws asli yang tidak memerlukan paket toples. Pertama, penggunaan WSIMPORT dibagikan terlebih dahulu: Pergi ke jalur di mana proyek tersebut terletak di bawah CMD, dan kemudian jalankan perintah berikut
Salinan kode adalah sebagai berikut:
wsimport -keep -extension -s./src -p com.jaxws.test http://192.168.1.1:8080/service?wsdl
Anda dapat menemukan berbagai kelas tambahan terkait klien yang secara otomatis dihasilkan di bawah paket com.jaxws.test. Saya tidak akan menjelaskan bagaimana kategori ini digunakan secara rinci, ada banyak informasi online. Lalu saya sendiri menulis kelas panggilan (saya hanya metode di sini, sebut saja)
Salinan kode adalah sebagai berikut:
JAXWS PUBLIK PUBLIK (Object [] OPARGS)
{
Servicesservice Service = New ServicesService ();
// Tambahkan header ke sabun
service.setHanderResolver (handlerResolver baru () {
Daftar Publik <Shandler> getHandlerchain (portinfo portInfo) {
Daftar <Shandler> HandlerList = ArrayList baru <Shandler> ();
// Tambahkan informasi otentikasi
handlerlist.add (klien baru ());
Handlerlist return;
}
});
String result = service.getServicesport (). GetResults (opargs.tostring ());
// Dapatkan hasilnya
System.out.println (hasil);
hasil pengembalian;
}
Perhatikan [// tambahkan informasi otentikasi handlerlist.add (klien baru ());] Di sini, jadi kami juga perlu membuat kelas ClientHandler baru untuk mengimplementasikan perakitan pesan otentikasi, sebagai berikut:
Salinan kode adalah sebagai berikut:
paket com.jaxws.test;
impor java.util.set;
impor javax.xml.namespace.qname;
impor javax.xml.soap.*;
impor javax.xml.ws.handler.messageContext;
impor javax.xml.ws.handler.soap.soaphandler;
impor javax.xml.ws.handler.soap.soapmessageContext;
Kelas Publik ClientHandler mengimplementasikan Soaphandler <SoapmessageContext> {
public boolean handlemessage (soapMessageContext ctx) {
// Outbound, yaitu, tambahkan informasi header sebelum klien mengeluarkan permintaan
Boolean request_p = (boolean) ctx.get (messageContext.message_outbound_property);
if (request_p) {
mencoba {
Soapmessage msg = ctx.getMessage ();
Soapenvelope env = msg.getSoAppart (). GetEnvelope ();
Soapheader hdr = env.getHeader ();
if (hdr == null) hdr = env.addheader ();
// Tambahkan header informasi sertifikasi
// qname (string namespaceuri, string localpart, awalan string)
// qname (string namespaceuri, string localpart)
// qname (string localpart)
//@param namespaceuri: Qname namespace
//@param Localpart: Bagian lokal QNAME
//@Param Prefix: Prefix Qname
Qname name = qname baru ("http://csdc.info/", "otentikasi", "wsse");
Header soapheaderelement = hdr.addheaderelement (name);
// AddChildElement (String LocalName, String Prefix, String URI)
// AddChildElement (String LocalName, Prefix String)
// AddChildElement (String LocalName)
//@param uri: Nama ruang URI yang menjadi milik elemen baru
//@param localname: Nama lokal dari elemen baru
//@param prefix: awalan ruang untuk nama elemen baru
// Lihat API JDK 1.6
UserElement SoapElement = header.addChildeLement ("nama pengguna", "wsse");
UserElement.AddTextNode ("Admin");
Passelement soapElement = header.addchildeLement ("kata sandi", "wsse");
passelement.addtextNode ("admin");
msg.savechanges ();
// output pesan sabun ke system.out, yaitu konsol
msg.writeto (System.out);
Kembali Benar;
} catch (Exception e) {
e.printstacktrace ();
}
}
mengembalikan false;
}
@Mengesampingkan
public boolean handlefault (konteks soapmessageContext) {
// TODO Stub Metode yang dihasilkan otomatis
mengembalikan false;
}
@Mengesampingkan
public void close (MessageContext Context) {
// TODO Stub Metode yang dihasilkan otomatis
}
@Mengesampingkan
set publik <Qname> getHeaders () {
// TODO Stub Metode yang Dihasilkan Otomatis
kembali nol;
}
}
Kelas ini menambahkan pesan header ke semua pesan SOAP.
Salinan kode adalah sebagai berikut:
<WSSE: otentikasi xmlns: wsse = "http://csdc.info/">
<WSSE: Username> admin </wsse: username>
<WSSE: Kata Sandi> Admin </wsse: Kata Sandi>
</wsse: otentikasi>
Ini mengimplementasikan klien layanan web berbasis JAXWS dengan otentikasi header SOAP.