REST 방식 의 CXF 웹 서비스 실현

93972 단어 프레임/도구
1. REST 방식 의 WebService 개요
1.1 REST 구조 스타일
REST 는 Roy Fielding 박사 가 2000 년 에 제기 한 것 이다.REST (Representational State Transfer - 표현 층 상태 전환) 는 새로운 소프트웨어 구조 스타일 로 자원 (resource) 을 핵심 으로 하고 HTTP, URI, XML, HTML 등 유행 프로 토 콜 과 기준 을 사용 하여 자원 에 대한 조작 과 디 스 플레이 를 완성 한다.이 동작 들 은 HTTP 프로 토 콜 에 대응 하 는 GET, POST, PUT, DELETE 방법 을 가 져 오고, 만 들 고, 수정 하고, 삭제 하 는 것 을 포함한다.
RESTful 구 조 는 다음 과 같은 세 가지 내용 으로 요약 할 수 있다. (1) 모든 URI 는 하나의 자원 을 대표 한다.(2) 클 라 이언 트 와 서버 간 에 이러한 자원 을 전달 하 는 특정한 표현 층;(3) 클 라 이언 트 는 네 개의 HTTP 동 사 를 통 해 서버 측 자원 을 조작 하여 '표현 층 상태 전환' 을 실현 한다.
  • GET 는 자원 을 가 져 오 는 데 사 용 됩 니 다.
  • POST 는 자원 을 새로 만 드 는 데 사 용 됩 니 다.
  • PUT 는 자원 을 업데이트 하 는 데 사 용 됩 니 다.
  • DELETE 는 자원 을 삭제 하 는 데 사 용 됩 니 다.

  • 1.2. REST 스타일 서비스
    REST (스타일 의) 서비스 (RESTful Service) 는 HTTP 와 REST 준칙 을 바탕 으로 하 는 경량급 웹 서비스 이다.
    이러한 서 비 스 는 일련의 자원 (resource) 의 집합 으로 볼 수 있 습 니 다. 서비스의 정 의 는 다음 과 같은 세 가지 단면 적 인 조합 으로 볼 수 있 습 니 다. - 웹 서 비 스 를 방문 하 는 URI, 예 를 들 어:http://example.com/resources。 - 웹 서비스 가 지원 하 는 데이터 MIME 형식, 예 를 들 어 JSON, XML, YAML 등. -웹 서 비 스 는 GET, POST, PUT, DELETE 와 같은 HTTP 프로 토 콜 이 지원 하 는 동작 을 사용 합 니 다.
    1.3. 장점
    REST 스타일 의 서비스의 성능, 효율 성과 용이 성 등 은 모두 SOAP 프로 토 콜 보다 우수 합 니 다. - SOAP 와 XML - RPC 에 비해 REST 서 비 스 는 더욱 간결 합 니 다. - HTTP 프로 토 콜 을 통 해 이 루어 질 수 있 습 니 다. - XML, JSON 등 다양한 메시지 형식 을 지원 합 니 다. 예 를 들 어 캐 시 Cache 를 이용 하여 응답 속 도 를 높 일 수 있 습 니 다.(첫 번 째 자원 캐 시, 두 번 째 자원 방문, 304 클 라 이언 트 로 컬 호출).
    1.4.JAX-RS
    JAX - RS (JSR 311) 는 자바 세계 의 또 다른 웹 서비스 규범 으로 RESTful 웹 서 비 스 를 개발 하 는 데 사용 된다. 자바 EE 6 규범 중의 하위 규범 에 속 하 며 JAX - WS (대 웹 서비스의 규범) 의 지 위 를 점차 대체 하고 있다. JAX - RS 규범 을 바탕 으로 이 루어 진 RESTful API 는 자원 추상 적 이 고 통 일 된 인 터 페 이 스 를 지원 하 는 'CRUD 식 웹 서비스' 에 도달 할 수 있다.
    2. CXF 서버 개발
    CXF 프레임 워 크 는 JAX - WS 를 지원 하고 JAX - RS 규범 도 지원 하 며 모두 원 격 호출 이다.
    2.1 새로운 maven 프로젝트, 도입 의존
    pom.xml
        <properties>
            <cxf.version>3.1.9cxf.version>
            <slf4j.version>1.7.21slf4j.version>
        properties>
    
        
        <dependencies>
            
            <dependency>
                <groupId>org.apache.cxfgroupId>
                <artifactId>cxf-rt-frontend-jaxrsartifactId>
                <version>${cxf.version}version>
            dependency>
            
            <dependency>
                <groupId>org.apache.cxfgroupId>
                <artifactId>cxf-rt-transports-http-jettyartifactId>
                <version>${cxf.version}version>
            dependency>
    
            
            <dependency>
                <groupId>org.slf4jgroupId>
                <artifactId>slf4j-log4j12artifactId>
                <version>${slf4j.version}version>
            dependency>
    
            
            <dependency>
                <groupId>org.apache.cxfgroupId>
                <artifactId>cxf-rt-rs-clientartifactId>
                <version>${cxf.version}version>
            dependency>
    
            
            <dependency>
                <groupId>org.apache.cxfgroupId>
                <artifactId>cxf-rt-rs-extension-providersartifactId>
                <version>${cxf.version}version>
            dependency>
            
            <dependency>
                <groupId>org.codehaus.jettisongroupId>
                <artifactId>jettisonartifactId>
                <version>1.3.8version>
            dependency>
        dependencies>
        
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.pluginsgroupId>
                    <artifactId>maven-compiler-pluginartifactId>
                    <version>3.1version>
                    <configuration>
                        
                        <source>1.7source>
                        <target>1.7target>
                    configuration>
                plugin>
            plugins>
        build>    

    2.2 자원 - 실체 클래스 작성
    @ XmlRootElement 지정 직렬 화 (XML, JSON 변환) 대상 이름 입 니 다.
            //     (  XML、JSON)      
            //   :      
            //@XmlRootElement//     ,           ,    xml,   xml,   : name:      
            @XmlRootElement(name="users")//   :
            //      :123....
            //   json:{users:[{"id":"2342",...},{...}}
            public class User {
    
                private Integer id;
                private String username;
                private String password;
                private Integer age;

    2.3 SEI 업무
    첫 번 째 @ Path 서비스 방문 자원 경로 saveUser 방법 / userService / user 두 번 째 @ Produces 생 성 (방법 반환 값) @ Consumes 소비 (방법 매개 변수)@ Consumes 는 클 라 이언 트 가 전달 하 는 데이터 형식 을 처리 할 수 있 는 지 지정 합 니 다. @ Produces 는 클 라 이언 트 에 게 세 번 째 @ GET 조회 @ PUT 수정 @ POST 증가 @ DELETE 삭제 네 번 째 형식 을 지정 합 니 다. @ PathParam 은 URL 에서 온 경로 이 고 @ QueryParam 은 URL 에서 온 조회 매개 변수 입 니 다.
    //SEI   :    
            //    path,           "/mobile"
            @Path("/userService")//             :http://127.0.0.1:8888//userService/users/
            public interface UserService {
    
                //  CRUD  
                /**
                 *   :    
                 * @param user
                 */
                @Path("/users")//     
                @POST//      
                //    :setContenttype(....)
                //  :              
                @Consumes({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})
                //    
                public void saveUser(User user);
                /**
                 * 
                 *   :    
                 * @param user
                 */
                @Path("/users")
                @PUT//    
                //             
                @Consumes({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})
                public void updateUser(User user);
    
                /**
                 * 
                 *   :    id  
                 * @param id
                 */
                @Path("/users/{id}")
                @DELETE//  ,uri:/users/1
                @Consumes({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})//  
                public void deleteUser(@PathParam("id")Integer id);
    
                /**
                 * 
                 *   :        
                 * @return
                 */
                @Path("/users")
                @GET
                //  (  ):         
                @Produces({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})
                public List findUserList();
    
                /**
                 * 
                 *   :  id     
                 * @param id
                 * @return
                 */
                @Path("/users/{id}")
                @GET
                //   
                @Consumes({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})
                //   :
                @Produces({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})
                //127.0.0.1:8888/cxf_jaxrs/userService/users/1
                //        ,  ,        
                public User findUserById(@PathParam("id")Integer id);
    
    
                /**
                 * 
                 *   :      :/users?id=1
                 * @param id
                 * @return
                 */
                @Path("/usersparam")
                @GET
                //   
                @Consumes({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})
                //   :
                @Produces({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})
                public User findUserById2(@QueryParam("id")Integer id);
            }
    
            /**
             * SEI  
             */
            public class UserServiceImpl implements UserService {
    
                @Override
                public void save(User user) {
                    //  dao
                    System.out.println("----  :"+user);
                }
    
                @Override
                public void update(User user) {
                    //  dao
                    System.out.println("-----    :"+user);
                }
    
                @Override
                public void delete(Integer id) {
                    //  dao
                    System.out.println("-----   id:"+id);
                }
    
                @Override
                public List findUserList() {
                    List userList =  new ArrayList<>();
                    userList.add(new User(1,"jack","123",19));
                    userList.add(new User(2,"rose","1234",18));
                    return userList;
                }
    
                @Override
                public User findUserById(Integer id) {
                    System.out.println("----  id  ,id :"+id);
                    return new User(1,"jack","123",19);
                }
    
                @Override
                public User findUserById2(Integer id) {
                    System.out.println("----  id    ,id :"+id);
                    return new User(2,"rose","1234",18);
                }
    
            }

    2.4 게시 서비스
            public class CxfJaxRsServer {
    
                public static void main(String[] args) {
                    //   rest  
                    //1.        
                    JAXRSServerFactoryBean jaxrsServiceFactoryBean = new JAXRSServerFactoryBean();
                    //2.          
                    //2.1    
                    jaxrsServiceFactoryBean.setAddress("http://localhost:8888/cxf_jaxrs");
                    //2.2     
                    jaxrsServiceFactoryBean.setResourceClasses(User.class);
                    //2.3    .      
                    jaxrsServiceFactoryBean.setServiceBean(new UserServiceImpl());
    
                    //c       
                    jaxrsServiceFactoryBean.create();
                    System.out.println("rest     !");
    
                    //       :web  +    +    
    
                }
    
            }

    2.5 테스트
    브 라 우 저 테스트 (get 방법 테스트 만 가능) 모든 것 을 조회 합 니 다:http://localhost:8888/cxf_jaxrs/userService/users id 조회 (경로 방식):http://localhost:8888/cxf_jaxrs/userService/users/1 id 조회 (매개 변수 방식):http://localhost:8888/cxf_jaxrs/userService/users?id=1
    3. CXF 클 라 이언 트 개발
    클 라 이언 트 프로 그래 밍 은 두 가지 방법 이 있 습 니 다. 1) HttpClient 도 구 는 스스로 HTTP 프로 토 콜 내용 을 맞 춤 형 으로 분석 해 야 합 니 다.2) WebClient 도구 클래스 (CXF 자체) (사용).
    3.1 클 라 이언 트 호출 클래스
    주요 방법 설명: - create: 서비스 자원 경 로 를 호출 하고 연결 - type: 클 라 이언 트 가 서버 에 보 낸 데이터 (자원) 형식, 서버 의 @ consumes 에 대응 하 는 데이터 형식 - accept: 클 라 이언 트 가 서버 의 데이터 (자원) 형식, 서버 의 @ Produces 에 대응 하 는 데이터 형식 - get, post, put, delete 네 가지 방법,각각 HTTP 프로 토 콜 의 방식 으로 서버 에 접근 해 야 합 니 다.
            public class CxfRsClient {
    
                public static void main(String[] args) {
                    //----    
                    //create:        ,     
                    //type:            (  )  ,      @consumes     
                    //accept:           (  )  ,      @Produces     
                    //get,post,put,delete    ,      HTTP            。
    
                    //   :     :crud
                    //WebClient:      
                    //  
                    //new  
            //      User user = new User();
            //      user.setId(101);
            //      user.setUsername("xiaohong");
            //      user.setPassword("666");
            //      user.setAge(28);
            //      //     http://127.0.0.1:8888/cxf_jaxrs/userService/users
            //      //  :          
            //      WebClient.create("http://127.0.0.1:8888/cxf_jaxrs/userService/users")
            //      //   (     )
            //      .type(MediaType.APPLICATION_JSON)//      ,    ,     ,        
            //      .post(user)//        xml json
            //      ;
    
                    //  
            //      User user2 = new User();
            //      user2.setId(102);
            //      user2.setUsername("xiaohong2");
            //      user2.setPassword("6662");
            //      user2.setAge(28);
                    //  uri
            //      WebClient.create("http://127.0.0.1:8888/cxf_jaxrs/userService/users")
            //      .type(MediaType.APPLICATION_JSON)
            //      .put(user2);
    
                    //  
                    //  uri
            //      WebClient.create("http://127.0.0.1:8888/cxf_jaxrs/userService/users/1")
            ////        .path("/"+id);//   Stringbuffer .append("xxxx")
            //      .type(MediaType.APPLICATION_JSON)
            //      .delete();
    
                    //      
                    //  uri
            //      Collection extends User> userList = WebClient.create("http://127.0.0.1:8888/cxf_jaxrs/userService/users")
            //      //   (       ,      )
            //      .accept(MediaType.APPLICATION_JSON)
            ////        .get().getEntity()//    
            //      .getCollection(User.class);//    
            //      System.out.println(userList);
    
                    //  id      
                    //  uri
            //      User user = WebClient.create("http://127.0.0.1:8888/cxf_jaxrs/userService/users/1")
            //      //   
            //      .type(MediaType.APPLICATION_JSON)
            //      //   
            //      .accept(MediaType.APPLICATION_JSON)
            //      .get(User.class);//      
            //      System.out.println(user);
    
                    //               ,      。
                    int status = WebClient.create("http://127.0.0.1:8888/cxf_jaxrs/userService/users")
                    .accept(MediaType.APPLICATION_JSON)
                    .get()
                    .getStatus();
                    System.out.println(status);
    
    
                    System.out.println("       !");
    
            }

    4. CRM 시스템 의 CXF 서버 구축 개발 (spring 통합)
    4.1 SSH 기초 환경 구축
    기술 구조: Spring + Hibernate (spring 과 hibenate 직접 통합) + CXF + Oracle
    4.1.1 Maven 프로젝트 새로 만 들 기
    Maven 좌표 도입: Spring, Hibernate, 데이터베이스 와 연결 탱크, 로그, Servlet, JSP, Junit, 컴 파일 버 전 덮어 쓰기, tomcat 포트 덮어 쓰기 8888:
        <project xmlns="http://maven.apache.org/POM/4.0.0" 
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
            xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
            http://maven.apache.org/xsd/maven-4.0.0.xsd">
              <modelVersion>4.0.0modelVersion>
              <groupId>cn.aric.projectgroupId>
              <artifactId>crmartifactId>
              <version>0.0.1-SNAPSHOTversion>
              <packaging>warpackaging>
              <name>crmname>
              <description>        description>
              <properties>
                    <spring.version>3.2.12.RELEASEspring.version>
                    <hibernate.version>3.6.10.Finalhibernate.version>
                    <slf4j.version>1.7.5slf4j.version>
                    <c3p0.version>0.9.1.2c3p0.version>
                    <oracle.version>10.2.0.4.0oracle.version>
                    <servlet.version>2.5servlet.version>
                    <jsp.version>2.0jsp.version>
                    <junit.version>4.11junit.version>
                    <cxf.version>3.1.9cxf.version>
                properties>
                <dependencies>
                    <dependency>
                        <groupId>org.springframeworkgroupId>
                        <artifactId>spring-contextartifactId>
                        <version>${spring.version}version>
                    dependency>
                    <dependency>
                        <groupId>org.springframeworkgroupId>
                        <artifactId>spring-aspectsartifactId>
                        <version>${spring.version}version>
                    dependency>
                    <dependency>
                        <groupId>org.springframeworkgroupId>
                        <artifactId>spring-ormartifactId>
                        <version>${spring.version}version>
                    dependency>
                    <dependency>
                        <groupId>org.springframeworkgroupId>
                        <artifactId>spring-webartifactId>
                        <version>${spring.version}version>
                    dependency>
                    <dependency>
                        <groupId>org.springframeworkgroupId>
                        <artifactId>spring-testartifactId>
                        <version>${spring.version}version>
                    dependency>
                    <dependency>
                        <groupId>org.hibernategroupId>
                        <artifactId>hibernate-coreartifactId>
                        <version>${hibernate.version}version>
                    dependency>
                    <dependency>
                        <groupId>org.slf4jgroupId>
                        <artifactId>slf4j-log4j12artifactId>
                        <version>${slf4j.version}version>
                    dependency>
                    <dependency>
                        <groupId>c3p0groupId>
                        <artifactId>c3p0artifactId>
                        <version>${c3p0.version}version>
                    dependency>
                    <dependency>
                        <groupId>com.oraclegroupId>
                        <artifactId>ojdbc14artifactId>
                        <version>${oracle.version}version>
                        <scope>runtimescope>
                    dependency>
                    <dependency>
                        <groupId>javax.servletgroupId>
                        <artifactId>servlet-apiartifactId>
                        <version>${servlet.version}version>
                        <scope>providedscope>
                    dependency>
                    <dependency>
                        <groupId>javax.servletgroupId>
                        <artifactId>jsp-apiartifactId>
                        <version>${jsp.version}version>
                        <scope>providedscope>
                    dependency>
                    <dependency>
                        <groupId>junitgroupId>
                        <artifactId>junitartifactId>
                        <version>${junit.version}version>
                        <scope>testscope>
                    dependency>       
                    <dependency>
                        <groupId>javassistgroupId>
                        <artifactId>javassistartifactId>
                        <version>3.12.0.GAversion>
                    dependency>
                    
                    <dependency>
                        <groupId>org.apache.cxfgroupId>
                        <artifactId>cxf-rt-frontend-jaxrsartifactId>
                        <version>${cxf.version}version>
                    dependency>
                    
                    <dependency>
                        <groupId>org.apache.cxfgroupId>
                        <artifactId>cxf-rt-rs-extension-providersartifactId>
                        <version>${cxf.version}version>
                    dependency>
                    
                    <dependency>
                        <groupId>org.codehaus.jettisongroupId>
                        <artifactId>jettisonartifactId>
                        <version>1.3.8version>
                    dependency>   
                    
                    <dependency>
                        <groupId>org.apache.cxfgroupId>
                        <artifactId>cxf-rt-rs-clientartifactId>
                        <version>${cxf.version}version>
                    dependency>
                dependencies>
                <build>
                    <plugins>
                        <plugin>
                            <groupId>org.codehaus.mojogroupId>
                            <artifactId>tomcat-maven-pluginartifactId>
                            <version>1.1version>
                            <configuration>
                                <port>8888port>
                            configuration>
                        plugin>
                        <plugin>
                            <groupId>org.apache.maven.pluginsgroupId>
                            <artifactId>maven-resources-pluginartifactId>
                            <version>2.6version>
                            <configuration>
                                <encoding>UTF-8encoding>
                            configuration>
                        plugin>
                    
                        <plugin>
                            <groupId>org.apache.maven.pluginsgroupId>
                            <artifactId>maven-compiler-pluginartifactId>
                            <version>3.1version>
                            <configuration>
                                <source>1.7source>
                                <target>1.7target>
                            configuration>
                        plugin>
                    plugins>
                build>
            project>
        project>

    4.1.2 통합 spring
    Spring 통합 Hibernate 설정 (몇 가지 설정 파일: applicationContext. xml, db. properties, web. xml, log4j. properties 등)
    web.xml
        
            <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
            xmlns="http://java.sun.com/xml/ns/javaee" 
            xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
            http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
              <display-name>crmdisplay-name>
              
                <servlet>
                    <description>Apache CXF Endpointdescription>
                    <display-name>cxfdisplay-name>
                    <servlet-name>cxfservlet-name>
                    <servlet-class>org.apache.cxf.transport.servlet.CXFServletservlet-class>
                    <load-on-startup>1load-on-startup>
                servlet>
                <servlet-mapping>
                    <servlet-name>cxfservlet-name>
                    <url-pattern>/services/*url-pattern>
                servlet-mapping>
              
              <context-param>
                <param-name>contextConfigLocationparam-name>
                <param-value>classpath:applicationContext.xmlparam-value>
              context-param>  
              
              <listener>
                <listener-class>org.springframework.web.context.ContextLoaderListenerlistener-class>
              listener>
              <welcome-file-list>
                <welcome-file>index.jspwelcome-file>
              welcome-file-list>
            web-app>

    db.properties
            jdbc.driver=oracle.jdbc.driver.OracleDriver
            jdbc.url=jdbc:oracle:thin:@127.0.0.1:1521:xe
            jdbc.user=scott
            jdbc.password=tigger

    log4j.properties
            ### direct log messages to stdout ###
            log4j.appender.stdout=org.apache.log4j.ConsoleAppender
            log4j.appender.stdout.Target=System.err
            log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
            log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
    
            ### direct messages to file mylog.log ###
            log4j.appender.file=org.apache.log4j.FileAppender
            log4j.appender.file.File=d:/mylog.log
            log4j.appender.file.layout=org.apache.log4j.PatternLayout
            log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
    
            ### set log levels - for more verbose logging change 'info' to 'debug' ###
    
            log4j.rootLogger=info, stdout

    applicationContext.xml
    
            <beans xmlns="http://www.springframework.org/schema/beans"
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                xmlns:context="http://www.springframework.org/schema/context"
                xmlns:aop="http://www.springframework.org/schema/aop"
                xmlns:tx="http://www.springframework.org/schema/tx"
                xsi:schemaLocation="http://www.springframework.org/schema/beans 
                http://www.springframework.org/schema/beans/spring-beans.xsd
                http://www.springframework.org/schema/context
                http://www.springframework.org/schema/context/spring-context.xsd
                http://www.springframework.org/schema/aop
                http://www.springframework.org/schema/aop/spring-aop.xsd
                http://www.springframework.org/schema/tx 
                http://www.springframework.org/schema/tx/spring-tx.xsd">
    
                
                <context:property-placeholder location="classpath:db.properties"/>
                
                <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
                    <property name="driverClass" value="${jdbc.driver}"/>
                    <property name="jdbcUrl" value="${jdbc.url}"/>
                    <property name="user" value="${jdbc.user}"/>
                    <property name="password" value="${jdbc.password}"/>
                bean>
    
                
                <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
                    
                    <property name="dataSource" ref="dataSource"/>
                    
                    <property name="hibernateProperties">
                        <props>
                            <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialectprop>
                            <prop key="hibernate.hbm2ddl.auto">updateprop>
                            <prop key="hibernate.show_sql">trueprop>
                            <prop key="hibernate.format_sql">true prop>
                        props>
                    property>
                    
                    <property name="packagesToScan">
                        <list>
                            <value>cn.aric.crm.domainvalue>
                        list>
                    property>
                bean>
                
                <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
                    <property name="sessionFactory" ref="sessionFactory" />
                bean>
                
                <tx:annotation-driven transaction-manager="transactionManager"/>
    
                
                <context:component-scan base-package="cn.aric.crm.service,cn.aric.crm.dao"/>
    
                
                <import resource="applicationContext-cxf.xml"/>
            beans>

    4.2 새 실체 클래스
            @Entity
            @Table(name="t_customer",schema="scott")
            public class Customer {
    
                @Id
                @GeneratedValue(strategy=GenerationType.AUTO)//auto    
                private Integer id;//OID  
                private String name;//    
                private String address;//  
                private String telephone;//    
                private String decidedZoneId;//    (          )
    
                public Integer getId() {
                    return id;
                }
                public String getName() {
                    return name;
                }
                public String getAddress() {
                    return address;
                }
                public String getTelephone() {
                    return telephone;
                }
                public String getDecidedZoneId() {
                    return decidedZoneId;
                }
                public void setId(Integer id) {
                    this.id = id;
                }
                public void setName(String name) {
                    this.name = name;
                }
                public void setAddress(String address) {
                    this.address = address;
                }
                public void setTelephone(String telephone) {
                    this.telephone = telephone;
                }
                public void setDecidedZoneId(String decidedZoneId) {
                    this.decidedZoneId = decidedZoneId;
                }
    
            }

    위 설정 테스트, 서비스 시작, 자동 작성 표: tomcat: run
    4.3 CXF 환경 도입 \ # \ #
            <properties>        
                    <cxf.version>3.1.9cxf.version>
            properties>
            <dependencies>      
                
                <dependency>
                    <groupId>org.apache.cxfgroupId>
                    <artifactId>cxf-rt-frontend-jaxrsartifactId>
                    <version>${cxf.version}version>
                dependency>
                
                <dependency>
                    <groupId>org.apache.cxfgroupId>
                    <artifactId>cxf-rt-rs-extension-providersartifactId>
                    <version>${cxf.version}version>
                dependency>
                
                <dependency>
                    <groupId>org.codehaus.jettisongroupId>
                    <artifactId>jettisonartifactId>
                    <version>1.3.8version>
                dependency>   
                
                <dependency>
                    <groupId>org.apache.cxfgroupId>
                    <artifactId>cxf-rt-rs-clientartifactId>
                    <version>${cxf.version}version>
                dependency>
            dependencies>

    4.4 Spring 통합 CXF - RS 서비스
            @Entity
            @Table(name="t_customer",schema="SCOTT")
            @XmlRootElement(name="customer")
            public class Customer {
                @Id
                //         ,  oid    ,        
                //        ,        。
                @GeneratedValue(strategy=GenerationType.AUTO)//auto    
                //--  :  OID           
                //  String  ,           ,      (           ),   hibernate uuid  
                //   Integer,Long,     ,         ,           (         --hibernate  )。
                private Integer id;//OID  
                private String name;//    
                private String address;//  
                private String telephone;//    
                private String decidedZoneId;//    (          )

    4.4.1 SEI 작성
    @Path("/customerService")//         
                    @Produces({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})
            @Consumes({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})
            public interface CustomerService {
    
                //         
                /**
                 * 
                 *   :              
                 * @return
                 */
                @Path("/customers")//          
                @GET
                @Produces({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})
                public List findCustomerListNoDecidedZoneId();
                /**
                 * 
                 *   :              
                 * @return
                 */
                @Path("/customers/{decidedZoneId}")//          
                @GET
                @Produces({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})
                @Consumes({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})
                public List findCustomerListByDecidedZoneId(@PathParam("decidedZoneId")String decidedZoneId);
    
                /**
                 * 
                 *   :        ,      
                 * @param decidedZoneId:DQ001
                 * @param customerIds:       :2,3
                 */
                @Path("/customers/{decidedZoneId}/{customerIds}")//          
                @PUT
                @Produces({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})
                @Consumes({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})
                public void updateDecidedZoneIdByIds(@PathParam("decidedZoneId")String decidedZoneId,@PathParam("customerIds")String customerIds);
    
            }
    
            //SEI:        
            //          
            Service("customeService")
            @Transactional
            public class CustomerServiceImpl implements CustomerService{
                //  dao
                @Autowired
                private GenericDAO customerDAO;
    
                @Override
                public List findCustomerListNoDecidedZoneId() {
                    //    
                    DetachedCriteria criteria =DetachedCriteria.forClass(Customer.class)
                            .add(Restrictions.isNull("decidedZoneId"));
                    //  
                    return customerDAO.findByCriteria(criteria);
                }
    
                @Override
                public List findCustomerListByDecidedZoneId(String decidedZoneId) {
                    //    
                    DetachedCriteria criteria =DetachedCriteria.forClass(Customer.class)
                            .add(Restrictions.eq("decidedZoneId", decidedZoneId));
                    //  
                    return customerDAO.findByCriteria(criteria);
                }
    
                @Override
                public void updateDecidedZoneIdByIds(String decidedZoneId, String customerIds) {
                    //    
                    //====             (update)
                    //               
                    DetachedCriteria criteria =DetachedCriteria.forClass(Customer.class)
                            .add(Restrictions.eq("decidedZoneId", decidedZoneId));
                    List customerList = customerDAO.findByCriteria(criteria);
                    //  
                    for (Customer customer : customerList) {
                        customer.setDecidedZoneId(null);
                    }
    
                    //====             (update)
                    if(!StringUtils.isEmpty(customerIds)){
                        String[] customerArray = customerIds.split(",");
                        for (String customerId : customerArray) {
                            Customer customer = customerDAO.findById(Customer.class, Integer.parseInt(customerId));
                            customer.setDecidedZoneId(decidedZoneId);
                        }
                    }
    
                    //  flush
                }
        }
    

    4.4.2 DAO 작성
    대략.
    4.4.3 웹 xml 설정 (CXF 의 핵심 컨트롤 러)
            
            <servlet>
                <description>Apache CXF Endpointdescription>
                <display-name>cxfdisplay-name>
                <servlet-name>cxfservlet-name>
                <servlet-class>org.apache.cxf.transport.servlet.CXFServletservlet-class>
                <load-on-startup>1load-on-startup>
            servlet>
            <servlet-mapping>
                <servlet-name>cxfservlet-name>
                <url-pattern>/services/*url-pattern>
            servlet-mapping>
    
    cxf  :applicationContext-cxf.xml
    
            
            <beans xmlns="http://www.springframework.org/schema/beans"
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
                xmlns:jaxws="http://cxf.apache.org/jaxws"
                xmlns:jaxrs="http://cxf.apache.org/jaxrs"
                xmlns:jaxrsclient="http://cxf.apache.org/jaxrs-client"
                xsi:schemaLocation=" http://www.springframework.org/schema/beans 
                http://www.springframework.org/schema/beans/spring-beans.xsd 
                http://cxf.apache.org/jaxws 
                http://cxf.apache.org/schemas/jaxws.xsd
                http://cxf.apache.org/jaxrs
                http://cxf.apache.org/schemas/jaxrs.xsd
                http://cxf.apache.org/jaxrs-client
                http://cxf.apache.org/schemas/jaxrs-client.xsd">
                
                <import resource="classpath:META-INF/cxf/cxf.xml" />
                <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
    
                
    
                
                <jaxrs:server id="customerWebService" address="/CustomerWS" >
                    <jaxrs:serviceBeans>
                        <ref bean="customerService" />
                    jaxrs:serviceBeans>
                    
                    <jaxrs:inInterceptors>
                        <ref bean="loggingInInterceptor"/>
                    jaxrs:inInterceptors>
                    
                    <jaxrs:outInterceptors>
                        <ref bean="loggingOutInterceptor" />
                    jaxrs:outInterceptors>
                jaxrs:server>
                
                <bean id="loggingInInterceptor" class="org.apache.cxf.interceptor.LoggingInInterceptor">bean>
                
                <bean id="loggingOutInterceptor" class="org.apache.cxf.interceptor.LoggingOutInterceptor">bean>
            beans>

    4.4.4 테스트
    테스트 접근 경로: 웹 컨 텍스트 + cxf 전단 컨트롤 러 + 설정 한 서비스 경로 + 클래스 의 구체 적 인 서비스 경로 웹 컨 텍스트 + cxf 전단 컨트롤 러 + 설정 한 서비스 경로 + 클래스 의 구체 적 인 서비스 경로 + 자원 경로 (방법 상)
    SoapUI - 웹 서 비 스 를 위 한 디 버 깅 도구, Encoding 을 사용 하여 UTF - 8 을 변경 합 니 다.
    5. BOS 시스템 의 CXF 클 라 이언 트
    5.1 프로젝트 에 CXF 개발 환경 도입
    Maven 좌표 도입 (Pom. xml):
            <cxf.version>3.1.9cxf.version>
    
            
            <dependency>
                <groupId>org.apache.cxfgroupId>
                <artifactId>cxf-rt-rs-extension-providersartifactId>
                <version>${cxf.version}version>
            dependency>
            
            <dependency>
                <groupId>org.codehaus.jettisongroupId>
                <artifactId>jettisonartifactId>
                <version>1.3.8version>
            dependency>   
            
            <dependency>
                <groupId>org.apache.cxfgroupId>
                <artifactId>cxf-rt-rs-clientartifactId>
                <version>${cxf.version}version>
            dependency>

    5.2 CXF - RS 의 클 라 이언 트 개발
    5.2.1 도 메 인 작성
            //dto
            @XmlRootElement(name="customer")
            public class Customer {
                private Integer id;//OID  
                private String name;//    
                private String residence;//  
                private String telephone;//    
                private String decidedZoneId;//    (          )

    5.2.2 JSp 작성
    대략.
    5.2.3 배경 코드
        //           
        @Action("decidedZone_listCustomerListNoDecidedZoneId")
        public String listCustomerListNoDecidedZoneId(){
            //    webservice  
            //      
            WebClient webClient = WebClient.create("http://localhost:8888/crm/services");
            Collection extends Customer> collection = webClient
            .path("/crmService/customerService")//    
            .path("/customers")//    
            .accept(MediaType.APPLICATION_JSON)//         
            .type(MediaType.APPLICATION_JSON)//        ,java         
            .getCollection(Customer.class);
    
            //    
            pushToValuestackRoot(collection);
            //json  
            return JSON; //JSON        
        }
        //           
        @Action("decidedZone_listCustomerListHasDecidedZoneId")
        public String listCustomerListHasDecidedZoneId(){
            //    webservice  
            //      
            WebClient webClient = WebClient.create("http://localhost:8888/crm/services");
            Collection extends Customer> collection = webClient
            .path("/crmService/customerService")//    
            .path("/customers")//    
            .path("/"+model.getId())
            .accept(MediaType.APPLICATION_JSON)//         
            .type(MediaType.APPLICATION_JSON)//        ,java         
            .getCollection(Customer.class);
    
            //    
            pushToValuestackRoot(collection);
            //json  
    
            return JSON;

    좋은 웹페이지 즐겨찾기