1. 예 1 (주로 [2] 참조)
1.1. 시스템 기능 :
Calculator Service 개발 계산 서비스 계산 서비스는 플러스, 뺄셈, 곱하기 및 분할과 같은 작업을 포함합니다.
1.2. 개발 전 준비 :
Eclipse-jee를 설치하십시오.
Axis2의 최신 버전을 다운로드하면 URL은 http://axis.apache.org/axis2/java/core/download.cgi입니다. 표준 바이너리 분포의 zip 패키지를 선택하고 디렉토리 이름 axis2-1.4.1을 압축 해제하십시오. 디렉토리의 파일 구조는 다음과 같습니다.
1.3. 개발 전 구성 :
Eclipse의 메뉴 표시 줄, 창 -> 환경 설정 -> 웹 서비스 -> axis2 perferences에서 Axis2 런타임 위치에서 Axis2 감압 패키지의 위치를 선택하십시오. 설정 후 "확인"을 클릭하십시오. (그림에서 볼 수 있듯이)
1.4. 웹 서비스 개발 :
(1) 새 Java 프로젝트를 만들어 "Webservicetest1"이름을 지정합니다.
(2) 새 클래스를 만들어 "계산"으로 이름을 지정하십시오. 전체 코드는 다음과 같습니다.
패키지 edu.sjtu.webservice; /*** 계산기 작동* @Author rongxInhua*/public class acculateservice {// public float plus (float x, float y) {return x + y; } // subtaction public float 마이너스 (float x, float y) {return x -y; } // 다중 공개 플로트 곱하기 (float x, float y) {return x * y; } // Dividation public float divide (float x, float y) {if (y! = 0) {return x /y; } else return -1; }}(3) "Webservicetest1"Project New-> 기타에서 "웹 서비스"에서 "웹 서비스"를 찾으십시오.
(4) 다음 단계 (다음 단계), 웹 서비스 객체 상자에서 나타나는 웹 서비스 객체 상자에서 서비스 구현에서 "찾아보기"를 클릭하고 클래스 브라우즈 클래스 개체 상자를 입력 한 다음 방금 쓴 CalculatesErvice 클래스를 찾으십시오. (아래 그림). "확인"을 클릭하면 웹 서비스 대화 상자로 돌아갑니다.
(5) 웹 서비스 대화 상자에서 웹 서비스 유형의 슬라이더를 "시작 서비스"위치로 조정하고 클라이언트 유형의 슬라이더를 "테스트 클라이언트"위치로 조정하십시오.
(6) 웹 서비스 유형 슬라이더 다이어그램의 오른쪽에 "구성"이 있습니다. 아래 옵션을 클릭하여 서비스 배포 구성 객체 상자를 입력하고 아래 그림과 같이 해당 서버 (여기에서 TomCat6.0을 사용) 및 웹 서비스 런타임 (선택)을 선택하십시오.
(7) 확인을 클릭하면 웹 서비스 대화 상자로 돌아갑니다. 마찬가지로 클라이언트 유형의 슬라이더 오른쪽에 "구성"도 있으며 해당 설정을 수행해야합니다. 단계는 위와 동일합니다. 완료 후 다음 -> 다음은 준비되었습니다. AXIS2 웹 서비스 Java Bean 구성 입력은 아래 그림과 같이 기본 Services.xml 생성을 선택합니다.
(8) 서버 시작 대화 상자에 도착하면 "시작 서버"버튼이 있습니다 (아래 그림과 같이). Tomcat 서버를 시작하려면 클릭하십시오.
(9) 시작을 기다린 후 "Next-> Next"를 클릭하면 모든 것이 기본적으로 수행됩니다. 마지막으로 마감을 클릭하십시오. 마지막으로 다음 인터페이스가 나타납니다. (웹 서비스 탐색기) 웹 서비스를 테스트 할 수 있습니다. (브라우저로 열면 다음 주소를 사용하십시오. http://127.0.0.1:19189/wsexplorer/wsexplorer.jsp?org.eclipse.wst.ws.explorer=3). 아래 그림과 같이 :
참고 : 브라우저에서 Open Web Service Explorer (때로는 WebService Explorer가 Eclipse에서 닫히고 이런 방식으로 열 수 있습니다)
첫 번째 로그인 주소 : http://127.0.0.1:19189/wse/wsexplorer/wsexplorer.jsp. 그런 다음 웹 페이지의 오른쪽 상단에있는 웹 서비스 탐색기 탭을 선택하십시오. 그런 다음 wsdl 주소를 입력하십시오 : http : // localhost : 8080/webservicetest1/services/calculateservice? wsdl. 이 WSDL 주소는 방금 서비스를 발표 한 WSDL입니다. 다음 그림과 같이 이동을 클릭하십시오.
그런 다음 다음 인터페이스를 볼 수 있습니다.
(10) 테스트는 비교적 간단합니다. 예를 들어, "플러스"작업을 선택합니다 (계산해야합니다. 다음 그림이 나타납니다. X의 입력 상자에 1을 입력하고 Y의 입력 상자에 2를 입력하고 "GO"를 클릭하면 결과 3.0이 상태 표시 줄에 표시됩니다. 다른 방법의 테스트는 비슷합니다. 결과는 위 그림에 나와 있습니다.
1.5. CalculatesErvice 클라이언트는 프로그램을 호출합니다
우리는 추가, 뺄셈, 곱셈 및 분할 방법을 정의하고 이러한 방법을 서비스로 게시했습니다. 이제 우리가해야 할 일은이 서비스를 호출하는 것입니다. 다음 코드에 표시된대로 클라이언트 호출 프로그램 : chalmeservicetest.java
패키지 edu.sjtu.webservice.test; import javax.xml.namespace.qname; import org.apache.axis2.axisfault; import org.apache.axis2.addressing.endpointreference; import org.apache.axis2.client.options; import org.apache.axis2.rpc.client.rpcserviceclient; 공개 클래스는 { / ** * @param args * @throws axisfault * / public static void main (string [] args)을 axisfault {// todo auto-a-kenerated method stub // rpc method rpcserviceclient serviceclient = new rpcserviceclient (); 옵션 옵션 = serviceclient.getOptions (); // WebService endPoinTreference를 호출 할 URL을 지정하여 targetepr = new EndPoinTreference ( "http : // localhost : 8080/webservicetest1/services/calculateservice"); 옵션 .setto (targetepr); // 컴퓨터에서 WSDL 파일의 메소드와 네임 스페이스를 지정할 수 있습니다 : edu.sjtu.webservice. Qname opaddentry = new qname ( "http://webservice.sjtu.edu", "plus"); // addqname opaddentryminus = new Qname ( "http://webservice.sjtu.edu", "minus"); // subtractionqname opadmultlydlyply = Qname ( "http://webservice.sjtu.edu", "multiply"); // qname opaddentrydivide = new qname ( "http://webservice.sjtu.edu", "divide"); // divide // plus methober의 숫자 값은 두 가지입니다. opaddentryargs = new Object [] {1,2}; // 플러스 메소드 클래스의 리턴 값의 데이터 유형을 지정합니다 [] class = new Class [] {float.class}; // 플러스 메소드를 호출하고 메소드 System.out.println (serviceclient.invokeBlocking (opaddentry, opaddentryargs, classs) [0])의 반환 값을 출력합니다. System.out.println (serviceclient.invokeBlocking (opaddentryminus, opaddentryargs, classes) [0]); System.out.println (serviceclient.invokeBlocking (opaddentrymultiply, opaddentryargs, classes) [0]); System.out.println (serviceclient.invokeBlocking (opaddentRydivide, opaddentryargs, classes) [0]); }}실행 결과 :
3.0
-1.0
2.0
0.5
2. 예
2. 헬로 서비스
(1) 먼저 서비스 방법을 정의하면 코드는 다음과 같습니다.
패키지 edu.sjtu.webservice; 공개 클래스 helloService {public String sayhellOnew () {return "Hello"; } public string sayhellotopersonnew (문자열 이름) {if (name == null) {name = "node"; } return "Hello," + 이름; } public void updatedata (문자열 data) {system.out.println (data + "updated."); }} (2)이 방법을 서비스로 게시하려면 예 1을 참조하십시오.
(3) WebService를 호출하려면 클라이언트 코드를 작성하십시오 (주요 참조 [5])
이 예제와 다른 예제의 가장 큰 차이점은 여기에 있습니다. 다른 예제는 일반적으로 서비스 WSDL을 기반으로 클라이언트 스텁을 생성 한 다음 스터브를 통해 서비스를 호출해야합니다. 이 방법은 비교적 단일입니다. 클라이언트는 서비스에 액세스하려면 스터브 스터브가 필요합니다. 이는 매우 불공평합니다. 이 예제의 클라이언트는 스터브 방법을 사용하지 않지만 일반적인 호출 방법을 구현하며 클라이언트 스텁이 서비스에 액세스하도록 요구하지 않습니다. 웹 서브 주소, 작동 이름, 매개 변수 및 함수 리턴 유형 만 지정하면됩니다. 코드는 다음과 같습니다.
helloservicetest2.javapackage edu.sjtu.webservice.test; import javax.xml.namespace.qname; import org.apache.axis2.axisfault; import org.apache.axis2.addressing.endpointreference; import org.apache.axis2.client.options; import org.apache.axis2.rpc.client.rpcserviceclient; 공개 클래스 HelloServicetest2 {private rpcserviceclient serviceclient; 개인 옵션 옵션; 개인 endPoinTreference TargetEpr; public helloServicetest2 (String endpoint)는 Axisfault를 던졌습니다. {serviceclient = new rpcserviceclient (); 옵션 = serviceclient.getOptions (); TargetEpr = new endPoinTreference (endpoint); 옵션 .setto (targetepr); } public Object [] invokeop (문자열 targetNamespace, String opName, Object [] opargs, class <?> [] opreturnType) axisfault, classNotFoundException {// 작동 이름을 설정 Qname opqname = new qname (targetnamespace, opname); // 반환 값을 설정 // class <?> [] opreturn = new Class [] {opreturnType}; // 작동을 전달 해야하는 매개 변수는 이미 매개 변수에 나와 있습니다. 여기서 우리는 직접 return serviceclient.invokeblocking (opqname, opargs, opreturntype)을 호출합니다. }/** * @param args * @throws axisfault * @throws classnotfoundException */public static void main (String [] args)은 Axisfault, ClassNotFoundException {// TODO 자동 생성 메소드 스터브 최종 문자열 endPoinTreference = "http : // localHost : 8080/WEBSERVICETEST1/HOLSERVICE"; 최종 문자열 targetnamespace = "http://webservice.sjtu.edu"; HelloServicetest2 Client = New HelloServicetest2 (endPoinTreference); String opname = "SayhellotopersonNew"; Object [] opargs = new Object [] { "My Friends"}; class <?> [] opreturntype = new Class [] {String []. class}; Object [] response = client.invokeop (TargetNamespace, OpName, Opargs, OpreturnType); System.out.println (((String []) 응답 [0]) [0]); }}프로그램을 실행하고 AS-> Java 응용 프로그램 실행을 클릭하십시오. 콘솔 포트의 출력은 다음과 같습니다. 안녕하세요, 친구, 클라이언트 호출이 성공했음을 나타냅니다. 이 예제의 가장 큰 차이점과 장점은 고객의 호출 방법, 즉 서비스 호출을 시작하는 방법에 반영됩니다. 클라이언트의 스터브 스터브 스텁보다 코드가 약간 더 많지만이 방법은 통합되어 있으며 스터브 스텁 코드의 생산이 필요하지 않으므로 클라이언트가 많은 클래스를 가지고있는 문제를 해결합니다. 독자가 이러한 코드를 추가로 캡슐화하면 통화 방법이 간단하다고 생각합니다. 관련 매개 변수를 전달하면 서비스 통화의 장점을 더 잘 보여줍니다. 또한이 방법은 더 간단하고 명확하며 구체적인 의미를 한눈에 알 수 있습니다. 스텁 클래스의 메커니즘을 만들 필요는 없습니다.
(4) 클라이언트 전화 서비스의 코드를 다시 작성하십시오
(3) 다음에 언급 된 클라이언트 응용 프로그램 코드는 글쓰기가 약간 복잡합니다. 위의 클라이언트 호출 서비스 프로그램을 다시 작성하여 훨씬 간단합니다. 코드는 다음과 같습니다.
helloservicetest.javaimport javax.xml.namespace.qname; import org.apache.axis2.axisfault; import org.apache.axis2.addressing.endpointreference; import org.apache.axis2.client.options; import org.apache.axis2.rpc.client.rpcserviceclient; 공개 클래스 HelloServicetest {public static void main (String Args [])는 axisfault {// 호출 웹 서비스 rpcserviceclient rpc serviceclient = new rpcserviceclient (); 옵션 옵션 = serviceclient.getOptions (); // WebService endPoinTreference를 호출 할 URL을 지정하여 TargetEpr = new EndPoinTreference ( "http : // localhost : 8080/webservicetest1/services/helloService"); 옵션 .setto (targetepr); // 호출 할 SayHellotOperson 메소드와 WSDL 파일의 네임 스페이스를 지정하여 Qname opaddentry = new Qname ( "http://webservice.sjtu.edu", "sayhellotopersonnew"); // SayHellotOperson 메서드의 매개 변수 값을 지정합니다. // SayHellOtOperson 메서드가 값 클래스 [] classe = new Class [] {String.class}를 반환하는 데이터 유형의 클래스 객체를 지정합니다. // SayHellotOperson 메소드를 호출하고 메소드 System.out.println (serviceclient.invokeBlocking (opaddentry, opaddentryargs, classs) [0])의 반환 값을 출력합니다. }}위의 내용을 통해 Eclipse+Webservice의 간단한 개발 예제를 소개 할 예정이며 모든 사람에게 도움이되기를 바랍니다.