Webservices4PM 19032021

Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 6

Date : 19/03/2021

Webservices 4:30PM
Mr. RAGHU
-------------------------------
https://www.facebook.com/groups/thejavatemple
javabyraghu@gmail.com
JAX-B Annotations:

a. @XmlRootElement
b. @XmlTransient
c. @XmlAttribute
d. @XmlElement
e. @XmlAccessorType
-------------------------------------------
Complex Types using JAX-B

*) List/Set
Tag/Element/variableName is repeated multiple times in XML
file for given data.

ex: List<String> data =...


<data>A</data>
<data>B</data>
<data>C</data>

=> We can add even one @XmlElementWrapper(name="my-sample")


<my-sample>
<data>A</data>
<data>B</data>
<data>C</data>
<my-sample>
----------------------
*) Map : Here data is provided as entry(key+val)
We can even call Map is Set of Entries (Set<Entry<K,V>>)
Entry is a Inner interface for Map

interface Map<K,V> {
interface Entry<K,V> {

}
}

XML Format is given as


<entry>
<key> </key>
<value> </value>
</entry>

*) For Map @XmlElement has no meaning.


But we can apply @XmlElementWrapper.

---code for Iterator using Map.Entry------------


package in.nit.test;

import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

public class TestTwo {

public static void main(String[] args) {

Map<String,String> clients = new LinkedHashMap<>();


clients.put("C3", "HORKYO");
clients.put("C2", "MEGA CORP");
clients.put("C1", "ACT-COM");

//convert Map to Set<Entry>


Set<Entry<String,String>> entries = clients.entrySet();
// call iterator
Iterator<Entry<String,String>> itr = entries.iterator();

while (itr.hasNext()) {
Map.Entry<String, String> entry = itr.next();
System.out.println(entry.getKey()+"-"+entry.getValue());
}

}
}

-------------------------------------
*) Association Mapping (HAS-A)

Employee---<>Address

Here, Child class(Address) behaves like child element to


Parent class(Employee) root element.

<employee>
...
<address>
..
</address>
</employee>
--------------------------------------------
pom.xml
<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
https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>in.nit</groupId>
<artifactId>JaxbExTwo</artifactId>
<version>1.0</version>

<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.2.11</version>
</dependency>

<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-core</artifactId>
<version>2.2.11</version>
</dependency>

</dependencies>
</project>

2. Models
package in.nit.model;

public class Address {

private String hno;


private String loc;

public String getHno() {


return hno;
}
public void setHno(String hno) {
this.hno = hno;
}
public String getLoc() {
return loc;
}
public void setLoc(String loc) {
this.loc = loc;
}
@Override
public String toString() {
return "Address [hno=" + hno + ", loc=" + loc + "]";
}

}
------------
package in.nit.model;

import java.util.Map;
//ctrl+shift+O
import java.util.Set;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Employee {

@XmlAttribute(name = "id")
private Integer empId;
@XmlElement(name = "employee-name")
private String empName;
@XmlElement(name="employee-salary")
private Double empSal;
@XmlTransient
private String empPwd;

@XmlElementWrapper(name="projects")
@XmlElement(name="project-name")
private Set<String> empPrjs;

@XmlElementWrapper(name="project-clients")
//@XmlElement(name="project-client")--not applicable
private Map<String,String> clients;

@XmlElement(name="address")
private Address addr; //HAS-A

public Integer getEmpId() {


return empId;
}
public void setEmpId(Integer empId) {
this.empId = empId;
}
public String getEmpName() {
return empName;
}
public void setEmpName(String empName) {
this.empName = empName;
}
public Double getEmpSal() {
return empSal;
}
public void setEmpSal(Double empSal) {
this.empSal = empSal;
}
public String getEmpPwd() {
return empPwd;
}
public void setEmpPwd(String empPwd) {
this.empPwd = empPwd;
}
public Set<String> getEmpPrjs() {
return empPrjs;
}
public void setEmpPrjs(Set<String> empPrjs) {
this.empPrjs = empPrjs;
}
public Map<String, String> getClients() {
return clients;
}
public void setClients(Map<String, String> clients) {
this.clients = clients;
}
public Address getAddr() {
return addr;
}
public void setAddr(Address addr) {
this.addr = addr;
}
@Override
public String toString() {
return "Employee [empId=" + empId + ", empName=" + empName + ",
empSal=" + empSal + ", empPwd=" + empPwd
+ ", empPrjs=" + empPrjs + ", clients=" + clients + ",
addr=" + addr + "]";
}

3. Test class
package in.nit.test;

import java.io.File;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;

import in.nit.model.Address;
import in.nit.model.Employee;

public class Test {

public static void main(String[] args) {


try {
Employee emp = new Employee();
emp.setEmpId(10);
emp.setEmpName("SAMPLE");
emp.setEmpSal(200.0);
emp.setEmpPwd("ABCD");

//JDK 1.7 Empty <> - Collections Type Inference


Set<String> prjs = new HashSet<>();
prjs.add("NIT");
prjs.add("ORCL");
prjs.add("ABT");

emp.setEmpPrjs(prjs);

Map<String,String> clients = new LinkedHashMap<>();


clients.put("C3", "HORKYO");
clients.put("C2", "MEGA CORP");
clients.put("C1", "ACT-COM");

emp.setClients(clients);

Address addr = new Address();


addr.setHno("9-99/A-5");
addr.setLoc("HYD");

emp.setAddr(addr);

JAXBContext context = JAXBContext.newInstance(Employee.class);


Marshaller m = context.createMarshaller();
m.marshal(emp, new File("E:/logs/emps.xml"));
System.out.println("DONE");
} catch (Exception e) {
e.printStackTrace();
}
}
}
------Task-----------------
Student---<>Course

Student(C)
sid
sname
subjects:Set<String>
marks : Map<String,Integer>
course:Course

Course(C)
cid
cname
sfee
*) Create Student class object --> XML File

You might also like