Merge pull request #483 from nguyennamthai/master
Introduction to Apache-CXF
This commit is contained in:
commit
648fb26ca2
|
@ -0,0 +1,53 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<artifactId>cxf-introduction</artifactId>
|
||||||
|
<parent>
|
||||||
|
<groupId>com.baeldung</groupId>
|
||||||
|
<artifactId>apache-cxf</artifactId>
|
||||||
|
<version>0.0.1-SNAPSHOT</version>
|
||||||
|
</parent>
|
||||||
|
<properties>
|
||||||
|
<skipTests>true</skipTests>
|
||||||
|
<cxf.version>3.1.6</cxf.version>
|
||||||
|
</properties>
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.cxf</groupId>
|
||||||
|
<artifactId>cxf-rt-frontend-jaxws</artifactId>
|
||||||
|
<version>${cxf.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.cxf</groupId>
|
||||||
|
<artifactId>cxf-rt-transports-http-jetty</artifactId>
|
||||||
|
<version>${cxf.version}</version>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
<profiles>
|
||||||
|
<profile>
|
||||||
|
<id>server</id>
|
||||||
|
<build>
|
||||||
|
<defaultGoal>test</defaultGoal>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.codehaus.mojo</groupId>
|
||||||
|
<artifactId>exec-maven-plugin</artifactId>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<phase>test</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>java</goal>
|
||||||
|
</goals>
|
||||||
|
<configuration>
|
||||||
|
<mainClass>com.baeldung.cxf.introduction.Server</mainClass>
|
||||||
|
</configuration>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
</profile>
|
||||||
|
</profiles>
|
||||||
|
</project>
|
|
@ -0,0 +1,16 @@
|
||||||
|
package com.baeldung.cxf.introduction;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import javax.jws.WebService;
|
||||||
|
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
|
||||||
|
|
||||||
|
@WebService
|
||||||
|
public interface Baeldung {
|
||||||
|
public String hello(String name);
|
||||||
|
|
||||||
|
public String helloStudent(Student student);
|
||||||
|
|
||||||
|
@XmlJavaTypeAdapter(StudentMapAdapter.class)
|
||||||
|
public Map<Integer, Student> getStudents();
|
||||||
|
}
|
|
@ -0,0 +1,24 @@
|
||||||
|
package com.baeldung.cxf.introduction;
|
||||||
|
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import javax.jws.WebService;
|
||||||
|
|
||||||
|
@WebService(endpointInterface = "com.baeldung.cxf.introduction.Baeldung")
|
||||||
|
public class BaeldungImpl implements Baeldung {
|
||||||
|
private Map<Integer, Student> students = new LinkedHashMap<Integer, Student>();
|
||||||
|
|
||||||
|
public String hello(String name) {
|
||||||
|
return "Hello " + name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String helloStudent(Student student) {
|
||||||
|
students.put(students.size() + 1, student);
|
||||||
|
return "Hello " + student.getName();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map<Integer, Student> getStudents() {
|
||||||
|
return students;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
package com.baeldung.cxf.introduction;
|
||||||
|
|
||||||
|
import javax.xml.ws.Endpoint;
|
||||||
|
|
||||||
|
public class Server {
|
||||||
|
private Server() {
|
||||||
|
BaeldungImpl implementor = new BaeldungImpl();
|
||||||
|
String address = "http://localhost:8080/baeldung";
|
||||||
|
Endpoint.publish(address, implementor);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String args[]) throws InterruptedException {
|
||||||
|
new Server();
|
||||||
|
System.out.println("Server ready");
|
||||||
|
Thread.sleep(60 * 1000);
|
||||||
|
System.out.println("Server exiting");
|
||||||
|
System.exit(0);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,8 @@
|
||||||
|
package com.baeldung.cxf.introduction;
|
||||||
|
|
||||||
|
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
|
||||||
|
|
||||||
|
@XmlJavaTypeAdapter(StudentAdapter.class)
|
||||||
|
public interface Student {
|
||||||
|
public String getName();
|
||||||
|
}
|
|
@ -0,0 +1,16 @@
|
||||||
|
package com.baeldung.cxf.introduction;
|
||||||
|
|
||||||
|
import javax.xml.bind.annotation.adapters.XmlAdapter;
|
||||||
|
|
||||||
|
public class StudentAdapter extends XmlAdapter<StudentImpl, Student> {
|
||||||
|
public StudentImpl marshal(Student student) throws Exception {
|
||||||
|
if (student instanceof StudentImpl) {
|
||||||
|
return (StudentImpl) student;
|
||||||
|
}
|
||||||
|
return new StudentImpl(student.getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
public Student unmarshal(StudentImpl student) throws Exception {
|
||||||
|
return student;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,23 @@
|
||||||
|
package com.baeldung.cxf.introduction;
|
||||||
|
|
||||||
|
import javax.xml.bind.annotation.XmlType;
|
||||||
|
|
||||||
|
@XmlType(name = "Student")
|
||||||
|
public class StudentImpl implements Student {
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
StudentImpl() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public StudentImpl(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,39 @@
|
||||||
|
package com.baeldung.cxf.introduction;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import javax.xml.bind.annotation.XmlElement;
|
||||||
|
import javax.xml.bind.annotation.XmlType;
|
||||||
|
|
||||||
|
@XmlType(name = "StudentMap")
|
||||||
|
public class StudentMap {
|
||||||
|
private List<StudentEntry> entries = new ArrayList<StudentEntry>();
|
||||||
|
|
||||||
|
@XmlElement(nillable = false, name = "entry")
|
||||||
|
public List<StudentEntry> getEntries() {
|
||||||
|
return entries;
|
||||||
|
}
|
||||||
|
|
||||||
|
@XmlType(name = "StudentEntry")
|
||||||
|
public static class StudentEntry {
|
||||||
|
private Integer id;
|
||||||
|
private Student student;
|
||||||
|
|
||||||
|
public void setId(Integer id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStudent(Student student) {
|
||||||
|
this.student = student;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Student getStudent() {
|
||||||
|
return student;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,27 @@
|
||||||
|
package com.baeldung.cxf.introduction;
|
||||||
|
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import javax.xml.bind.annotation.adapters.XmlAdapter;
|
||||||
|
|
||||||
|
public class StudentMapAdapter extends XmlAdapter<StudentMap, Map<Integer, Student>> {
|
||||||
|
public StudentMap marshal(Map<Integer, Student> boundMap) throws Exception {
|
||||||
|
StudentMap valueMap = new StudentMap();
|
||||||
|
for (Map.Entry<Integer, Student> boundEntry : boundMap.entrySet()) {
|
||||||
|
StudentMap.StudentEntry valueEntry = new StudentMap.StudentEntry();
|
||||||
|
valueEntry.setStudent(boundEntry.getValue());
|
||||||
|
valueEntry.setId(boundEntry.getKey());
|
||||||
|
valueMap.getEntries().add(valueEntry);
|
||||||
|
}
|
||||||
|
return valueMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map<Integer, Student> unmarshal(StudentMap valueMap) throws Exception {
|
||||||
|
Map<Integer, Student> boundMap = new LinkedHashMap<Integer, Student>();
|
||||||
|
for (StudentMap.StudentEntry studentEntry : valueMap.getEntries()) {
|
||||||
|
boundMap.put(studentEntry.getId(), studentEntry.getStudent());
|
||||||
|
}
|
||||||
|
return boundMap;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,65 @@
|
||||||
|
package com.baeldung.cxf.introduction;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
|
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import javax.xml.namespace.QName;
|
||||||
|
import javax.xml.ws.Service;
|
||||||
|
import javax.xml.ws.soap.SOAPBinding;
|
||||||
|
|
||||||
|
import com.baeldung.cxf.introduction.Baeldung;
|
||||||
|
import com.baeldung.cxf.introduction.Student;
|
||||||
|
import com.baeldung.cxf.introduction.StudentImpl;
|
||||||
|
|
||||||
|
public class StudentTest {
|
||||||
|
private static QName SERVICE_NAME = new QName("http://introduction.cxf.baeldung.com/", "Baeldung");
|
||||||
|
private static QName PORT_NAME = new QName("http://introduction.cxf.baeldung.com/", "BaeldungPort");
|
||||||
|
|
||||||
|
private Service service;
|
||||||
|
private Baeldung baeldungProxy;
|
||||||
|
private Baeldung baeldungImpl;
|
||||||
|
|
||||||
|
{
|
||||||
|
service = Service.create(SERVICE_NAME);
|
||||||
|
String endpointAddress = "http://localhost:8080/baeldung";
|
||||||
|
service.addPort(PORT_NAME, SOAPBinding.SOAP11HTTP_BINDING, endpointAddress);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void reinstantiateBaeldungInstances() {
|
||||||
|
baeldungImpl = new BaeldungImpl();
|
||||||
|
baeldungProxy = service.getPort(PORT_NAME, Baeldung.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenUsingHelloMethod_thenCorrect() {
|
||||||
|
String endpointResponse = baeldungProxy.hello("Baeldung");
|
||||||
|
String localResponse = baeldungImpl.hello("Baeldung");
|
||||||
|
assertEquals(localResponse, endpointResponse);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenUsingHelloStudentMethod_thenCorrect() {
|
||||||
|
Student student = new StudentImpl("John Doe");
|
||||||
|
String endpointResponse = baeldungProxy.helloStudent(student);
|
||||||
|
String localResponse = baeldungImpl.helloStudent(student);
|
||||||
|
assertEquals(localResponse, endpointResponse);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void usingGetStudentsMethod_thenCorrect() {
|
||||||
|
Student student1 = new StudentImpl("Adam");
|
||||||
|
baeldungProxy.helloStudent(student1);
|
||||||
|
|
||||||
|
Student student2 = new StudentImpl("Eve");
|
||||||
|
baeldungProxy.helloStudent(student2);
|
||||||
|
|
||||||
|
Map<Integer, Student> students = baeldungProxy.getStudents();
|
||||||
|
assertEquals("Adam", students.get(1).getName());
|
||||||
|
assertEquals("Eve", students.get(2).getName());
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,40 @@
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<groupId>com.baeldung</groupId>
|
||||||
|
<artifactId>apache-cxf</artifactId>
|
||||||
|
<version>0.0.1-SNAPSHOT</version>
|
||||||
|
<packaging>pom</packaging>
|
||||||
|
<modules>
|
||||||
|
<module>cxf-introduction</module>
|
||||||
|
</modules>
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>junit</groupId>
|
||||||
|
<artifactId>junit</artifactId>
|
||||||
|
<version>4.12</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
<build>
|
||||||
|
<defaultGoal>install</defaultGoal>
|
||||||
|
<pluginManagement>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<version>3.5.1</version>
|
||||||
|
<configuration>
|
||||||
|
<source>1.8</source>
|
||||||
|
<target>1.8</target>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.codehaus.mojo</groupId>
|
||||||
|
<artifactId>exec-maven-plugin</artifactId>
|
||||||
|
<version>1.5.0</version>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</pluginManagement>
|
||||||
|
</build>
|
||||||
|
</project>
|
Loading…
Reference in New Issue