웹 서비스 (2) - Spring + CXF 발표 WS

7833 단어 springCXF
1. tomcat 용기 에 Spring + CXF 를 사용 하여 WS 발표
CXF 는 Apache 산하 매우 우수한 웹 서비스 오픈 소스 프레임 워 크 로 경량급 의 특성 을 가지 고 있 으 며, spring 에 빈 틈 없 이 통합 할 수 있다.
CXF 는 Celtix 와 XFire 의 통합 이 고 전 자 는 ESB 프레임 워 크 이 며 후 자 는 웹 서비스 프레임 워 크 입 니 다. 다음은 CXF 와 Spring 의 통합 에 중심 을 두 고 소개 하 겠 습 니 다.
첫 번 째 단계: maven 의존 설정:
<?xml version="1.0" encoding="UTF-8"?>
<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.0</modelVersion>
    <packaging>war</packaging>
    <version>1.0-SNAPSHOT</version>

    <name>spring-cxf</name>
    <groupId>com</groupId>
    <artifactId>spring-cxf</artifactId>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <spring.version>4.0.5.RELEASE</spring.version>
        <cxf.version>3.0.0</cxf.version>
        <jackson.version>2.4.1</jackson.version>
    </properties>

    <dependencies>
        <!-- Spring -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <!-- CXF -->
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-frontend-jaxws</artifactId>
            <version>${cxf.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-frontend-jaxrs</artifactId>
            <version>${cxf.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-transports-http</artifactId>
            <version>${cxf.version}</version>
        </dependency>

        <!--jackson-->
        <dependency>
            <groupId>com.fasterxml.jackson.jaxrs</groupId>
            <artifactId>jackson-jaxrs-json-provider</artifactId>
            <version>${jackson.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-rs-extension-providers</artifactId>
            <version>${cxf.version}</version>
        </dependency>
    </dependencies>

</project>

두 번 째 단계: WS 인터페이스 와 그 실현 을 작성 합 니 다.
@WebService
public interface HelloService {

    String say(String name);
}

구현 인터페이스:
@WebService
@Component
public class HelloServiceImpl implements HelloService {

    public String say(String name) {
        return "hello " + name;
    }
}

구현 클래스 에 @ Component 주 해 를 추가 해 야 Spring IOC 용기 에서 스 캔 할 수 있 습 니 다. spring bean 이 라 고 생각 하고 Bean ID 에 따라 인 스 턴 스 를 얻 을 수 있 습 니 다.
세 번 째 단계: 웹. xml 설정
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
         http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         version="3.0">

  <!-- Spring -->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring.xml</param-value>
  </context-param>

  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>

  <!-- CXF -->
  <servlet>
    <servlet-name>cxf</servlet-name>
    <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>cxf</servlet-name>
    <url-pattern>/ws/*</url-pattern>
  </servlet-mapping>

</web-app>

그래서 / ws 접두사 가 있 는 요청 은 모두 CXFServlet 에 의 해 처 리 됩 니 다.
4 단계: spring 설정
<?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:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context-4.0.xsd">

       <context:component-scan base-package="com.*"/>

       <import resource="spring-cxf.xml"/>

</beans>

STEP 5: CXF 설정
<?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:jaxws="http://cxf.apache.org/jaxws"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
       http://cxf.apache.org/jaxws
       http://cxf.apache.org/schemas/jaxws.xsd">

       <!--HelloService-->
       <jaxws:server id="helloService" address="/soap/hello">
              <jaxws:serviceBean>
                     <ref bean="helloServiceImpl"/>
              </jaxws:serviceBean>
       </jaxws:server>

    
       <bean id="helloServiceImpl" class="com.HelloServiceImpl"/>
      
</beans>

CXF 가 제공 하 는 spring 네 임 스페이스, 즉 jaxws: server 를 통 해 ws, address 가 요청 한 경로 정 보 를 발표 합 니 다.
STEP 6: tomcat 시작
tomcat 에 응용 프로그램 을 배치 하고 브 라 우 저 에 다음 주 소 를 입력 하면 CXF 콘 솔 에 들 어 갈 수 있 습 니 다.
http://localhost:8080/spring-cxf/ws

통과 하 다.http://localhost:8080/spring- cxf / ws / soap / hello? wdl 은 WSDL 을 볼 수 있 습 니 다.
현재 CXF 를 통 해 웹 서 비 스 를 성공 적 으로 발표 하 였 습 니 다. 클 라 이언 트 를 통 해 이 endpoint 를 어떻게 호출 하 는 지 소개 하 겠 습 니 다.
2. CXF 가 제공 하 는 WS 클 라 이언 트
클 라 이언 트 호출 에 대해 우 리 는 주로 동적 에이전트 의 방식 을 소개 합 니 다.
public class DynamicClient {

    public static final String END_POINT = "http://localhost:8080/spring-cxf/ws/soap/hello?wsdl";

    public static void main(String[] args) {
        DynamicClientFactory factory = DynamicClientFactory.newInstance();
        Client client = factory.createClient(END_POINT);

        try {
            Object[] results = client.invoke("say", "world");
            System.out.println(results[0]);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

3. 총화
앞의 소 개 를 통 해 우 리 는 Spring + CXF 의 통합 이 발표 WS 를 더욱 간단 하고 구체 적 으로 네 가지 절차 로 나 눌 수 있다 는 것 을 알 게 되 었 다.
  • 웹. xml 설정
  • WS 인터페이스 작성 및 구현
  • CXF 의 endpoint 설정
  • 웹 용기 시작
  • 다음은 CXF 를 이용 한 REST 서비스 개발 을 소개 하 겠 습 니 다.

    좋은 웹페이지 즐겨찾기