diff --git a/pom.xml b/pom.xml
index d186d924cd7f594eb9043812089ab89058ba8fb5..a5e3054a77b626cfcd0d1f2f61b586748af56adc 100644
--- a/pom.xml
+++ b/pom.xml
@@ -104,7 +104,13 @@
 			<artifactId>log4j-core</artifactId>
 			<version>${log4j.version}</version>
 		</dependency>
-		
+		<!-- https://mvnrepository.com/artifact/org.apache.cxf/cxf-rt-rs-client -->
+		<dependency>
+		    <groupId>org.apache.cxf</groupId>
+		    <artifactId>cxf-rt-rs-client</artifactId>
+		    <version>3.4.3</version>
+		</dependency>
+				
 	</dependencies>
 	<build>
 		<plugins>
diff --git a/src/main/java/java2/lab12/client/CourseClient.java b/src/main/java/java2/lab12/client/CourseClient.java
new file mode 100644
index 0000000000000000000000000000000000000000..cebb7887b43b29b42a5430f859cbbebf82b9ccd8
--- /dev/null
+++ b/src/main/java/java2/lab12/client/CourseClient.java
@@ -0,0 +1,24 @@
+package java2.lab12.client;
+
+import java.util.Collection;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+
+@Path("/")
+public interface CourseClient {
+
+	@GET
+	@Path("courses/")
+	@Produces(MediaType.APPLICATION_JSON)
+	Collection<Course> getCourses();
+
+	@POST
+	@Path("course")
+	@Consumes(MediaType.APPLICATION_JSON)
+	Long createCourse(Course course);
+}
diff --git a/src/main/java/java2/lab12/client/TableViewSample.java b/src/main/java/java2/lab12/client/TableViewSample.java
index 76a23c090d00533e4a578b1fc621b19a53ee9814..39f09d6c34a4eb1b7104ff92cf5ef5368dd48386 100644
--- a/src/main/java/java2/lab12/client/TableViewSample.java
+++ b/src/main/java/java2/lab12/client/TableViewSample.java
@@ -1,7 +1,14 @@
 package java2.lab12.client;
 
+import com.fasterxml.jackson.databind.SerializationFeature;
+import com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider;
+
 import java.util.Collection;
 import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.cxf.jaxrs.client.JAXRSClientFactory;
 
 import javafx.application.Application;
 import javafx.collections.FXCollections;
@@ -24,7 +31,9 @@ import javafx.scene.layout.VBox;
 import javafx.scene.text.Font;
 import javafx.stage.Stage;
 import javafx.stage.WindowEvent;
+import lombok.extern.log4j.Log4j2;
  
+@Log4j2
 public class TableViewSample extends Application {
  
 	
@@ -158,8 +167,21 @@ public class TableViewSample extends Application {
 		System.exit(0);
 	}
 
+	private CourseClient getClient() {
+		Map<String, Object> properties = new HashMap<>();
+
+		CourseClient client = JAXRSClientFactory.create("http://localhost:8080",
+			CourseClient.class, Collections.singletonList(
+				new JacksonJaxbJsonProvider().disable(
+					SerializationFeature.WRAP_ROOT_VALUE).disable(
+						SerializationFeature.WRITE_SINGLE_ELEM_ARRAYS_UNWRAPPED)),
+			properties, true);
+		return client;
+	}
+
 	private Collection<Course> getCourses() {
-		return Collections.emptyList();
+		CourseClient client = getClient();
+		return client.getCourses();
 	}
 
 	private void createCourse(Course p) {