Skip to content

fix: TypedMessage가 attachment value null을 허용해 인터페이스 문서와 모순되는 문제 수정 - #327

Open
wantaekchoi wants to merge 1 commit into
eGovFramework:mainfrom
wantaekchoi:fix/typed-message-attachment-null-validation
Open

fix: TypedMessage가 attachment value null을 허용해 인터페이스 문서와 모순되는 문제 수정#327
wantaekchoi wants to merge 1 commit into
eGovFramework:mainfrom
wantaekchoi:fix/typed-message-attachment-null-validation

Conversation

@wantaekchoi

Copy link
Copy Markdown
Contributor

수정 사유 Reason for modification

  • 버그수정 Bug fixes
  • 기능개선 Enhancements
  • 기능추가 Adding features
  • 기타 Others

수정된 소스 내용 Modified source

EgovIntegrationMessage 인터페이스는 두 메서드에 대해 value가 null이면 IllegalArgumentException을 던진다고 번호를 매겨 선언합니다.

setAttachments  3. Argument attachments의 value 값들 중 null 값이 있는 경우
putAttachment   2. Argument attachment 값이 null인 경우

TypedMessage는 두 메서드 모두 key만 StringUtils.hasText로 검사하고 value는 보지 않아 null이 그대로 attachments 맵에 들어갑니다.

형제 구현체 SimpleMessage는 #311에서 같은 계약을 지키도록 고쳐졌고 이 클래스만 남았습니다.

AS-IS

public void setAttachments(Map<String, Object> attachments) {
    ...
    for (Entry<String, Object> entry : attachments.entrySet()) {
        if (StringUtils.hasText(entry.getKey()) == false) {
            throw new IllegalArgumentException();
        }
    }
    this.attachments = attachments;
}

public Object putAttachment(String name, Object attachment) {
    if (StringUtils.hasText(name) == false) {
        throw new IllegalArgumentException();
    }
    return attachments.put(name, attachment);
}

TO-BE

        if (StringUtils.hasText(entry.getKey()) == false) {
            throw new IllegalArgumentException();
        }
        if (entry.getValue() == null) {
            throw new IllegalArgumentException();
        }
    if (StringUtils.hasText(name) == false) {
        throw new IllegalArgumentException();
    }
    if (attachment == null) {
        throw new IllegalArgumentException();
    }

범위

setBody는 뺐습니다. SimpleMessage는 자기 생성자 javadoc이 body의 value null 계약을 따로 선언하고 있어 #311이 함께 고쳤지만, TypedMessage에는 그 문서가 없고 인터페이스의 setBody javadoc도 body 자체가 null인 경우만 규정합니다.

TypedMessage의 attachments는 TypedMap을 거치지 않는 평범한 HashMap이라 바디부의 타입 변환과는 무관한 경로입니다.

JUnit 테스트 JUnit tests

  • JUnit 테스트 JUnit tests
  • 수동 테스트 Manual testing

TypedMessageTest 3건을 추가했습니다(#311에서 추가한 SimpleMessageTest와 같은 구성).

수정 전(RED)

[ERROR] Tests run: 3, Failures: 3, Errors: 0, Skipped: 0
[ERROR]   TypedMessageTest.testSetAttachmentsRejectsNullValue Expected java.lang.IllegalArgumentException to be thrown, but nothing was thrown.
[ERROR]   TypedMessageTest.testSetAttachmentsRejectsNullValueAmongMultipleEntries Expected java.lang.IllegalArgumentException to be thrown, but nothing was thrown.
[ERROR]   TypedMessageTest.testPutAttachmentRejectsNullValue Expected java.lang.IllegalArgumentException to be thrown, but nothing was thrown.

수정 후(GREEN, 모듈 전체)

[INFO] Tests run: 82, Failures: 0, Errors: 0, Skipped: 0
[INFO] BUILD SUCCESS

EgovIntegrationMessage 인터페이스는 setAttachments와 putAttachment에 대해
value가 null이면 IllegalArgumentException을 던진다고 번호를 매겨 선언한다.

  setAttachments  3. Argument attachments의 value 값들 중 null 값이 있는 경우
  putAttachment   2. Argument attachment 값이 null인 경우

TypedMessage는 두 메서드 모두 key만 StringUtils.hasText로 검사하고 value는
전혀 보지 않아 null이 그대로 attachments 맵에 들어간다. 형제 구현체
SimpleMessage는 #311에서 같은 계약을 지키도록 고쳐졌고, 이 클래스만 남았다.

setBody는 이번 범위에서 뺐다. SimpleMessage는 자기 생성자 javadoc이 body의
value null 계약을 따로 선언하고 있어 #311이 함께 고쳤지만, TypedMessage에는
그 문서가 없고 인터페이스의 setBody javadoc도 body 자체가 null인 경우만
규정한다. 근거가 없는 곳까지 넓히지 않았다.

TypedMessage의 attachments는 TypedMap을 거치지 않는 평범한 HashMap이라
바디부의 타입 변환과는 무관한 경로다.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant