[java] Apache CXF의 WSDL-first 웹 서비스 개발

Apache CXF는 Java로 웹 서비스를 개발하기 위한 오픈 소스 프레임워크로서, WSDL-first 방식을 지원합니다. WSDL-first 개발은 먼저 웹 서비스의 정의를 하는 WSDL 파일을 작성하고, 이를 기반으로 서비스를 개발하는 방식을 말합니다.

이번 글에서는 Apache CXF를 사용하여 WSDL-first 방식으로 웹 서비스를 개발하는 과정에 대해 살펴보겠습니다.

1. Apache CXF 설치

먼저 Apache CXF를 설치해야 합니다. Apache CXF는 Maven을 통해 간단히 설치할 수 있습니다. 다음은 Maven을 사용하여 Apache CXF를 추가하는 예제입니다.

<dependencies>
    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-frontend-jaxws</artifactId>
        <version>3.4.2</version>
    </dependency>
</dependencies>

2. WSDL 작성

다음으로, 웹 서비스의 정의를 하는 WSDL 파일을 작성해야 합니다. WSDL은 XML 기반의 문서로, 서비스의 인터페이스와 메시지 포맷을 정의합니다. 아래는 간단한 WSDL 예제입니다.

<definitions name="HelloService"
             targetNamespace="http://example.com"
             xmlns="http://schemas.xmlsoap.org/wsdl/"
             xmlns:tns="http://example.com"
             xmlns:xsd="http://www.w3.org/2001/XMLSchema"
             xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">

    <message name="helloRequest">
        <part name="name" type="xsd:string"/>
    </message>

    <message name="helloResponse">
        <part name="greeting" type="xsd:string"/>
    </message>

    <portType name="HelloPortType">
        <operation name="sayHello">
            <input message="tns:helloRequest"/>
            <output message="tns:helloResponse"/>
        </operation>
    </portType>

    <binding name="HelloBinding" type="tns:HelloPortType">
        <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
        <operation name="sayHello">
            <soap:operation soapAction="urn:sayHello"/>
            <input>
                <soap:body use="literal"/>
            </input>
            <output>
                <soap:body use="literal"/>
            </output>
        </operation>
    </binding>

    <service name="HelloService">
        <port name="HelloPort" binding="tns:HelloBinding">
            <soap:address location="http://localhost:8080/helloService"/>
        </port>
    </service>

</definitions>

3. WSDL을 기반으로 웹 서비스 개발

WSDL을 작성했다면, Apache CXF를 사용하여 해당 WSDL을 기반으로 Java 인터페이스 및 서비스를 생성할 수 있습니다. 다음은 Maven을 사용한 예제입니다.

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-codegen-plugin</artifactId>
            <version>3.4.2</version>
            <executions>
                <execution>
                    <id>generate-sources</id>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>wsdl2java</goal>
                    </goals>
                    <configuration>
                        <wsdlOptions>
                            <wsdlOption>
                                <wsdl>${basedir}/src/main/resources/HelloService.wsdl</wsdl>
                            </wsdlOption>
                        </wsdlOptions>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

위의 설정을 추가한 후 Maven을 실행하면, WSDL을 기반으로 Java 소스코드가 생성됩니다.

4. 웹 서비스 구현

마지막으로, WSDL을 기반으로 생성된 Java 소스코드를 사용하여 실제로 웹 서비스를 구현할 수 있습니다. Apache CXF의 JAX-WS를 사용하여 간단한 웹 서비스를 구현하는 예제는 아래와 같습니다.

@WebService
public class HelloService {
    
    @WebMethod
    public String sayHello(String name) {
        return "Hello, " + name + "!";
    }
}

요약

이렇게 Apache CXF를 사용하여 WSDL-first 방식으로 웹 서비스를 개발할 수 있습니다. WSDL-first 방식은 서비스의 명세를 명확히 정의할 수 있으며, Apache CXF를 통해 손쉽게 해당 WSDL을 기반으로 웹 서비스를 구현할 수 있습니다.

참고문헌: