11.WebApplication(eGovFrame) 에서 X-UP 사용하기

Edit

이 장에서는 SAP RFC Invoke를 이용한 모델 개발하기절에서 만든 모델을 사용하여 WebApplication에서 X-UP 에 존재하는 모델을 사용하는 방법에 대해 설명합니다.

이번 장은 eGovFrame 2.6.0을 기준으로 작성되었으며, 사용자가 WebApplication 개발에 익숙하다는 전제하에 작성 되었습니다.

이 장에서 설명하는 X-UP Builder를 이용한 X-UP 사용 어플리케이션 개발단계는 다음과 같습니다.

11.1WebApplication 생성

WebApplication 에 X-UP을 설정하기 위해선 하나의 WebApplication이 필요합니다.

프로젝트를 생성하기 위하여 File > new eGovFrame Web Project 를 선택합니다.

Project 명을 명시하고 next 버튼을 클릭합니다.

Generate Example (EgovSampleController.java) 를 통해 예제를 생성합니다.

생성된 프로젝트의 모습입니다.

11.2WebApplication 에 X-UP 적용

WebApplication에 X-UP을 적용하기 위해선 다음과 같은 순서로 진행됩니다.

xup.war의 내용을 압축을 풀어 xup/WEB-INF/lib 폴더 하단의 library를 생성된 프로젝트의 src/main/webapp/WEB-INF/lib 하단으로 copy 합니다.

X-API를 사용하기 위해 발급 받은 XPLATFORM_Server_License.xml 파일을 lib 폴더 아래에 복사합니다.

WebApplication에서 사용하기 위해 해당 library 파일들을 Build Path에 추가합니다.

xup.war의 압축이 풀어진 xup/WEB-INF 하단의 xup 폴더를 src/main/webapp/WEB-INF 하단으로 copy 합니다.

Copy 된 후 해당 프로젝트에 생성된 디렉토리 구조 및 파일은 다음과 같습니다.

X-UP을 사용하기 위해 발급 받은 X-UP_Server_License.xml 파일을 src/main/webapp/WEB-INF/xup/conf/ 디렉토리 하단으로 copy 합니다.

추가적으로 X-UP의 모든 기능을 사용하기 위해 X-UP 의 Servlet을 web.xml에 등록합니다.

Servlet의 명칭은 FrontControllerServlet이며, 해당 Servlet의 url-pattern은 eGovFrame에서 제공하는 Dispatcher-Servlet의 url-pattern과 명칭이 동일하기 때문에 ‘.xup’ 으로 변경합니다.

xup.war 파일에 존재하는 web.xml 안의 servlet 정보를 전자정부의 web.xml에 추가해 줍니다.

xup/WEB-INF/web.xml > src/main/webapp/WEB-INF/web.xml
<servlet>
    <servlet-name>action</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/config/egovframework/springmvc/dispatcher-servlet.xml,/WEB-INF/config/egovframework/springmvc/urlfilename-servlet.xml
        </param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>*.do</url-pattern>
</servlet-mapping>

<servlet>
    <servlet-name>FrontControllerServlet</servlet-name>
    <servlet-class>com.nexacro.xup.service.FrontControllerServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>FrontControllerServlet</servlet-name>
    <url-pattern>/FrontControllerServlet.xup</url-pattern>
</servlet-mapping>
<servlet>
    <servlet-name>DeploymentServiceServlet</servlet-name>
    <servlet-class>com.nexacro.xup.service.DeploymentServiceServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>DeploymentServiceServlet</servlet-name>
    <url-pattern>/DeploymentServiceServlet.xup</url-pattern>
</servlet-mapping>
<servlet>
   <servlet-name>ServiceInfoServiceServlet</servlet-name>
  <servlet-class>com.nexacro.xup.service.ServiceInfoServiceServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>ServiceInfoServiceServlet</servlet-name>
    <url-pattern>/ServiceInfoServiceServlet.xup</url-pattern>
</servlet-mapping>
    
<servlet>
    <servlet-name>ManageServiceServlet</servlet-name>
    <servlet-class>com.nexacro.xup.service.ManageServiceServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>    
<servlet-mapping>
    <servlet-name>ManageServiceServlet</servlet-name>
    <url-pattern>/ManageServiceServlet.xup</url-pattern>
</servlet-mapping>

또한 X-UP의 관리자 기능을 사용한다면 xup.war에 존재하는 xup_manage_ui 폴더 및 index.jsp를 WEB-INF 폴더 아래에 복사합니다.

설정된 최종 화면은 다음과 같습니다.

11.3SAP RFC Invoke 를 이용한 모델 개발 하기

SAP RFC Invoke를 개발하기 위해선 다음 SAP RFC Invoke를 이용한 모델 개발하기을 참조합니다.

11.4WebApplication 서버에 개발된 모델을 Export하기

WebApplication 서버에 개발된 모델을 Export 하기 위한 방법을 명시합니다.

우선, 전자정부 프레임워크 우측 상단에 위치한 Perspective를 X-UP으로 변경합니다.

WAS를 구동한 후 Window > Preference > X-UP > Export Path를 설정합니다.

설정 예)

C:\workspace\com.nexacro.xi.connector\src/main/webapp/WEB-INF/xup/model

Export Path 설정 후 'NexawebInc' 프로젝트에서 마우스 오른쪽 버튼 클릭을 하면 다음과 같은 화면이 나타납니다.

Export Generated Files를 클릭하면 하단부 그림과 같이 NexawebInc 프로젝트가 복사됩니다.

11.5WebApplication에서 모델 호출하기

WebApplication에서 모델을 호출하기 위해서 다음과 같은 Controller를 생성합니다.

아래의 코드를 통해 개발된 X-UP 모델을 호출할 수 있습니다.

package egovframework.rte.cmmn.web;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import com.nexacro.xapi.data.PlatformData;
import com.nexacro.xapi.tx.HttpPlatformRequest;
import com.nexacro.xapi.tx.HttpPlatformResponse;
import com.nexacro.xup.connector.XIConnector;
import com.nexacro.xup.service.xi.XIServiceRequest;
import com.nexacro.xup.service.xi.XIServiceResponse;

@Controller
public class XIServiceController {

    @RequestMapping(value="/xi/getFlightList.do")
    public String getFlightList(HttpServletRequest request, HttpServletResponse response) throws Exception {
        // HttpServletRequest를 이용하여 HttpPlatformRequest 생성
        HttpPlatformRequest req = new HttpPlatformRequest(request);
        // XML 데이터 분석
        req.receiveData();
        // 데이터를 PlatformData 형태로 저장
        PlatformData platformData = req.getData();

        String domainName = "NexawebInc";
        String modelName = "INVOKE_SAP_RFC";
        
        // XIConnector 생성
        XIConnector connector = XIConnector.getConnector();
        // X-UP 으로 전송하기 위한 Request 생성
        XIServiceRequest serviceRequest = connector.createXIRequest(domainName, modelName, platformData);

        XIServiceResponse serviceResponse = (XIServiceResponse)connector.execute(serviceRequest);
        PlatformData resultPlatformData = serviceResponse.getPlatformData();

        //HttpServletResponse를 이용하여 HttpPlatformResponse 생성
        HttpPlatformResponse res = new HttpPlatformResponse(response);
        res.setData(resultPlatformData);
        //데이터 송신
        res.sendData();
        return null;
    }
}

11.6테스트 하기

개발된 Controller를 호출하여 X-UP 모델을 정상적으로 호출하는지 확인합니다.

호출하기 위해 getStockList 메서드의 RequestMapping 의 value 값으로 호출합니다.

브라우저에서 확인하기 위한 url 은 다음과 같습니다.

http://localhost:8080/connector/xi/getFlightList.do

대상 WAS 서버 / ApplicationContext 이름 / RequestMapping

결과 데이터를 확인합니다. (sample)

다음과 같은 에러가 발생할 경우에는 사용하는 OS Platform, JRE, SAP DLL 버전을 32비트 또는 64비트로 동일하게 설정합니다.

caused by java.lang.NoClassDefFoundError :

message=Could not initialize class com.sap.conn.jco.rt.JCoRuntimeFactory

혹은 Error getting the version of the native layer:

java.lang.UnsatisfiedLinkError: no sapjco3 in java.library.path