/** * Sets parameter of URI query overriding existing value if set. The parameter name and value * are expected to be unescaped and may contain non ASCII characters. * <p> * Please note query parameters and custom query component are mutually exclusive. This method * will remove custom query if present. * </p> */ public URIBuilder setParameter(final String param, final String value) { if (this.queryParams == null) { this.queryParams = new ArrayList<BasicNameValuePair>(); } if (!this.queryParams.isEmpty()) { for (final Iterator<BasicNameValuePair> it = this.queryParams.iterator(); it.hasNext(); ) { final BasicNameValuePair nvp = it.next(); if (nvp.getName().equals(param)) { it.remove(); } } } this.queryParams.add(new BasicNameValuePair(param, value)); this.encodedQuery = null; this.encodedSchemeSpecificPart = null; this.query = null; return this; }
private String encodeUrlForm(final List<BasicNameValuePair> params) { final StringBuilder result = new StringBuilder(); for (final BasicNameValuePair parameter : params) { final String encodedName = this.encode ? CommonUtils.urlEncode(parameter.getName()) : parameter.getName(); final String encodedValue = this.encode ? CommonUtils.urlEncode(parameter.getValue()) : parameter.getValue(); if (result.length() > 0) { result.append("&"); } result.append(encodedName); if (encodedValue != null) { result.append("="); result.append(encodedValue); } } return result.toString(); }
if (!serviceParameterNames.isEmpty() && !originalRequestUrl.getQueryParams().isEmpty()) { for (final URIBuilder.BasicNameValuePair pair : originalRequestUrl.getQueryParams()) { String name = pair.getName(); if (!name.equals(artifactParameterName) && !serviceParameterNames.contains(name)) { if (name.contains("&") || name.contains("=") ){ encodedParamBuilder.setParameters(name); for (final URIBuilder.BasicNameValuePair pair2 :encodedParamBuilder.getQueryParams()){ String name2 = pair2.getName(); if (!name2.equals(artifactParameterName) && !serviceParameterNames.contains(name2)) { builder.addParameter(name2, pair2.getValue()); builder.addParameter(name, pair.getValue());
final String decodedParamVal = URLDecoder.decode(paramVal, utf8.name()); list.add(new BasicNameValuePair(decodedParamName, decodedParamVal)); } else { final String key = URLDecoder.decode(parameterCombo[0], utf8.name()); final String val = parameterCombo.length == 2 ? URLDecoder.decode(parameterCombo[1], utf8.name()) : ""; list.add(new BasicNameValuePair(key, val));
/** * Adds parameter to URI query. The parameter name and value are expected to be unescaped * and may contain non ASCII characters. * <p> * Please note query parameters and custom query component are mutually exclusive. This method * will remove custom query if present. * </p> */ public URIBuilder addParameter(final String param, final String value) { if (this.queryParams == null) { this.queryParams = new ArrayList<BasicNameValuePair>(); } this.queryParams.add(new BasicNameValuePair(param, value)); this.encodedQuery = null; this.encodedSchemeSpecificPart = null; this.query = null; return this; }
/** * Gets entity id as parameter. * * @param service the service * @return the entity id as parameter */ protected static Optional<URIBuilder.BasicNameValuePair> getEntityIdAsParameter(final Service service) { val builder = new URIBuilder(service.getId()); return builder.getQueryParams() .stream() .filter(p -> p.getName().equals(SamlProtocolConstants.PARAMETER_ENTITY_ID)) .findFirst(); }
@Test public void parse() { URIBuilder builder = new URIBuilder() .digestURI(URI.create("http://apache.org/shindig?foo=bar%26baz&foo=three%3Dbaz#blah")); assertEquals("http", builder.getScheme()); assertEquals("apache.org", builder.getHost()); assertEquals("/shindig", builder.getPath()); List<URIBuilder.BasicNameValuePair> list = builder.getQueryParams(); for (URIBuilder.BasicNameValuePair pair : list) { assertEquals("foo", pair.getName()); assertTrue(pair.getValue().equals("three=baz") || pair.getValue().equals("bar&baz")); } assertEquals(list.size(), 2); assertEquals("blah", builder.getFragment()); }
@Test public void iterableQueryParameters() { List<URIBuilder.BasicNameValuePair> list = new ArrayList<URIBuilder.BasicNameValuePair>(); list.add(new URIBuilder.BasicNameValuePair("hello", "world")); list.add(new URIBuilder.BasicNameValuePair("hello", "monde")); URIBuilder builder = new URIBuilder() .setScheme("http") .setHost("apache.org") .setPath("/shindig") .addParameters(list) .setFragment("foo"); assertEquals("http://apache.org/shindig?hello=world&hello=monde#foo", builder.toString()); }
@Override public Service resolveServiceFrom(final Service service) { val entityId = getEntityIdAsParameter(service).get().getValue(); LOGGER.trace("Located entity id [{}] from service authentication request at [{}]", entityId, service.getId()); return this.webApplicationServiceFactory.createService(entityId); }