프로젝트 요구로 인해 이전에 사용한 웹 서비스를 집어 들었고 JAV 패키지가 필요하지 않은 Java Native 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 (Object [] opargs)
{
Servicesservice Service = New Servicesservice ();
// 비누에 헤더를 추가합니다
service.sethandlerresolver (new handlerresolver () {
공개 목록 <Handler> gethandlerchain (portinfo portinfo) {
목록 <Handler> handlerList = new ArrayList <Dandler> ();
// 인증 정보 추가
handlerList.add (new ClientHandler ());
반환 핸들러 목록;
}
});
문자열 result = service.getServicesport (). getResults (opargs.toString ());
// 결과를 얻습니다
System.out.println (결과);
반환 결과;
}
[// 인증 정보 handlerList.Add (new ClientHandler ());]에 참고하십시오. 여기에서는 다음과 같이 인증 메시지의 어셈블리를 구현하려면 새 ClientHandler 클래스를 만들어야합니다.
코드 사본은 다음과 같습니다.
패키지 com.jaxws.test;
java.util.set import;
import javax.xml.namespace.qname;
import javax.xml.soap.*;
import javax.xml.ws.handler.messagecontext;
javax.xml.ws.handler.soap.soaphandler import;
import javax.xml.ws.handler.soap.soapmessagecontext;
Public Class ClientHandler는 Soaphandler를 구현합니다 <SoapMessageContext> {
Public Boolean HandleSesage (SOAPMESSAGECONTEXT CTX) {
// 아웃 바운드, 즉 클라이언트가 요청을 발행하기 전에 헤더 정보 추가
Boolean request_p = (boolean) ctx.get (messagecontext.message_outbound_property);
if (request_p) {
노력하다 {
soapmessage msg = ctx.getMessage ();
SOAPENVELOPE ENT = msg.getSoAppart (). getEnvelope ();
SOAPHEADER hdr = Env.getheAder ();
if (hdr == null) hdr = env.addheader ();
// 인증 정보 헤더 추가
// qname (String namespaceuri, String localPart, String Prefix)
// qname (String namespaceuri, String localPart)
// Qname (String localPart)
//@param namespaceuri : Qname 네임 스페이스
//@param localpart : Qname의 로컬 부분입니다
//@param 접두사 : Qname 접두사
Qname name = new Qname ( "http://csdc.info/", "Authentication", "WSSE");
SOAPHEADERELEMENT HEADER = hdr.addheaderElement (이름);
// addChildElement (문자열 localName, 문자열 접두사, String URI)
// addChildElement (String localName, String Prefix)
// addChildElement (String localName)
//@param uri : 새로운 요소가 속한 공간 이름 우리
// param localName : 새 요소의 로컬 이름입니다
//@param 접두사 : 새 요소 이름의 공간 접두사
// JDK 1.6의 API를 참조하십시오
SOAPELEMENT USERELENTE = HEADER.ADDCHILDELEMENT ( "사용자 이름", "WSSE");
userElement.addtextNode ( "admin");
SOAPELEMENT PASSELENTEN = HEADER.ADDCHILDELENTE ( "PASSOFFER", "WSSE");
PassElement.addtextNode ( "admin");
msg.sevechanges ();
// SOAM.OUT에 비누 메시지를 출력합니다. 즉, 콘솔
msg.writeto (System.out);
진실을 반환하십시오.
} catch (예외 e) {
e.printstacktrace ();
}
}
거짓을 반환합니다.
}
@보수
Public Boolean HandleFault (SoapMessAgeContext Context) {
// TODO 자동 생성 메소드 스텁
거짓을 반환합니다.
}
@보수
public void close (MessageContext 컨텍스트) {
// TODO 자동 생성 메소드 스텁
}
@보수
공개 세트 <qname> getheaders () {
// TODO 자동 생성 메소드 스텁
널 리턴;
}
}
이 클래스는 모든 비누 메시지에 헤더 메시지를 추가합니다.
코드 사본은 다음과 같습니다.
<wsse : 인증 xmlns : wsse = "http://csdc.info/">
<wsse : username> admin </wsse : username>
<wsse : password> admin </wsse : password>
</wsse : 인증>
이것은 SOAP 헤더 인증을 통해 JAXWS 기반 웹 서비스 클라이언트를 구현합니다.