Parse eingehende URL-Query Parameter. Besonders nützlich bei REST-APIs oder dynamischen iFlow Aufrufen von anderen Apps.

Erwartetes Verhalten: Alle Query Parameter werden mit einem q_ - prefix als Exchange Property gesetzt.

import com.sap.gateway.ip.core.customdev.util.Message
import java.net.URLDecoder
 
Message processData(Message message) {
    // Get raw query string from incoming HTTP request header
    def query = message.getHeaders().get('CamelHttpQuery') as String
    if (!query) {
        return message
    }
 
    // Split pairs; tolerate stray ampersands and empty entries
    query.split('&')
         .findAll { it != null && it.length() > 0 }
         .each { pair ->
             // Split into key and value once
             def parts = pair.split('=', 2)
             if (parts.size() >= 1 && parts[0].trim().length() > 0) {
                 def rawKey = parts[0]
                 def rawVal = parts.size() == 2 ? parts[1] : ''
                 // Decode key- and value pair
                 def key = URLDecoder.decode(rawKey.replace('+','%2B'), 'UTF-8')
                 def value = URLDecoder.decode(rawVal.replace('+','%2B'), 'UTF-8')
 
                 // Normalize property name: prefix q_ and replace illegal characters with '_'
                 def propName = 'q_' + key.replaceAll('[^A-Za-z0-9_\\-\\.]', '_')
 
                 // If parameter repeats, append subsequent values comma-separated
                 if (message.getProperties().containsKey(propName)) {
                     def existing = message.getProperty(propName) as String
                     message.setProperty(propName, existing + ',' + value)
                 } else {
                     message.setProperty(propName, value)
                 }
             }
         }
 
    return message
}