@SuppressWarnings({ "rawtypes", "unchecked" }) @Override public Map<String, Object> readFrom(Class<Map<String, Object>> type, Type genericType, Annotation[] annotations, MediaType mediaType, MultivaluedMap<String, String> httpHeaders, InputStream entityStream) throws IOException, WebApplicationException { FormEncodingProvider delegate = new FormEncodingProvider(); MultivaluedMap<String, String> multi = (MultivaluedMap<String, String>) delegate.readFrom(MultivaluedMap.class, null, null, mediaType, httpHeaders, entityStream); Map<String, Object> map = Maps.newHashMapWithExpectedSize(multi.keySet().size()); for (String key : multi.keySet()) { List<String> value = multi.get(key); if (value.size() > 1) { map.put(key, Lists.newArrayList(value)); } else if (value.size() == 1) { map.put(key, Iterables.getOnlyElement(value)); } else { map.put(key, null); } } return map; } }
protected String getTokenFromFormData(Message message) { String method = (String)message.get(Message.HTTP_REQUEST_METHOD); String type = (String)message.get(Message.CONTENT_TYPE); if (type != null && MediaType.APPLICATION_FORM_URLENCODED.startsWith(type) && method != null && (method.equals(HttpMethod.POST) || method.equals(HttpMethod.PUT))) { try { FormEncodingProvider<Form> provider = new FormEncodingProvider<>(true); Form form = FormUtils.readForm(provider, message); MultivaluedMap<String, String> formData = form.asMap(); String token = formData.getFirst(OAuthConstants.ACCESS_TOKEN); if (token != null) { FormUtils.restoreForm(provider, form, message); return token; } } catch (Exception ex) { // the exception will be thrown below } } AuthorizationUtils.throwAuthorizationFailure(supportedSchemes, realm); return null; }
protected String getTokenFromFormData(Message message) { String method = (String)message.get(Message.HTTP_REQUEST_METHOD); String type = (String)message.get(Message.CONTENT_TYPE); if (type != null && MediaType.APPLICATION_FORM_URLENCODED.startsWith(type) && method != null && (method.equals(HttpMethod.POST) || method.equals(HttpMethod.PUT))) { try { FormEncodingProvider<Form> provider = new FormEncodingProvider<>(true); Form form = FormUtils.readForm(provider, message); MultivaluedMap<String, String> formData = form.asMap(); String token = formData.getFirst(OAuthConstants.ACCESS_TOKEN); if (token != null) { FormUtils.restoreForm(provider, form, message); return token; } } catch (Exception ex) { // the exception will be thrown below } } AuthorizationUtils.throwAuthorizationFailure(supportedSchemes, realm); return null; }
FormEncodingProvider<?> provider = new FormEncodingProvider<Object>(); provider.setConsumeMediaTypes(Arrays.asList("text/html"));
protected static void initFactory(ProviderFactory factory) { // ensure to not load providers not available in a module environment if not needed factory.setProviders(false, false, new BinaryDataProvider<Object>(), new SourceProvider<Object>(), tryCreateInstance("org.apache.cxf.jaxrs.provider.DataSourceProvider"), new FormEncodingProvider<Object>(), new StringTextProvider(), new PrimitiveTextProvider<Object>(), tryCreateInstance(JAXB_PROVIDER_NAME), tryCreateInstance("org.apache.cxf.jaxrs.provider.JAXBElementTypedProvider"), tryCreateInstance("org.apache.cxf.jaxrs.provider.MultipartProvider")); Object prop = factory.getBus().getProperty("skip.default.json.provider.registration"); if (!PropertyUtils.isTrue(prop)) { factory.setProviders(false, false, createProvider(JSON_PROVIDER_NAME, factory.getBus())); } }
@Test public void testGetBookSAMLTokenInForm() throws Exception { String address = "https://localhost:" + PORT + "/samlform/bookstore/books"; FormEncodingProvider<Form> formProvider = new FormEncodingProvider<>(); formProvider.setExpectedEncoded(true); WebClient wc = createWebClient(address, new SamlFormOutInterceptor(), formProvider); wc.type(MediaType.APPLICATION_FORM_URLENCODED).accept(MediaType.APPLICATION_XML); try { Book book = wc.post(new Form(new MetadataMap<String, String>()).param("name", "CXF").param("id", "125"), Book.class); assertEquals(125L, book.getId()); } catch (WebApplicationException ex) { fail(ex.getMessage()); } catch (ProcessingException ex) { if (ex.getCause() != null && ex.getCause().getMessage() != null) { fail(ex.getCause().getMessage()); } else { fail(ex.getMessage()); } } }
@Test public void testGetBookPreviousSAMLTokenInForm() throws Exception { String address = "https://localhost:" + PORT + "/samlform/bookstore/books"; FormEncodingProvider<Form> formProvider = new FormEncodingProvider<>(); formProvider.setExpectedEncoded(true); WebClient wc = createWebClientForExistingToken(address, new SamlFormOutInterceptor(), formProvider); wc.type(MediaType.APPLICATION_FORM_URLENCODED).accept(MediaType.APPLICATION_XML); try { Book book = wc.post(new Form(new MetadataMap<String, String>()).param("name", "CXF").param("id", "125"), Book.class); assertEquals(125L, book.getId()); } catch (WebApplicationException ex) { fail(ex.getMessage()); } catch (ProcessingException ex) { if (ex.getCause() != null && ex.getCause().getMessage() != null) { fail(ex.getCause().getMessage()); } else { fail(ex.getMessage()); } } }