'soap'에 해당되는 글 1

  1. 2010.10.05 이제는 테스트케이스를 만들지 않으면 불안하다.

이제는 테스트케이스를 만들지 않으면 불안하다.

업무단에서 에러가 발생해서 응답 XML을 생성하지 못하는 경우 통신단에서 SOAP Envelope에 에러를 넣어준다.(eb:ErrorList)
<?xml version="1.0" encoding="EUC-KR"?>
<SOAP:Envelope ...>
    <SOAP:Header>
        <eb:MessageHeader SOAP:mustUnderstand="1" eb:version="2.0">
            ...
            <eb:Action>MessageError</eb:Action>
            ...
        </eb:MessageHeader>

        <eb:Acknowledgment SOAP:mustUnderstand="1" eb:version="2.0">
            ...
             <eb:From><eb:PartyId eb:type="b2b"></eb:PartyId></eb:From>
        </eb:Acknowledgment>

        <eb:ErrorList eb:highestSeverity="Error" SOAP:mustUnderstand="1" eb:version="2.0">
            <eb:Error eb:codeContext="urn:oasis:names:tc:ebxml-msg:service:errors" eb:errorCode="ServerError" eb:severity="Error">
                <eb:Description xml:lang="ko-kr">com.test.common.exception.TimeoutException ...</eb:Description>
            </eb:Error>
        </eb:ErrorList>

        <ds:Signature ...>
        ...
        </ds:Signature>
    </SOAP:Header>
    <SOAP:Body>
    ...
    </SOAP:Body>  
</SOAP:Envelope>

그러나 에러 메세지를 제대로 처리하지 못해서 테스트를 작성해서 수정했다.

SOAPEnvelope라는 클래스에서 처리하는데 다행히 POJO 형태이고 외부 설정이나 기타 다른 의존성이 없었다.
테스트케이스를 작성하는데 어려움은 없었고, 테스트케이스를 작성하면서 잘못 구현된 부분을 발견하였다.
잘못 구현된 부분이 프로그램에서 영향을 주는 부분이 아니고, 수정한 프로그램을 20개가 넘는 고객사에 다시 배포를 해야 하는 문제때문에 확인만 하고 넘어간다.
public class SOAPEnvelopeTest extends TestCase {
   
    public void testParseReceive_에러메세지가_있는_경우() throws Exception{
       
        String path = "test/com/test/client/connect/error_soap_receive.txt";
        String soapStr = readFile(new File(path));
        SOAPEnvelope soapEnvelope = new SOAPEnvelope(soapStr);
       
        assertEquals("MessageError", soapEnvelope.getActionId());
       
        List errorList = soapEnvelope.getErrorList();
        assertNotNull(errorList);
       
        String[] errorCode = (String[])errorList.get(0);
//        assertNotNull(errorCode[0]); //코딩이 잘못 되어서 무조건 null이 들어온다.
        assertTrue("에러메세지에 exception이라는 문구가 들어가 있다."
            , errorCode[1].indexOf("exception") > 0);
    }
}

이제는 테스트케이스를 만들지 않으면 불안하다.

- SOAP 메세지를 동일 패키지에 있는 파일에서 읽어오도록 한다.(언제든지 테스트가 실행될 수 있도록, 클래스패스로 읽어들이는 것이 가장 좋지 않나?)