'RESTful'에 해당되는 글 1건

  1. 2012.02.08 Apache CXF Restful
Java2012.02.08 12:57
요즘은 Restful이 유행이다. 통신을 하기 위해서 가장  부하가 적은 웹서비스이기 때문이다. Java에서 요즘 가장 많이 사용하는 것이 Spring Framework 와 함께 Apache CXF를 가장 많이 사용한다. 그다음에 사용하는 WebService로는 Apache AXIS 이다. 둘다 Apache에서 나온 프로젝트이기 때문에 오픈소스라고 볼 수 있다. 라이센스는 걱정하지 않고 사용하기만 하면 되는 것이다. 

Apache CXF : http://cxf.apache.org

위의 Apache CXF 홈페이지를 방문하면 다운로드 뿐만 아니라 좀 더 자세한 정보를 알아 낼 수 있다. 

Apache AXIS :  http://axis.apache.org/axis2/java/core/ 

AXIS 역시 홈페이지를 방문하면 Install 가이드 및 자세한 정보를 확인 할 수 있다.
 
Apache CXF 설치

Eclipse에서 Maven Project를 생성 후 Pom.xml에 Apache CXF 를 추가한다.



환경설정

Web.xml에 다음과 같이 Servlet을 추가합니다.

<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>SimpleJaxs</display-name> <context-param> <param-name>contextConfigLocation</param-name> <param-value>WEB-INF/beans.xml</param-value> </context-param> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener>

<servlet> <servlet-name>CXFServlet</servlet-name> <servlet-class> org.apache.cxf.transport.servlet.CXFServlet </servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>CXFServlet</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping>
</web-app> 



web.xml 환경설정이 끝나면 beans.xml를 생성한다.

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  xmlns:jaxrs="http://cxf.apache.org/jaxrs"

  xmlns:cxf="http://cxf.apache.org/core"

  xsi:schemaLocation="

http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans.xsd

http://cxf.apache.org/jaxrs

http://cxf.apache.org/schemas/jaxrs.xsd

http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd">


  <import resource="classpath:META-INF/cxf/cxf.xml" />

  <import resource="classpath:META-INF/cxf/cxf-extension-jaxrs-binding.xml" />

  <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />


 <jaxrs:server id="CxfService" address="/Service">

    <jaxrs:serviceBeans>

    <ref bean="DemoBean" />

    </jaxrs:serviceBeans>

  </jaxrs:server>

  

  

  <bean id="DemoBean" class="demo.jaxrs.server. DemoCxf " />


Server 프로그램 샘플
 
그럼 이번에는 Server Program 를 생성해 보도록 하겠다.

package demo.jaxrs.server;
import javax.ws.rs.Consumes;

import javax.ws.rs.DELETE;

import javax.ws.rs.GET;

import javax.ws.rs.POST;

import javax.ws.rs.PUT;

import javax.ws.rs.Path;

import javax.ws.rs.PathParam;

import javax.ws.rs.Produces;

import javax.ws.rs.core.Response;
 

@Path("/DemoCxf/")

public class  DemoCxf {

        @GET

@Path("/getMsg/{gubun}")

public String getMsg(@PathParam("gubun") String _gubun)
        {

return "hi"+ _gubun;

}

        @POST
        @Path("/AddData/{gubun}/{data}")
        public String addData(@PathParam("gubun") String _gubun, @PathParam("data") String _data)

        {
                String data = _data;
                return "true";
        }



Client 프로그램 샘플

Server 프로그램을 생성했으면 Client 프로그램을 생성해야 한다.

import org.apache.cxf.jaxrs.client.WebClient;

 public class DemoCxfClient {
       public String getMsgClient( String serverUrl) 

{

WebClient client = WebClient.create(serverUrl);

                String gubun = "1"; 

String result = client.path("/CxfService/DemoCxf/getMsg").accept("application/xml").get(gubun);

return result;

}

        public String addDataClient( String serverUrl, String data) 

{

WebClient client = WebClient.create(serverUrl);
                String gubun = "1"; 
                String data = "test_data";   

String result = client.path("/CxfService/DemoCxf/addDataClient").accept("application/xml").post(gubun, data);

return result;

}

 
 
샘플 코드에서 나는 Rest의 두가지를  샘플로 코딩하였다. 바로 @GET 과 @POST이다. 이번에는 Rest 방식에 대하여 설명하도록 하겠다.

@GET 
   특정 구분자에 의한 값을 조회할때 
@POST
   새로운 데이터를 저장하거나 생성할 때
@PUT
   저장되어 있는 데이터를 변경할 때
@DELETE
   저장되어 있는 데이터를 삭제할 때
@HEAD
   조회하고자 하는 데이터의 메타데이터를 확인 할 때
@OPTION 
   지원 메소드를 체크할 때 
Posted by 나리 짱!!! naleejang