2014-09-28 6 views
0

여러 프로젝트에서 MessageFormat을 사용하여 문제가 발생했습니다. 내가 뭔가를 기본 프로젝트를 사용하여 기본 프로젝트에서 메시지와 함께 메시지를 기록합니다 다른 프로젝트에서이스케이프 중괄호 또는 따옴표로 인한 오류를 피하기 위해 Java MessageFormat으로 메시지를 작성하는 원칙이 있습니까?

Exception for a char ({0}). 

: 기본 프로젝트에서, 우리는 같은 경고 메시지를 구축하는 메시지 형식을 사용합니다.

The request success but a warning comes from the base project: [ {0}]. 

기본 프로젝트에서 경고 입력은 이스케이프 중괄호 {{}입니다. 따라서 메시지는 "char ({)에 대한 예외"입니다. 두 번째 프로젝트의 메시지는 "요청 성공이지만 경고는 기본 프로젝트에서 가져온 것입니다 : [char ({). 예외]." 우리는 세 번째 프로젝트의 두 번째 메시지를 사용하는 경우 MessageFormat의와 같은 예외를 방지하기 위해 원칙이있는 경우

그러나, 내가 궁금 예외를

java.lang.IllegalArgumentException: Unmatched braces in the pattern. 
at java.text.MessageFormat.applyPattern(MessageFormat.java:508) 
at java.text.MessageFormat.<init>(MessageFormat.java:363) 
at java.text.MessageFormat.format(MessageFormat.java:835) 

발생합니다. 입력을 통해 최종 오류 메시지를 처리해야합니다. 다른 MessageFormat 핸들링에서 오류 메시지를 소모 가능하게 만드십시오.

message.replaceAll("{", "'{'"); 
    message.replaceAll("'", "''"); 

마지막 해결 방법은 최종 오류 메시지의 특수 문자를 바꾸는 것입니다. 그런 다음 다른 프로젝트에서 메시지를 인용해야 할 때 예외는 없습니다.

다른 프로젝트의 메시지가 제안되지 않았습니까? 프로젝트

A good question about JAVA MessgeFormat

코드 C.

Object[] params = new String[]{}; 
MessageFormat.format("Project A get error from: [ Project B exception caused by char ({)", (Object[]) params); 


    String b = "{"; 
    String errorMessageInA = MessageFormat.format("Project B exception caused by char ({0})", new String[]{b}); 
    String errorMessageInB = MessageFormat.format("Project A get error from: [{0} ]", new String[]{errorMessageInA}); 

    Object[] params = new String[]{}; 
    String c = MessageFormat.format(errorMessageInB, (Object[]) params); 
+1

나는 아무것도 이해할 수 없다. 예외를 유발하는 코드와 그 입력을 보여줌으로써 더 간단한 질문을하십시오. –

+0

원칙은 형식이 지정된 메시지를 다른 메시지의 형식으로 사용하지 않는 것 같습니다. – EJP

+0

제 문제는 형식화 된 메시지를 메시지 패턴으로 사용한다는 것입니다. –

답변

0

정말 감사합니다. 나는 지금 무슨 문제인지 알 것 같아. 내가 문제를 더 쉽게 찾을 수 있도록 모든 코드를 적어 줘서 고마워.

문제는 제가 String c = MessageFormat.format (errorMessageInB, (Object []) params)를 사용한다는 것입니다. 올바른 방법은 다음과 같습니다. String c = MessageFormat.format ("{0}", new String [] {errorMessageInB});

나는이 질문을 삭제하거나 닫습니다. 이스케이프 중괄호 또는 작은 따옴표는 입력에 포함될 수 있지만 메시지 본문에는 포함될 수 없습니다.

감사합니다. 메시지 본문에서 다른 프로젝트의 메시지 결과를 사용하는 것은 제안되지 않습니다.