티스토리 뷰

728x90

'어떻게 자바 클래스를 생성하는 것이 좋은방법일까'에 대한 내용이다. WS는 사용해 볼 기회가 거의 없어 그렇게 경험과 지식이 많지 않음을 이해하기 바란다.

1. 가장 최신 버전의 스프링 부트를 사용한다.현재 3.0.1이 최신이다.  스프링 부트 web service starter에는  spring ws가 포함되어 있는데 JAVA WS 구현이 포함되어 있다 .그래서 최신버전의 경우는 jakarta로 시작하는 ws 패키지를 볼 수 있다. Spring boot 2.6까지는 jaxb 모듈이 jakarta 표준을 따르지 않고 예전 버전을 사용하기 때문에 jaxb 2.3.1버전을 사용하여 javax.xml.bind 같이 javax로 시작하는 패키지를 포함해야 한다.

2. 다시 말하면 스프링에서 사용하는 jakarta나 java ee에 맞게 jaxb 모듈을 선택해야 한다는 의미다. jaxb모듈에서 wsdl로 자바 클래스를 생성하는 툴이나 maven plugin을 찾을 수 있다.

3. 현재 최신 버전의 스프링 부트3.0.1 버전에서 사용하는 jakarta 버전은 인터넷에서 쉽게 검색할 수 있다. SOAP을 이용한 WS를 개발하는 것은 어떻 방식으로 해도 다 돌아가기 마련이기 때문에 ws라이브러리와 jaxb 라이브러리 호환성에 신경쓰는 것이 가장 중요한 부분이다.

4. 다만 자바표준의 구현과 플러그인의 구현 출처를 통일시키는 것은 필요하다. jakarta에서 java ee 표준을 생성하기 때문에 이것을 관리하는 eclipse 그룹의 플러그인이 가장 신뢰가 간다. 그리고 예전의 자바 JDK에 포함된 것과 동일하게 이름이 무려 wsimport이다. wdsl2java, wdsl4java와 같은 아류보다 신뢰가 간다.

5. 아래는 스프링 부트 3.0.1에서 돌아가는 pom.xml이다. 아래는 하나의 wsdl로 만들어진 서비스에 대한 설정인데 멀티 wsdl설정도 가능하다. 아래의 경우 Information, Reservation 두 서비스에 대한 클래스 패키지를 생하는 예를 보여주고 있다. 최신 스프링 3.0.1에 걸맞게 jaxws-maven-plugin의 최신버전 4.0.0을 사용하고 있다.

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.0.1</version>
    <relativePath /> <!-- lookup parent from repository -->
  </parent>
  <groupId>h2o.imgate</groupId>
  <artifactId>operaconsumer</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>operaconsumer</name>
  <description>Demo project for Spring Boot</description>
  <properties>
    <java.version>17</java.version>
    <jaxws-maven-plugin.version>4.0.0</jaxws-maven-plugin.version>
  </properties>
  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web-services</artifactId>
    </dependency>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-devtools</artifactId>
      <scope>runtime</scope>
      <optional>true</optional>
    </dependency>
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <optional>true</optional>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <configuration>
          <excludes>
            <exclude>
              <groupId>org.projectlombok</groupId>
              <artifactId>lombok</artifactId>
            </exclude>
          </excludes>
        </configuration>
      </plugin>
      <plugin>
        <groupId>com.sun.xml.ws</groupId>
        <artifactId>jaxws-maven-plugin</artifactId>
        <version>${jaxws-maven-plugin.version}</version>
        <configuration>
          <wsdlDirectory>${basedir}/src/main/resources</wsdlDirectory>
          <sourceDestDir>${basedir}/src/main/java</sourceDestDir>
          <extension>true</extension>
        </configuration>
        <executions>
          <execution>
            <id>Reservation</id>
            <phase>generate-sources</phase>
            <goals>
              <goal>wsimport</goal>
            </goals>
            <configuration>
              <wsdlUrls>
                <wsdlUrl>http://-.-.-.-:-/-/Reservation.asmx?wsdl</wsdlUrl>
              </wsdlUrls>
              <packageName>-.service.reservation</packageName>
              <extension>true</extension>
            </configuration>
          </execution>
          <execution>
            <id>Information</id>
            <phase>generate-sources</phase>
            <goals>
              <goal>wsimport</goal>
            </goals>
            <configuration>
              <wsdlUrls>
                <wsdlUrl>http://-.-.-.-:-/-//Information.asmx?wsdl</wsdlUrl>
              </wsdlUrls>
              <packageName>-.service.information</packageName>
              <extension>true</extension>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>
728x90
댓글