You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@camel.apache.org by "Claus Ibsen (JIRA)" <ji...@apache.org> on 2016/07/01 07:24:11 UTC

[jira] [Commented] (CAMEL-10085) UnsafeUriCharactersEncoder.checkRAW compiles regex pattern every call

    [ https://issues.apache.org/jira/browse/CAMEL-10085?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15358560#comment-15358560 ] 

Claus Ibsen commented on CAMEL-10085:
-------------------------------------

A PR is also welcome
http://camel.apache.org/contributing

> UnsafeUriCharactersEncoder.checkRAW compiles regex  pattern every call
> ----------------------------------------------------------------------
>
>                 Key: CAMEL-10085
>                 URL: https://issues.apache.org/jira/browse/CAMEL-10085
>             Project: Camel
>          Issue Type: Improvement
>    Affects Versions: 2.17.1
>            Reporter: Mateusz Nowakowski
>            Assignee: Andrea Cosentino
>            Priority: Minor
>             Fix For: 2.17.3, 2.18.0
>
>
> UnsafeUriCharactersEncoder.checkRAW compile regex  pattern every time it is called (and it is called really often due to stack: 
> DefaultCamelContext.normalizeEndpointUri() -> URISUpport.normalizeUri() -> org.apache.camel.util.UnsafeUriCharactersEncoder.encode() -> checkRaw() -> Pattern.compile())
> Under high load it leads to decrease performance.
> The easiest fix is to precompile pattern:
> {code}
>     private static Pattern RAW_PATTERN = Pattern.compile("RAW\\([^\\)]+\\)");
> (....)
>     private static List<Pair> checkRAW(String s) {
>         Matcher matcher = RAW_PATTERN.matcher(s);
>         List<Pair> answer = new ArrayList<Pair>();
>         // Check all occurrences
>         while (matcher.find()) {
>             answer.add(new Pair(matcher.start(), matcher.end()));
>         }
>         return answer;
>     }
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)