package com.github.hburgmeier.jerseyoauth2.rs.impl.rs2.filter.util; import java.io.InputStream; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.nio.charset.StandardCharsets; import java.util.NoSuchElementException; import java.util.Scanner; import java.util.regex.Pattern; import javax.ws.rs.core.Form; public class FormParser { private static final Pattern FIELD_PATTERN = Pattern.compile("[^&=]+"); public Form parseForm(InputStream inputStream) throws FormParserException { Form result = new Form(); Scanner scanner = new Scanner(inputStream, StandardCharsets.UTF_8.name()); scanner.useDelimiter(Pattern.compile("[&=]")); try { while (scanner.hasNext(FIELD_PATTERN)) { String name = urlDecode(scanner.next(FIELD_PATTERN)); String value = urlDecode(scanner.next(FIELD_PATTERN)); result.param(name, value); } } catch (NoSuchElementException | UnsupportedEncodingException e) { throw new FormParserException(e); } finally { scanner.close(); } return result; } protected String urlDecode(String value) throws UnsupportedEncodingException { return URLDecoder.decode(value, StandardCharsets.UTF_8.name()); } }