in scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/resources/PhoneNumber.java [144:184]
public PhoneNumber setValue(String value, boolean strict) throws PhoneNumberParseException {
if (value == null) {
throw new PhoneNumberParseException("null values are illegal for phone numbers");
}
PhoneNumberLexer phoneNumberLexer = new PhoneNumberLexer(new ANTLRInputStream(value));
PhoneNumberParser p = new PhoneNumberParser(new CommonTokenStream(phoneNumberLexer));
p.setBuildParseTree(true);
p.addErrorListener(new BaseErrorListener() {
@Override
public void syntaxError(Recognizer<?, ?> recognizer, Object offendingSymbol, int line, int charPositionInLine, String msg, RecognitionException e) {
throw new IllegalStateException("failed to parse at line " + line + " due to " + msg, e);
}
});
PhoneNumberParseTreeListener tpl = new PhoneNumberParseTreeListener();
try {
ParseTree tree = p.phoneNumber();
ParseTreeWalker.DEFAULT.walk(tpl, tree);
PhoneNumber parsedPhoneNumber = tpl.getPhoneNumber();
this.value = parsedPhoneNumber.getValue();
this.number = parsedPhoneNumber.getNumber();
this.extension = parsedPhoneNumber.getExtension();
this.subAddress = parsedPhoneNumber.getSubAddress();
this.phoneContext = parsedPhoneNumber.getPhoneContext();
this.params = parsedPhoneNumber.getParams();
this.isGlobalNumber = parsedPhoneNumber.isGlobalNumber();
this.isDomainPhoneContext = parsedPhoneNumber.isDomainPhoneContext();
} catch (IllegalStateException e) {
// SCIM Core RFC section 4.1.2 states phone numbers SHOULD be formatted per RFC3966, e.g. 'tel:+1-201-555-0123'
// but this is not required, if exception is thrown while parsing, fall back to original value, unless `strict`
if (strict) {
throw new PhoneNumberParseException(e);
}
log.debug("Failed to parse phone number '{}'", value, e);
this.value = value;
}
return this;
}