Daily Archives: April 21st, 2013

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:

  1. Maven 3.0.5
  2. Eclipse Juno
  3. JDK 1.6
  4. 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