728x90

넥사크로 파일업로드 구현시 Controller 에서 넥사크로에서 전송하는 데이터셋을 받지 못하는 현상이 발생되어

해결방안을 공유하고자 글을 남긴다.

 

현재 만들어진 업로드 공통모듈에서 서버로 전송되는 패킷은 아래와 같이 확인되었습니다.

request 패킷을 보고 일단 XML 포멧에 쓰레기 코드가 들어있어서 안되는거구나 했는데.. 

 

혹시 Controller 서버단에서 Request 를 뒤져보니 parameterMap 에 데이터가 있는걸 보고 아래와 같이 코딩하여 해결함.

 

아래 소스 참고하시고 전체 소스는 첨부 공유할께요.

        MultipartHttpServletRequest multipartRequest     = (MultipartHttpServletRequest) request;

        //--------------------------------------------------------------------------
        // DataSet 받아오기
        //--------------------------------------------------------------------------
        PlatformData nexacroData = new PlatformData();
        
        String inputDatasets = null;
        
        Map<String, String[]> m = multipartRequest.getParameterMap();
        Iterator<String> i = m.keySet().iterator();
        while(i.hasNext()) {
            String k   = i.next();
            String[] v = m.get(k);
            
            if( "inputDatasets".equals(k) ) {
                inputDatasets = v[0];
            }
        }
        
        nexacroData.loadXml(inputDatasets);
        
        com.nexacro.java.xapi.data.DataSetList inputDataSet = nexacroData.getDataSetList();
        com.nexacro.java.xapi.data.DataSet dsUpload = inputDataSet.get("dsUpload");        
        
        logger.info("### dsUpload DataSet : " + dsUpload.saveXml());
        //--------------------------------------------------------------------------

 

[첨부파일]

StorageController.java
0.01MB

 

 

728x90
반응형
728x90

현재 프로젝트에서 주소를 검색한 결과를 그리드에 바인딩해주는 작업을 하는데 CROS 정책위반 오류가 발생되어 해결방안을 공유한다.

 

그림으로 공유를 먼저하면 아래와 같다.

 

서로 다른 도메인에서 데이터 요청, 반환되는 Json 데이터를 Dataset 에 바인딩하고 그리드에 표시하는 작업이었다.

 

넥사크로 컴포넌트에 DataObject 가 반환된 Json 데이터를 Dataset 바인딩까지 해주는 녀석이다.

 

DataObject 컴포넌트 설명은 아래 링크에서 참고하면 되겠다.

http://docs.tobesoft.com/developer_guide_nexacro_17_ko#124526e754a76021

 

넥사크로플랫폼 17 컴포넌트 활용 워크북 17.1.2.200

이 내용이 얼마나 도움이 되셨나요? 피드백이 기록되었습니다. 감사합니다. 전혀 도움이 되지 않음도움이 되지 않음조금 도움이 됨도움이 됨매우 도움이 됨

docs.tobesoft.com

 

지도 API 를 호출한 결과 아래와 같은 CORS 오류를 만나게 되었다. 알고 보니 해결방법은 여러가지.. 해결은 안됨..

 

Access to XMLHttpRequest at 'https://api.routo.com/v1/findpostcode?latlng=37.53491388888889, 126.9518527777&key=XXXXXXXX' from origin 'http://localhost:8080' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: Redirect is not allowed for a preflight request.

10499 : 로딩하는 중에 에러가 발생하였습니다. 주소가 정확한지 확인하고 다시 시도하십시오. 경로 [http://10.5.150.93/map/data/sample.html] 상태코드 [10499]

 

 

해결은 의외로 너무 간단하게 되었다. 아래 가이드를 보면 빨간색 점선을 참고하면 된다.

async 기본값이 true 이며 이 값을 false 로 변경하니 잘 되었다.

 

이상 끝 ~~~~~~~~~~

728x90
반응형
728x90

현재 프로젝트에서 UINexacro 기반으로 진행중이고 지도는 순수 Web, Jquery 모듈도 사용해야하는데..

알아보니 Nexacro 컴포넌트중에 WebBrowser 를 사용하여 웹과 데이터를 주고 받고 함수 호출까지 가이드가 있다고 하니 사용해 보았다.

설명하기에 앞서 넥사크로와 웹 데이터 송수신이라고 하니 좀 거창해보이지만 알고나면 별거 없다.

넥사크로 가이드에 따라하기가 힘들뿐...

 

내가 개발하고했던 데이터 흐름은 아래 그림과 같았다.

 

대략 소스기반으로 설명 하자면........

 

 

Nexacro(팝업창) 기준으로 더 설명하면........... 

 

UI 구조

구현된 UI

 

 

소스는 첨부하지 못하고 구현시 필요한 소스만 공유한다.

 

 

Nexacro.xfdl 

 

this.wbRouto_onusernotify = function(obj:nexacro.WebBrowser,e:nexacro.WebUserNotifyEventInfo)
{
    if(e.userdata){
        
        var params = {};
        
        switch(e.userdata.type){
            case 1: case 3: case 5:
                console.log("1번");
            break;
                    
            case 'initParam':
                params.wbFn = 'fnSetInitMap';
                params.fnParams = {};
                params.fnParams.LAT  = this.gfnGetArgument('LAT');
                params.fnParams.LON  = this.gfnGetArgument('LON');
                params.fnParams.ADDR = this.gfnGetArgument('ADDR');
                params.fnParams.BTNS = this.gfnGetArgument('BTNS');
                this.wbCallMethod( params );
            break;
            default:
                console.log("3번");
            break;
        }
    }
};

this.wbCallMethod = function( obj ){
    
    var wb = this.wbRouto.getProperty("window");
        wb.callMethod(obj.wbFn, obj.fnParams);
    
    if(wb){
        wb.destroy();
        wb = null;
    }    
};

 

 

Web.html 

 

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="X-UA-Compatible" content="IE=Edge">
    <meta charset="UTF-8">
    <meta name="viewport" content="user-scalable=1, initial-scale=0.1, width=device-width, target-densitydpi=device-dpi">
    <title>DEMO</title>
</head>
<body>
    웹 화면입니다.
<script src="https://code.jquery.com/jquery-3.5.1.js"></script>
<script src="//code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<script src="js/com/initialize.js"></script>
</body>
</html>

 

initialize.js 

    //--------------------------------------------------------------------------------------------------------
    if (!window.NEXACROHTML){
        window.NEXACROHTML = {};
    }
    
    window.NEXACROHTML.FireUserNotify = function(userdata){    
            
        if (window.NEXACROWEBBROWSER){
            window.NEXACROWEBBROWSER.on_fire_onusernotify(window.NEXACROWEBBROWSER, userdata);
        }else{
            window.document.title = userdata;
        }
    }
    
    window.NEXACROHTML.Init = function() {
        var cnt = 0;
        var interval = setInterval(function() {            
            
            if(cnt >= 10 || window.NEXACROWEBBROWSER) {
                clearInterval(interval);
                fnInit();
              }
            cnt++;
        }, 100);
    }    
    //--------------------------------------------------------------------------------------------------------
    
    /**
     * @description Nexa -> Web 
     *              넥사로부터 설정파일을 불러온다.
     */          
    function fnSetInitMap( obj ){

        if(obj){
            REQ_INIT_LAT  = parseFloat(obj.LAT);
            REQ_INIT_LON  = parseFloat(obj.LON);            
            REQ_INIT_ADDR = obj.ADDR;
            REQ_BTNS      = obj.BTNS;
            
            // 프로젝트 로직 구현이 필요합니다. 
        }else{
            // 프로젝트 로직 구현이 필요합니다.
        }

    }
    
    /**
     * @description 초기함수 호출 ( Web -->> Nexa ) 
     */          
    function fnInit(){
        var params = {};
            params.type = 'initParam';
        
        if( window.NEXACROWEBBROWSER == undefined ){
            window.NEXACROHTML.Init();
            return;
        }else{
            // 프로젝트 로직 구현이 필요할 수 있습니다.
        }
        
        // 지도생성 전 파라미터 가져오기        
        window.NEXACROHTML.FireUserNotify( params );
    }
    
    $(function () {
        fnInit();
    });

 

 

이상 끝 ~~~~~~~~~~~~~

728x90
반응형

+ Recent posts