Parsing XML in Java – (SAX Parser)
SAX Parser merupakan parsing xml yang lebih cepat dan less memory dari pada DOM Parser. Saya tahu SAX Parser pada saat menangani project Java di kantor. gak usah berbicara lama – lama, lets Begin…
1. XML File
Buat simple xml file
<?xml version="1.0"?> <company> <staff> <firstname>yong</firstname> <lastname>mook kim</lastname> <nickname>mkyong</nickname> <salary>100000</salary> </staff> <staff> <firstname>low</firstname> <lastname>yin fong</lastname> <nickname>fong fong</nickname> <salary>200000</salary> </staff> </company>
2. Java File
Gunakan SAX Parser untuk memparsing XML file
package com.yudi.sax; import java.io.File; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class ReadXMLFile { public static void main(String[] args) { try { SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser saxParser = factory.newSAXParser(); DefaultHandler handler = new DefaultHandler() { boolean bfname = false; boolean blname = false; boolean bnname = false; boolean bsalary = false; @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { // TODO Auto-generated method stub System.out.println("Start Element " + qName); if (qName.equalsIgnoreCase("FIRSTNAME")) { bfname = true; } if (qName.equalsIgnoreCase("LASTNAME")) { blname = true; } if (qName.equalsIgnoreCase("NICKNAME")) { bnname = true; } if (qName.equalsIgnoreCase("SALARY")) { bsalary = true; } } @Override public void endElement(String uri, String localName, String qName) throws SAXException { // TODO Auto-generated method stub System.out.println("End Element :" + qName); } @Override public void characters(char[] ch, int start, int length) throws SAXException { // TODO Auto-generated method stub if (bfname) { System.out.println("First Name : " + new String(ch, start, length)); bfname = false; } if (blname) { System.out.println("Last Name : " + new String(ch, start, length)); blname = false; } if (bnname) { System.out.println("Nick Name : " + new String(ch, start, length)); bnname = false; } if (bsalary) { System.out.println("Salary : " + new String(ch, start, length)); bsalary = false; } } }; saxParser.parse(new File("/home/yudi/Desktop/tes.xml"), handler); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } } }
Result
Start Element :company
Start Element :staff
Start Element :firstname
First Name : yong
End Element :firstname
Start Element :lastname
Last Name : mook kim
End Element :lastname
Start Element :nickname
Nick Name : mkyong
End Element :nickname
Start Element :salary
Salary : 100000
End Element :salary
End Element :staff
Start Element :staff
Start Element :firstname
First Name : low
End Element :firstname
Start Element :lastname
Last Name : yin fong
End Element :lastname
Start Element :nickname
Nick Name : fong fong
End Element :nickname
Start Element :salary
Salary : 200000
End Element :salary
End Element :staff
End Element :company
Refference : Mkyong.com
Create Web Application Project Using Maven
Pada posting sebelumnya, saya memposting cara menginstall apache Maven di Linux Mint, untuk posting kali ini saya akan memposting cara membuat web application project menggunakan apache Maven dan support Eclipse IDE. Lets begin…
Tools yang digunakan:
- Maven 3.0.5
- Eclipse Juno
- JDK 1.6
- Tomcat 7
1. Web Application Project from Maven Template
Masuk ke terminal jika anda menggunakan windows, masuk ke command prompt. navigate ke folder untuk meyimpan project folder. ketikkan perintah berikut :
mvn archetype:generate -DgroupId={project-packaging} -DartifactId={project-name} -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false
maksud dari command diatas adalah untuk membuat java web application project dari “maven-archetype-webapp” template.
Contoh :
mvn archetype:generate -DgroupId=com.yudi -DartifactId=JsonExample -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false
2. Eclipse IDE Support
Untuk mengkonversi Maven Web Project ke Eclipse Project, in terminal navigate ke “JsonExample” folder. dan ketikkan perintah berikut ini :
mvn eclipse:eclipse -Dwtpversion=2.0
Done…. Silahkan di komentari….
Refference : Mkyong.com
Convert Java Object to / from JSON
Jackson adalah High performance JSON processor library Java. pada posting kali ini, saya akan mencontohkan bagaimana men-convert Java object ke / dari JSON.
ada dua methods pada librarry Jackson untuk conversion yaitu:
//1. Convert Java object to JSON format
ObjectMapper mapper = new ObjectMapper();
mapper.writeValue(new File(“/home/yudi/Dokuments/user.json”), user);
//2. Convert JSON to Java object
ObjectMapper mapper = new ObjectMapper();
User user = mapper.readValue(new File(“/home/yudi/Dokuments/user.json”), User.class);
Lets Begin….
Pada tutorial ini saya menggunakan toosl:
1. Maven
2. Eclipse
1. Jackson Dependency
Masukkan code dependency ini ke dalam pom.xml
<repositories> <repository> <id>codehaus</id> <url>http://repository.codehaus.org/org/codehaus</url> </repository> </repositories> <dependencies> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl</artifactId> <version>1.8.5</version> </dependency> </dependencies>
bagi yang tidak menggunakan Maven, bisa download jar file di sini
2. Create User Object ( POJO )
package com.yudi.core; import java.util.ArrayList; import java.util.List; public class User { private int age = 23; private String name = "yudi"; private List messages = new ArrayList() { { add("test 1"); add("test 2"); add("test 3"); } }; //getter and setter methods @Override public String toString() { return "User [age=" + age + ", name=" + name + ", " + "messages=" + messages + "]"; } }
3. User Object to JSON
package com.yudi.core; import java.io.File; import java.io.IOException; import org.codehaus.jackson.JsonGenerationException; import org.codehaus.jackson.map.JsonMappingException; import org.codehaus.jackson.map.ObjectMapper; public class JacksonExample { public static void main(String[] args) { User user = new User(); ObjectMapper mapper = new ObjectMapper(); try { // convert user object to json string, and save to a file mapper.writeValue(new File("/home/yudi/Documents/user.json"), user); // display to console System.out.println(mapper.writeValueAsString(user)); } catch (JsonGenerationException e) { e.printStackTrace(); } catch (JsonMappingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
Output
{“age”:23,”messages”:[“test 1″,”test 2″,”test 3″],”name”:”yudi”}
4. JSON to Java Object
package com.yudi.core; import java.io.File; import java.io.IOException; import org.codehaus.jackson.JsonGenerationException; import org.codehaus.jackson.map.JsonMappingException; import org.codehaus.jackson.map.ObjectMapper; public class JacksonExample { public static void main(String[] args) { ObjectMapper mapper = new ObjectMapper(); try { // read from file, convert it to user class User user = mapper.readValue(new File("/home/yudi/Documents/user.json"), User.class); // display to console System.out.println(user); } catch (JsonGenerationException e) { e.printStackTrace(); } catch (JsonMappingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
Output
User [age=23, name=yudi, messages=[test 1, test 2, test 3]]
Install Maven di Linux Mint
Pada postingan sebelumnya saya memposting tentang Web Service dengan attachment. Pada kali ini saya akan memposting cara menginstall Apache Maven 3 di Linux Mint
Lets.. Begin…
1. Search Apache Maven package
masuk ke terminal, jalankan apt-cache search maven
untuk mendapatkan Maven package
$ apt-cache search maven
….
libxmlbeans-maven-plugin-java-doc – Documentation for Maven XMLBeans Plugin
maven – Java software project management and comprehension tool
maven-debian-helper – Helper tools for building Debian packages with Maven
maven2 – Java software project management and comprehension tool
2. Install Maven
Jalankan perintah sudo apt-get install maven
, untuk menginstall apache maven
$ sudo apt-get install maven
tunggu beberapa menit, hingga selesai…
3. Verifikasi
Jalakan perintah mvn -version
untuk mengecek apakah apache maven sudah terinstall.
$ mvn -version
Apache Maven 3.0.5 (r01de14724cdef164cd33c7c8c2fe155faf9602da; 2013-02-19 20:51:28+0700)
Maven home: /opt/apache-maven-3.0.5
Java version: 1.6.0_29, vendor: Sun Microsystems Inc.
Java home: /usr/lib/jvm/jdk1.6.0_29/jre
Default locale: en_US, platform encoding: UTF-8
OS name: “linux”, version: “3.5.0-17-generic”, arch: “i386”, family: “unix”
Tutorial JAX-WS With Attachment
Pada tutorial sebelumnya saya memposting cara menggunakan JAX-WS, pada kesempatan kali ini saya akan memposting bagaimana membuat web service dengan attachment dengan menggunakan Transmission Optimization Mechanism (MTOM). Lets begin…
1. Create Web Service
Class = ImageServer.java
package com.yudi.ws; import java.awt.Image; import javax.jws.WebMethod; import javax.jws.WebService; import javax.jws.soap.SOAPBinding; import javax.jws.soap.SOAPBinding.Style; @WebService @SOAPBinding(style = Style.RPC) public interface ImageServer { @WebMethod Image downloadImage(String name); @WebMethod String uploadImage(Image data, String name, int param1, int param2, String operator); }
Class = ImageServerImpl.java
package com.yudi.impl; import java.awt.Image; import java.awt.image.BufferedImage; import java.awt.image.RenderedImage; import java.io.File; import java.io.IOException; import java.net.URL; import javax.imageio.ImageIO; import javax.jws.WebMethod; import javax.jws.WebService; import javax.xml.ws.WebServiceException; import javax.xml.ws.soap.MTOM; import com.yudi.ws.ImageServer; @MTOM @WebService(endpointInterface = "com.yudi.ws.ImageServer") public class ImageServerImpl implements ImageServer { final static String PATH = "/home/yudi/Pictures/"; @WebMethod public Image downloadImage(String name) { // TODO Auto-generated method stub try { File image = new File("/home/yudi/Pictures/" + name); return ImageIO.read(image); } catch (IOException e) { e.printStackTrace(); return null; } } @WebMethod public String uploadImage(Image image, String name, int param1, int param2, String operator) { // TODO Auto-generated method stub int hasil =0; if (image != null) { try { File imageFile = new File(PATH + name); ImageIO.write((RenderedImage) image, "png", imageFile); if("+".equals(operator)){ hasil = param1 + param2; }else if("*".equals(operator)){ hasil = param1 * param2; } else { hasil = param1 - param2; } } catch (IOException e) { e.printStackTrace(); throw new WebServiceException("Upload Failed"); } return "Upload Successful "+String.valueOf(hasil); } throw new WebServiceException("no data to upload!"); } }
Class = ImagePublisher.java
package com.yudi.publish; import javax.xml.ws.Endpoint; import com.yudi.impl.ImageServerImpl; public class ImagePublisher { public static void main(String[] args) { Endpoint.publish("http://localhost:9999/ws/image", new ImageServerImpl()); System.out.println("Publish"); } }
Jalankan ImagePublisher.java untuk mem-publish web service yang telah kita buat tadi.
2. Web Service Client
Class = Main.java
package com.yudi.main; import java.awt.Image; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.net.URL; import javax.imageio.ImageIO; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; import javax.xml.namespace.QName; import javax.xml.ws.Service; import com.yudi.ws.ImageServer; public class Main { public static void main(String[] args) { /************ test upload ***************/ try { URL url = new URL("http://localhost:9999/ws/image?wsdl"); QName qname = new QName("http://impl.yudi.com/", "ImageServerImplService"); Service service = Service.create(url, qname); ImageServer imageServer = service.getPort(ImageServer.class); File imageFile = new File("/home/yudi/Music/bg.png"); Image imageUi = null; imageUi = ImageIO.read(imageFile); imageServer.uploadImage((BufferedImage) imageUi,"bg_upload.png", 5, 6, "*"); System.out.println("Upload Successful"); /************ test download ***************/ Image image = imageServer.downloadImage("bg_upload.png"); //display it in frame JFrame frame = new JFrame(); frame.setSize(300, 300); JLabel label = new JLabel(new ImageIcon(image)); frame.add(label); frame.setVisible(true); System.out.println("imageServer.downloadImage() : Download Successful!"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
Selesai, silahkan di test, tolong di komentary
Refference : Mkyong.com