diff --git a/core-java-9/README.md b/core-java-9/README.md
index b5d4dbef95..fbe5f908aa 100644
--- a/core-java-9/README.md
+++ b/core-java-9/README.md
@@ -2,4 +2,4 @@
## Core Java 9 Examples
-http://inprogress.baeldung.com/java-9-new-features/
\ No newline at end of file
+[Java 9 New Features](http://www.baeldung.com/new-java-9)
diff --git a/core-java/README.md b/core-java/README.md
index 48f0677461..49317bf369 100644
--- a/core-java/README.md
+++ b/core-java/README.md
@@ -35,4 +35,5 @@
- [Java 8 Streams Advanced](http://www.baeldung.com/java-8-streams)
- [Introduction to Thread Pools in Java](http://www.baeldung.com/thread-pool-java-and-guava)
- [Introduction to Java 8 Streams](http://www.baeldung.com/java-8-streams-introduction)
-- [Guide to the Fork/Join Framework in Java](http://www.baeldung.com/java-fork-join)
\ No newline at end of file
+- [Guide to the Fork/Join Framework in Java](http://www.baeldung.com/java-fork-join)
+- [How to Print Screen in Java](http://www.baeldung.com/print-screen-in-java)
diff --git a/pom.xml b/pom.xml
index 857922310f..bd626b3ad0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -95,6 +95,7 @@
spring-data-neo4j
spring-data-redis
spring-data-rest
+ spring-data-solr
spring-dispatcher-servlet
spring-exceptions
spring-freemarker
diff --git a/spring-cloud/README.md b/spring-cloud/README.md
index 3e8cd21b82..60acdaeed5 100644
--- a/spring-cloud/README.md
+++ b/spring-cloud/README.md
@@ -14,5 +14,6 @@
- [Intro to Spring Cloud Netflix - Hystrix](http://www.baeldung.com/spring-cloud-netflix-hystrix)
- [Dockerizing a Spring Boot Application](http://www.baeldung.com/dockerizing-spring-boot-application)
+- [Introduction to Spring Cloud Rest Client with Netflix Ribbon](http://www.baeldung.com/spring-cloud-rest-client-with-netflix-ribbon)
diff --git a/spring-data-solr/pom.xml b/spring-data-solr/pom.xml
new file mode 100644
index 0000000000..bd48a53d06
--- /dev/null
+++ b/spring-data-solr/pom.xml
@@ -0,0 +1,69 @@
+
+
+ 4.0.0
+ com.baeldung
+ spring-data-solr
+ 0.0.1-SNAPSHOT
+ jar
+ spring-data-solr
+
+
+
+ UTF-8
+ 4.2.5.RELEASE
+ 2.19.1
+ 2.0.4.RELEASE
+
+
+
+
+ org.springframework
+ spring-core
+ ${spring.version}
+
+
+ org.springframework.data
+ spring-data-solr
+ ${spring-data-solr}
+
+
+ org.springframework
+ spring-context
+ ${spring.version}
+
+
+ log4j
+ log4j
+ 1.2.16
+
+
+ junit
+ junit
+ 4.12
+ test
+
+
+ org.springframework
+ spring-test
+ ${spring.version}
+ test
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ ${maven-surefire-plugin.version}
+
+
+ **/*IntegrationTest.java
+
+
+
+
+
+
+
diff --git a/spring-data-solr/src/main/java/com/baeldung/spring/data/solr/config/SolrConfig.java b/spring-data-solr/src/main/java/com/baeldung/spring/data/solr/config/SolrConfig.java
new file mode 100644
index 0000000000..1fe1e5468b
--- /dev/null
+++ b/spring-data-solr/src/main/java/com/baeldung/spring/data/solr/config/SolrConfig.java
@@ -0,0 +1,25 @@
+package com.baeldung.spring.data.solr.config;
+
+import org.apache.solr.client.solrj.SolrClient;
+import org.apache.solr.client.solrj.impl.HttpSolrClient;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.data.solr.core.SolrTemplate;
+import org.springframework.data.solr.repository.config.EnableSolrRepositories;
+
+@Configuration
+@EnableSolrRepositories(basePackages = "com.baeldung.spring.data.solr.repository", namedQueriesLocation = "classpath:solr-named-queries.properties", multicoreSupport = true)
+@ComponentScan
+public class SolrConfig {
+
+ @Bean
+ public SolrClient solrClient() {
+ return new HttpSolrClient("http://localhost:8983/solr");
+ }
+
+ @Bean
+ public SolrTemplate solrTemplate(SolrClient client) throws Exception {
+ return new SolrTemplate(client);
+ }
+}
diff --git a/spring-data-solr/src/main/java/com/baeldung/spring/data/solr/model/Product.java b/spring-data-solr/src/main/java/com/baeldung/spring/data/solr/model/Product.java
new file mode 100644
index 0000000000..7cd0890718
--- /dev/null
+++ b/spring-data-solr/src/main/java/com/baeldung/spring/data/solr/model/Product.java
@@ -0,0 +1,55 @@
+package com.baeldung.spring.data.solr.model;
+
+import org.springframework.data.annotation.Id;
+import org.springframework.data.solr.core.mapping.Indexed;
+import org.springframework.data.solr.core.mapping.SolrDocument;
+
+@SolrDocument(solrCoreName = "product")
+public class Product {
+
+ @Id
+ @Indexed(name = "id", type = "string")
+ private String id;
+
+ @Indexed(name = "name", type = "string")
+ private String name;
+
+ @Indexed(name = "category", type = "string")
+ private String category;
+
+ @Indexed(name = "description", type = "string")
+ private String description;
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getCategory() {
+ return category;
+ }
+
+ public void setCategory(String category) {
+ this.category = category;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+}
diff --git a/spring-data-solr/src/main/java/com/baeldung/spring/data/solr/repository/ProductRepository.java b/spring-data-solr/src/main/java/com/baeldung/spring/data/solr/repository/ProductRepository.java
new file mode 100644
index 0000000000..01ec1fb909
--- /dev/null
+++ b/spring-data-solr/src/main/java/com/baeldung/spring/data/solr/repository/ProductRepository.java
@@ -0,0 +1,22 @@
+package com.baeldung.spring.data.solr.repository;
+
+import java.util.List;
+
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.solr.repository.Query;
+import org.springframework.data.solr.repository.SolrCrudRepository;
+
+import com.baeldung.spring.data.solr.model.Product;
+
+public interface ProductRepository extends SolrCrudRepository {
+
+ public List findByName(String name);
+
+ @Query("name:*?0* OR category:*?0* OR description:*?0*")
+ public Page findByCustomQuery(String searchTerm, Pageable pageable);
+
+ @Query(name = "Product.findByNamedQuery")
+ public Page findByNamedQuery(String searchTerm, Pageable pageable);
+
+}
diff --git a/spring-data-solr/src/main/resources/solr-named-queries.properties b/spring-data-solr/src/main/resources/solr-named-queries.properties
new file mode 100644
index 0000000000..cec59cbebd
--- /dev/null
+++ b/spring-data-solr/src/main/resources/solr-named-queries.properties
@@ -0,0 +1 @@
+Product.findByNamedQuery=name:*?0* OR category:*?0* OR description:*?0*
\ No newline at end of file
diff --git a/spring-data-solr/src/test/java/com/baeldung/spring/data/solr/repo/ProductRepositoryIntegrationTest.java b/spring-data-solr/src/test/java/com/baeldung/spring/data/solr/repo/ProductRepositoryIntegrationTest.java
new file mode 100644
index 0000000000..74d94ef91c
--- /dev/null
+++ b/spring-data-solr/src/test/java/com/baeldung/spring/data/solr/repo/ProductRepositoryIntegrationTest.java
@@ -0,0 +1,144 @@
+package com.baeldung.spring.data.solr.repo;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+
+import java.util.List;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+import com.baeldung.spring.data.solr.config.SolrConfig;
+import com.baeldung.spring.data.solr.model.Product;
+import com.baeldung.spring.data.solr.repository.ProductRepository;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration(classes = SolrConfig.class)
+public class ProductRepositoryIntegrationTest {
+
+ @Autowired
+ private ProductRepository productRepository;
+
+ @Before
+ public void clearSolrData() {
+ productRepository.deleteAll();
+ }
+
+ @Test
+ public void whenSavingProduct_thenAvailableOnRetrieval() throws Exception {
+ final Product product = new Product();
+ product.setId("P000089998");
+ product.setName("Desk");
+ product.setCategory("Furniture");
+ product.setDescription("New Desk");
+ productRepository.save(product);
+ final Product retrievedProduct = productRepository.findOne(product.getId());
+ assertEquals(product.getId(), retrievedProduct.getId());
+ }
+
+ @Test
+ public void whenUpdatingProduct_thenChangeAvailableOnRetrieval() throws Exception {
+ final Product product = new Product();
+ product.setId("P0001");
+ product.setName("T-Shirt");
+ product.setCategory("Kitchen");
+ product.setDescription("New T-Shirt");
+ productRepository.save(product);
+
+ product.setCategory("Clothes");
+ productRepository.save(product);
+
+ final Product retrievedProduct = productRepository.findOne(product.getId());
+ assertEquals(product.getCategory(), retrievedProduct.getCategory());
+ }
+
+ @Test
+ public void whenDeletingProduct_thenNotAvailableOnRetrieval() throws Exception {
+ final Product product = new Product();
+ product.setId("P0001");
+ product.setName("Desk");
+ product.setCategory("Furniture");
+ product.setDescription("New Desk");
+ productRepository.save(product);
+
+ productRepository.delete(product);
+
+ Product retrievedProduct = productRepository.findOne(product.getId());
+ assertNull(retrievedProduct);
+
+ }
+
+ @Test
+ public void whenFindByName_thenAvailableOnRetrieval() throws Exception {
+ Product phone = new Product();
+ phone.setId("P0001");
+ phone.setName("Phone");
+ phone.setCategory("Electronics");
+ phone.setDescription("New Phone");
+ productRepository.save(phone);
+
+ List retrievedProducts = productRepository.findByName("Phone");
+ assertEquals(phone.getId(), retrievedProducts.get(0).getId());
+ }
+
+ @Test
+ public void whenSearchingProductsByQuery_thenAllMatchingProductsShouldAvialble() throws Exception {
+ final Product phone = new Product();
+ phone.setId("P0001");
+ phone.setName("Smart Phone");
+ phone.setCategory("Electronics");
+ phone.setDescription("New Item");
+ productRepository.save(phone);
+
+ final Product phoneCover = new Product();
+ phoneCover.setId("P0002");
+ phoneCover.setName("Cover");
+ phoneCover.setCategory("Phone");
+ phoneCover.setDescription("New Product");
+ productRepository.save(phoneCover);
+
+ final Product wirelessCharger = new Product();
+ wirelessCharger.setId("P0003");
+ wirelessCharger.setName("Charging Cable");
+ wirelessCharger.setCategory("Cable");
+ wirelessCharger.setDescription("Wireless Charger for Phone");
+ productRepository.save(wirelessCharger);
+
+ Page result = productRepository.findByCustomQuery("Phone", new PageRequest(0, 10));
+ assertEquals(3, result.getNumberOfElements());
+ }
+
+ @Test
+ public void whenSearchingProductsByNamedQuery_thenAllMatchingProductsShouldAvialble() throws Exception {
+ final Product phone = new Product();
+ phone.setId("P0001");
+ phone.setName("Smart Phone");
+ phone.setCategory("Electronics");
+ phone.setDescription("New Item");
+ productRepository.save(phone);
+
+ final Product phoneCover = new Product();
+ phoneCover.setId("P0002");
+ phoneCover.setName("Cover");
+ phoneCover.setCategory("Phone");
+ phoneCover.setDescription("New Product");
+ productRepository.save(phoneCover);
+
+ final Product wirelessCharger = new Product();
+ wirelessCharger.setId("P0003");
+ wirelessCharger.setName("Charging Cable");
+ wirelessCharger.setCategory("Cable");
+ wirelessCharger.setDescription("Wireless Charger for Phone");
+ productRepository.save(wirelessCharger);
+
+ Page result = productRepository.findByNamedQuery("one", new PageRequest(0, 10));
+ assertEquals(3, result.getNumberOfElements());
+ }
+
+}
diff --git a/spring-dispatcher-servlet/src/main/resources/README.md b/spring-dispatcher-servlet/src/main/resources/README.md
new file mode 100644
index 0000000000..7c97e75a2c
--- /dev/null
+++ b/spring-dispatcher-servlet/src/main/resources/README.md
@@ -0,0 +1,3 @@
+## Info ##
+
+- The diagram is created with [yed](http://www.yworks.com/products/yed)
diff --git a/spring-dispatcher-servlet/src/main/resources/diagram.graphml b/spring-dispatcher-servlet/src/main/resources/diagram.graphml
new file mode 100644
index 0000000000..1806ab7719
--- /dev/null
+++ b/spring-dispatcher-servlet/src/main/resources/diagram.graphml
@@ -0,0 +1,372 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Servlet Engine (e.g. Tomcat)
+
+
+
+
+
+
+
+
+
+ Folder 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Controller
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Model
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Model
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ DispatcherServlet
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ View Template
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Return Control
+
+
+
+
+
+
+
+
+
+
+
+ Render Response
+
+
+
+
+
+
+
+
+
+
+
+ Delegate Request
+
+
+
+
+
+
+
+
+
+
+
+ Delegate Rendering of Response
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Incoming Request
+
+
+
+
+
+
+
+
+
+
+
+ Return Response
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Handle Request
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Create Model
+
+
+
+
+
+
+
+
+ <?xml version="1.0" encoding="utf-8"?>
+<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="57px" height="67px" viewBox="0 0 57 67" enable-background="new 0 0 57 67" xml:space="preserve">
+<g>
+
+ <radialGradient id="neck_x5F_white_1_" cx="28.0298" cy="-751.9429" r="11.4464" fx="25.7969" fy="-753.1596" gradientTransform="matrix(1 0 0 -1 0.1201 -706.5371)" gradientUnits="userSpaceOnUse">
+ <stop offset="0" style="stop-color:#B38E5D"/>
+ <stop offset="1" style="stop-color:#805126"/>
+ </radialGradient>
+ <path id="neck_x5F_white_2_" fill="url(#neck_x5F_white_1_)" stroke="#5B453B" stroke-miterlimit="10" d="M19.278,37.799h18.188
+ v13.23c-1.313,0.371-17.173,0.436-18.188,0.172V37.799z"/>
+
+ <radialGradient id="SVGID_1_" cx="27.481" cy="-760.3003" r="31.0533" fx="21.4231" fy="-763.6011" gradientTransform="matrix(1 0 0 -1 0.1201 -706.5371)" gradientUnits="userSpaceOnUse">
+ <stop offset="0" style="stop-color:#B38E5D"/>
+ <stop offset="1" style="stop-color:#805126"/>
+ </radialGradient>
+ <path fill="url(#SVGID_1_)" stroke="#5B453B" stroke-miterlimit="10" d="M49.529,51.225c-4.396-4.396-10.951-5.884-12.063-6.109
+ V37.8H19.278c0,0,0.038,6.903,0,6.868c0,0-6.874,0.997-12.308,6.432C1.378,56.691,0.5,62.77,0.5,62.77
+ c0,1.938,1.575,3.492,3.523,3.492h48.51c1.947,0,3.521-1.558,3.521-3.492C56.055,62.768,54.211,55.906,49.529,51.225z"/>
+
+ <radialGradient id="face_x5F_white_1_" cx="27.7827" cy="-732.2632" r="23.424" fx="23.2131" fy="-734.753" gradientTransform="matrix(1 0 0 -1 0.1201 -706.5371)" gradientUnits="userSpaceOnUse">
+ <stop offset="0" style="stop-color:#B38E5D"/>
+ <stop offset="1" style="stop-color:#805126"/>
+ </radialGradient>
+ <path id="face_x5F_white_2_" fill="url(#face_x5F_white_1_)" stroke="#5B453B" stroke-miterlimit="10" d="M43.676,23.357
+ c0.086,10.199-6.738,18.52-15.246,18.586c-8.503,0.068-15.467-8.146-15.553-18.344C12.794,13.4,19.618,5.079,28.123,5.012
+ C36.627,4.945,43.59,13.158,43.676,23.357z"/>
+
+ <linearGradient id="face_highlight_1_" gradientUnits="userSpaceOnUse" x1="2941.4297" y1="5674.7988" x2="2965.0596" y2="5768.2505" gradientTransform="matrix(0.275 0 0 0.2733 -783.3976 -1542.678)">
+ <stop offset="0" style="stop-color:#FFFFFF;stop-opacity:0.42"/>
+ <stop offset="1" style="stop-color:#FFFFFF;stop-opacity:0.12"/>
+ </linearGradient>
+ <path id="face_highlight_2_" fill="url(#face_highlight_1_)" d="M27.958,6.333c-6.035,0.047-10.747,4.493-12.787,10.386
+ c-0.664,1.919-0.294,4.043,0.98,5.629c2.73,3.398,5.729,6.283,9.461,8.088c3.137,1.518,7.535,2.385,11.893,1.247
+ c2.274-0.592,3.988-2.459,4.375-4.766c0.183-1.094,0.293-2.289,0.283-3.553C42.083,13.952,36.271,6.268,27.958,6.333z"/>
+ <path id="path9833_2_" fill="#4B4B4B" stroke="#000000" stroke-linecap="round" stroke-linejoin="round" d="M28.372,0.5
+ C17.537,0.5,8.269,7.748,9.153,26.125c0.563,6.563,5.862,12.042,9.366,13.531c-2.929-10.968-0.304-25.021-0.585-25.526
+ c-0.281-0.505,3.536,6.728,3.536,6.728l3.183-8.312c5.541,4.28,0.393,11.309,1.049,11.058c4.26-1.631,5.34-9.228,5.34-9.228
+ s2.729,3.657,2.701,5.504c-0.054,3.562,2.194-6.067,2.194-6.067l1.027,2.031c6.727,9.822,3.684,16.208,1.654,22.781
+ c15.665-0.703,12.289-10.48,9.658-18.407C43.59,6.092,39.206,0.5,28.372,0.5z"/>
+
+ <radialGradient id="collar_x5F_body_2_" cx="15.1587" cy="-763.7056" r="32.4004" gradientTransform="matrix(1 0 0 -1 0.1201 -706.5371)" gradientUnits="userSpaceOnUse">
+ <stop offset="0" style="stop-color:#B0E8FF"/>
+ <stop offset="1" style="stop-color:#74AEEE"/>
+ </radialGradient>
+ <path id="collar_x5F_body_1_" fill="url(#collar_x5F_body_2_)" stroke="#5491CF" d="M0.5,62.768c0,1.938,1.575,3.494,3.523,3.494
+ h48.51c1.947,0,3.521-1.559,3.521-3.494c0,0-1.844-6.861-6.525-11.543c-4.815-4.813-11.244-6.146-11.244-6.146
+ c-1.771,1.655-5.61,2.802-10.063,2.802c-4.453,0-8.292-1.146-10.063-2.802c0,0-5.755,0.586-11.189,6.021
+ C1.378,56.689,0.5,62.768,0.5,62.768z"/>
+
+ <radialGradient id="collar_x5F_r_2_" cx="31.5" cy="-753.832" r="9.2834" gradientTransform="matrix(1 0 0 -1 0.1201 -706.5371)" gradientUnits="userSpaceOnUse">
+ <stop offset="0" style="stop-color:#80CCFF"/>
+ <stop offset="1" style="stop-color:#74AEEE"/>
+ </radialGradient>
+ <path id="collar_x5F_r_1_" fill="url(#collar_x5F_r_2_)" stroke="#5491CF" d="M38.159,41.381c0,0-0.574,2.369-3.013,4.441
+ c-2.108,1.795-5.783,2.072-5.783,2.072l3.974,6.217c0,0,2.957-1.637,5.009-3.848c1.922-2.072,1.37-5.479,1.37-5.479L38.159,41.381z
+ "/>
+
+ <radialGradient id="collar_x5F_l_2_" cx="19.1377" cy="-753.873" r="9.2837" gradientTransform="matrix(1 0 0 -1 0.1201 -706.5371)" gradientUnits="userSpaceOnUse">
+ <stop offset="0" style="stop-color:#80CCFF"/>
+ <stop offset="1" style="stop-color:#74AEEE"/>
+ </radialGradient>
+ <path id="collar_x5F_l_1_" fill="url(#collar_x5F_l_2_)" stroke="#5491CF" d="M18.63,41.422c0,0,0.576,2.369,3.012,4.441
+ c2.109,1.793,5.785,2.072,5.785,2.072l-3.974,6.217c0,0-2.957-1.637-5.007-3.85c-1.922-2.072-1.37-5.48-1.37-5.48L18.63,41.422z"/>
+
+ <radialGradient id="Knob2_2_" cx="27.8872" cy="9.9414" r="0.9669" gradientTransform="matrix(1 0 0 -1 0.04 66.1543)" gradientUnits="userSpaceOnUse">
+ <stop offset="0" style="stop-color:#80CCFF"/>
+ <stop offset="1" style="stop-color:#74AEEE"/>
+ </radialGradient>
+ <circle id="Knob2_1_" fill="url(#Knob2_2_)" stroke="#5491CF" cx="28.258" cy="56.254" r="0.584"/>
+
+ <radialGradient id="Knob1_2_" cx="27.9253" cy="3.6973" r="0.9669" gradientTransform="matrix(1 0 0 -1 0.04 66.1543)" gradientUnits="userSpaceOnUse">
+ <stop offset="0" style="stop-color:#80CCFF"/>
+ <stop offset="1" style="stop-color:#74AEEE"/>
+ </radialGradient>
+ <circle id="Knob1_1_" fill="url(#Knob1_2_)" stroke="#5491CF" cx="28.296" cy="62.499" r="0.584"/>
+</g>
+</svg>
+
+
+
+
diff --git a/spring-dispatcher-servlet/src/main/resources/diagram.png b/spring-dispatcher-servlet/src/main/resources/diagram.png
new file mode 100644
index 0000000000..c0c545d680
Binary files /dev/null and b/spring-dispatcher-servlet/src/main/resources/diagram.png differ
diff --git a/spring-rest/src/test/java/org/baeldung/okhttp/OkHttpFileUploadingLiveTest.java b/spring-rest/src/test/java/org/baeldung/okhttp/OkHttpFileUploadingLiveTest.java
index d1cc67b99a..2c88408017 100644
--- a/spring-rest/src/test/java/org/baeldung/okhttp/OkHttpFileUploadingLiveTest.java
+++ b/spring-rest/src/test/java/org/baeldung/okhttp/OkHttpFileUploadingLiveTest.java
@@ -56,13 +56,10 @@ public class OkHttpFileUploadingLiveTest {
.build();
- ProgressRequestWrapper.ProgressListener listener = new ProgressRequestWrapper.ProgressListener() {
+ ProgressRequestWrapper.ProgressListener listener = (bytesWritten, contentLength) -> {
- public void onRequestProgress(long bytesWritten, long contentLength) {
-
- float percentage = 100f * bytesWritten / contentLength;
- assertFalse(Float.compare(percentage, 100) > 0);
- }
+ float percentage = 100f * bytesWritten / contentLength;
+ assertFalse(Float.compare(percentage, 100) > 0);
};
ProgressRequestWrapper countingBody = new ProgressRequestWrapper(requestBody, listener);