통합 axis 개발 웹 서비스

더 읽 기
기초 지식
    웹 서 비 스 는 주로 각 고립 된 사이트 간 의 정 보 를 서로 통신 하고 공유 할 수 있 도록 하 는 인터페이스 이다.웹 서 비 스 는 HTTP,XML,SOAP(단순 대상 접근 프로 토 콜),WSDL 등 인터넷 상에 서 통일 되 고 개 방 된 표준 을 사용 하기 때문에 웹 서 비 스 는 이러한 표준 을 지원 하 는 모든 환경(Windows,Linux)에서 사용 할 수 있다.
     Axis 는 세 가지 웹 서비스의 배치 와 개발 을 지원 합 니 다.각각 다음 과 같 습 니 다.
1、Dynamic Invocation Interface ( DII)
2.Stubs 방식
3.동적 프 록 시 방식
명사 해석:
    SOAP 프로 토 콜(Simple Object Access Protocal,간단 한 대상 접근 프로 토 콜)은 분산 과 분포 식 환경 에서 네트워크 정보 교환 을 위 한 XML 기반 통신 프로 토 콜 입 니 다.이 프로 토 콜 에서 소프트웨어 구성 요소 나 응용 프로그램 은 표준 HTTP 프로 토 콜 을 통 해 통신 할 수 있다.그의 디자인 목 표 는 바로 단순 성과 확장 성 이다.이것 은 대량의 이 구조 프로그램 과 플랫폼 간 의 상호작용 성에 도움 이 되 고 존재 하 는 응용 프로그램 이 광범 위 한 사용자 에 게 접근 할 수 있 도록 한다.
    WSDL(네트워크 서비스 설명 언어,Web Services Description Language)은 XML 형식 으로 네트워크 서 비 스 를 문서 정보 나 프로 세 스 정 보 를 포함 하 는 정 보 를 조작 하 는 데 사용 된다.이 형식 은 먼저 조작 과 메시지 에 대해 추상 적 으로 설명 한 다음 에 구체 적 인 네트워크 프로 토 콜 과 메시지 형식 에 연결 하여 점 을 정의 합 니 다.관련 된 구체 적 인 단점 은 바로 조합 이 추상 적 인 단점(서비스)이 되 는 것 이다.
    UDDI(유 니 버 설 설명,발견 과 통합 서비스,Universal Description,Discovery and Integration)의 목적 은 전자 상 거래 를 위 한 표준 을 세 우 는 것 이다.UDDI 는 웹 기반 의 분포 식,웹 서비스 에 제공 되 는 정보 등록 센터 의 실현 표준 규범 이자 기업 이 자신 이 제공 하 는 웹 서 비 스 를 등록 하여 다른 기업 이 발견 할 수 있 도록 하 는 방문 협의의 실현 기준 도 포함한다.
    JAXP(Java API for XML Parsing)는 자바 에서 DOM,SAX,XSLT 를 사용 하 는 일반적인 인 터 페 이 스 를 정의 합 니 다.이렇게 하면 프로그램 에서 일반적인 인 터 페 이 스 를 사용 하기 만 하면 구체 적 인 실현 을 바 꿀 필요 가 있 을 때 코드 를 수정 할 필요 가 없다.
   JAXM(Java API for XML Messaging)은 SOAP 통신 에 접근 방법 과 전송 메커니즘 을 제공 하 는 API 다.
둘째,axis 를 사용 하여 웹 서 비 스 를 개발 하 는 예 1
(1)발표 할 서버 프로그램

package com.logcd.webservice;
import com.logcd.model.OpResult;
public class Calculator {
	public int add(int i1, int i2) {
		return i1 + i2;
	}
	public int subtract(int i1, int i2) {
		return i1 - i2;
	}
	public int multiply(int i1, int i2) {
		return i1 * i2;
	}
	public int divide(int i1, int i2) {
		return i1 / i2;
	}
	public OpResult getOpResult(int i1, int i2){
		OpResult result = new OpResult();
		result.setSum(add(i1, i2));
		result.setDifference(subtract(i1, i2));
		result.setProduct(multiply(i1, i2));
		result.setQuotient(divide(i1, i2));
		return result;
	}
}

(2)웹.xml 에 Axis Servlet 설정

	
	    Apache-Axis Servlet
	    AxisServlet
	    org.apache.axis.transport.http.AxisServlet
	
	
	    AxisServlet
	    /servlet/AxisServlet
	
	
	    AxisServlet
	    *.jws
	
	
	    AxisServlet
	    /services/*
	

(3)정적 게시 파일 server-config.wsdd 설정



    
        
            
                
            
            
                
                
            
        
    
    
    
    
    
        
            
            
        
    
    
        
            
        
    
    
        
        
        
        http://xml.apache.org/axis/wsdd/
    
    
        
        
    
    
        
        
        
        
        
		
        
        http://axis.userguide.samples
    


(4)호출 테스트

package com.logcd.webservice;
import javax.xml.rpc.ParameterMode;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;
public class CalcTest {
	   public static void main(String [] args) throws Exception {
	       try{
	           String endpoint = "http://127.0.0.1/js_test/services/Calculator";
	           Integer i1 = new Integer(1000);
	           Integer i2 = new Integer(1009);

	           Service service = new Service();
	           Call call = (Call) service.createCall();

	           call.setTargetEndpointAddress(new java.net.URL(endpoint));
	           call.setOperationName("add");
	           call.addParameter("i1", XMLType.XSD_INT, ParameterMode.IN);
	           call.addParameter("i2", XMLType.XSD_INT, ParameterMode.IN);
	           call.setReturnType(XMLType.XSD_INT);

	           Integer ret = (Integer) call.invoke(new Object[] {i1, i2});
	           
	           System.out.println("Got result : " + ret);
	       }
	       catch(Exception e){
	           e.printStackTrace();
	       }
	   }
}

package com.logcd.webservice;
import javax.xml.namespace.QName;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.ser.BeanDeserializerFactory;
import org.apache.axis.encoding.ser.BeanSerializerFactory;
import com.logcd.model.OpResult;
public class ObjResultTest {
	public static void main(String[] args) throws Exception {
		try {
			String endpoint = "http://127.0.0.1/js_test/services/Calculator";
			Integer i1 = new Integer(1009);
			Integer i2 = new Integer(1000);
			
			Service service = new Service();
            Call call = (Call) service.createCall();
            QName qn = new QName("urn:BeanService","resp");
            //   bean
            call.registerTypeMapping(OpResult.class, qn, 
            		new BeanSerializerFactory(OpResult.class, qn), 
            		new BeanDeserializerFactory(OpResult.class, qn));

            call.setTargetEndpointAddress(new java.net.URL(endpoint));
            call.setOperationName(new QName("http://axis.userguide.samples","getOpResult"));

			OpResult ret = (OpResult) call.invoke(new Object[] { i1, i2 });

			System.out.println("the operation result following:");
			System.out.println("sum = " + ret.getSum());
			System.out.println("difference = " + ret.getDifference());
			System.out.println("product = " + ret.getProduct());
			System.out.println("quotient = " + ret.getQuotient());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

3.예 2.Spring 의 ServletEndpoint Support 를 사용 하여 웹 서 비 스 를 실현 합 니 다.
(1)인터페이스 와 실현

package com.logcd.service;

public interface IHelloWorld {
	public String getMessage(String name);
}

package com.logcd.service.impl;

import com.logcd.service.IHelloWorld;

public class HelloWorldImpl implements IHelloWorld {

	private String helloStr;

	public String getMessage(String name) {
		return helloStr + ":" + name;
	}

	public String getHelloStr() {
		return helloStr;
	}

	public void setHelloStr(String helloStr) {
		this.helloStr = helloStr;
	}

}

(2),ServletEndpoint Support 사용

package com.logcd.webservice;

import javax.xml.rpc.ServiceException;

import org.springframework.remoting.jaxrpc.ServletEndpointSupport;

import com.logcd.service.IHelloWorld;

public class JaxRpcHelloWorld extends ServletEndpointSupport implements IHelloWorld{

	private IHelloWorld helloWorld;
	  
	protected void onInit() throws ServiceException {
	// Spring     Bean   
		helloWorld = (IHelloWorld) getApplicationContext().getBean(
	            "helloWorld");
	}
	  
	public String getMessage(String name){
		return helloWorld.getMessage(name);
	}

}

(3),웹.xml,applicationContext.xml





    
        contextConfigLocation
        
            classpath:applicationContext.xml
        
    

    
        org.springframework.web.context.ContextLoaderListener
    

	
    
        axis
        org.apache.axis.transport.http.AxisServlet
        2
    

	
    
        axis
        /services/*
    




 
 
 
    
        
        	Say Hello to :
        
    


(4)、server-config.wsdd


    
    
    
    
    	
      	
    
    
    
      
          
      
    
    


(5)、테스트

package com.logcd.test;

import java.net.URL;

import javax.xml.namespace.QName;

import org.apache.axis.client.Call;
import org.apache.axis.client.Service;

public class testWebServiceClient {

	public static void main(String[] args) {
		try {
			String wsdlUrl = "http://localhost:8088/webService/services/HelloWorld?wsdl";
			String nameSpaceUri = "http://localhost:8088/webService/services/HelloWorld";
			
			Service service = new Service();
			Call call = null;
			call = (Call) service.createCall();
			
			System.out.println(">>>getMessage");
			call.setOperationName(new QName(nameSpaceUri, "getMessage"));
			call.setTargetEndpointAddress(new URL(wsdlUrl));
			String ret = (String) call.invoke(new Object[] { "ABC" });
			System.out.println("return value is " + ret);
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}
  • axis1.4_lib.rar (2 MB)

  • 다운로드 횟수:64

    좋은 웹페이지 즐겨찾기