Day 19: Interface XSQL Melalui Program Java


Learning In HomeOriginal Date: 31 Januari 2009

Untuk meng-akses sebuah halaman XSQL dan melakukan pemrosesan terhadap halaman XSQL tersebut di dalam program Java, aku dapat menggunakan class XSQLRequest seperti pada contoh kode berikut ini:

try {
  XSQLRequest xsqlRequest = 
    new XSQLRequest(
   "file://c:\\XSQL\\latihan.xsql");
			
  Hashtable params = new Hashtable();
  params.put("kolomUrut", "EMPNO");
			
  xsqlRequest.process(params, 
    new PrintWriter(System.out), 
    new PrintWriter(System.err));
			
} catch (Exception e) {
  e.printStackTrace();
}

Jika action yang disediakan oleh XSQL dirasakan belum cukup, maka aku diperbolehkan untuk menambah action handler baru. Caranya adalah dengan meng-implementasi-kan interface oracle.xml.xsql.XSQLActionHandler, atau yang lebih gampang, dengan menurunkan class baru dari class oracle.xml.xsql.XSQLActionHandlerImpl.

Sebagai contoh, aku memiliki XSQL seperti berikut:

<?xml version="1.0" ?>
<hasil connection="latihan" xmlns:xsql="urn:oracle-xsql">

<xsql:action handler="xml.TestXSQLHandler">
    <nama>Solid Snake</nama>
</xsql:action>

<xsql:action handler="xml.TestXSQLHandler">

    <nama>Unknown Man</nama>
</xsql:action>

</hasil>

XSQL di atas akan memakai handler yang berupa class xml.TestXSQLHandler. Pastikan class tersebut terdapat di CLASSPATH, dan juga class tersebut di-compile dengan JDK bawaan Oracle, yaitu Java versi 1.4. Aku sempat mengalami masalah saat memakai JDK 6 karena XSQL Processor menolak class dengan versi yang tidak seperti yang ia harapkan. Berikut ini adalah isi handler latihan yang akan menambah atribut untuk element nama berupa atribut namaDepan dan namaBelakang:


package xml;

import java.sql.SQLException;
import oracle.xml.xsql.XSQLActionHandlerImpl;
import org.w3c.dom.DocumentFragment;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class TestXSQLHandler 
   extends XSQLActionHandlerImpl {
	
 public void handleAction(Node result) 
   throws SQLException {
		
  try {
    DocumentFragment df = 
      result.getOwnerDocument().
      createDocumentFragment();			
			
    Element e = getActionElement();
    NodeList nl = e.
      getElementsByTagName("nama");

    for (int i=0; i<nl.getLength(); i++) {
      Node n = nl.item(i);
      Node nValue = n.getFirstChild();
      String namaLengkap = 
        nValue.getNodeValue();
      String nama[] = 
        namaLengkap.split(" ");
      ((Element)n).setAttribute(
        "namaDepan", nama[0]);
      ((Element)n).setAttribute(
        "namaBelakang", nama[1]);
      df.appendChild(n);
    }
			
    result.appendChild(df);
			
  } catch (Exception e) {
    e.printStackTrace();
  }
 }		
}

Argument result untuk void handleAction akan menentukan seperti apa hasil akhir proses dari sebuah node xsql:action handler.Aku menggunakan getActionElement() dari XSQLActionHandlerImpl untuk mendapatkan element xsql:action handler yang sedang di-proses.

Perihal Solid Snake
I'm nothing...

Apa komentar Anda?

Please log in using one of these methods to post your comment:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: