2010-08-03

JAXB : Java object to XML without XML Schema

在 jdk 6.0 上面 已經內建 JAXB. 所以直接使用就可以.
研究了一陣子, 看了很多文件. 都大概需要使用xml schema 來產生 java to xml.
不過今天看到一個文章 Generate an XML Document from an Object Model with JAXB 2裡頭有範例, 可以不用使用 XML schema. 就來試試看摟.

開發兩個 Enity Bean(Person.java, Address.java) , 還有一個測試轉換的 Test Code(PersonTest.java).
1. 在 Person 中, 會包涵 Address. 所以在 Person 定義 @XmlRootElement. 這樣Address 也會自動被轉成xml.
2. Address 作一個設定, 原本應該要產生 zipcode tag, 如果想要換成別的. 必須先定義@XmlAccessorType(XmlAccessType.FIELD), 然後在 zipcode field在定義@XmlElement(name = "zip") 這樣轉換出來的address tag 會包涵zip tag 不會是 zipcode tag.




Person.java

package jaxbtest;

import javax.xml.bind.annotation.XmlRootElement;

/**
*
* @author longtai
*/
@XmlRootElement
public class Person {
private String name;
private String email;
private Address address;

/**
* @return the name
*/
public String getName() {
return name;
}

/**
* @param name the name to set
*/
public void setName(String name) {
this.name = name;
}

/**
* @return the email
*/
public String getEmail() {
return email;
}

/**
* @param email the email to set
*/
public void setEmail(String email) {
this.email = email;
}

/**
* @return the address
*/
public Address getAddress() {
return address;
}

/**
* @param address the address to set
*/
public void setAddress(Address address) {
this.address = address;
}

}


Address.java

package jaxbtest;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;

/**
*
* @author longtai
*/
@XmlAccessorType(XmlAccessType.FIELD)
public class Address {
private String address;
@XmlElement(name = "zip")
private String zipcode;

/**
* @return the address
*/
public String getAddress() {
return address;
}

/**
* @param address the address to set
*/
public void setAddress(String address) {
this.address = address;
}

/**
* @return the zipcode
*/
public String getZipcode() {
return zipcode;
}

/**
* @param zipcode the zipcode to set
*/
public void setZipcode(String zipcode) {
this.zipcode = zipcode;
}
}


PersonTest.java

package jaxbtest;

import java.io.StringReader;
import java.io.StringWriter;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import junit.framework.JUnit4TestAdapter;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;

/**
*
* @author longtai
*/
public class PersonTest {

public PersonTest() {
}

public static junit.framework.Test suite() {
return new JUnit4TestAdapter(PersonTest.class);
}

@BeforeClass
public static void setUpClass() throws Exception {
}

@AfterClass
public static void tearDownClass() throws Exception {
}

@Test
public void testMarshal() throws Exception {
Person p = new Person();
p.setName("longtai");
p.setEmail("longtai.tw@gmail.com");
Address a = new Address();
a.setAddress("台灣新竹");
a.setZipcode("35002");
p.setAddress(a);

StringWriter writer = new StringWriter();
JAXBContext context = JAXBContext.newInstance(Person.class);
Marshaller m = context.createMarshaller();
m.marshal(p, writer);

System.out.println(writer);
}

@Test
public void testUnmarshal() throws Exception
{
StringReader reader = new StringReader("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><person><address><address>%u53F0%u7063%u65B0%u7AF9</address><zip>35002</zip></address><email>longtai.tw@gmail.com</email><name>longtai</name></person>");
JAXBContext context = JAXBContext.newInstance(Person.class);
Unmarshaller um = context.createUnmarshaller();
Person p = (Person)um.unmarshal(reader);

System.out.println(p.getName());
System.out.println(p.getAddress().getAddress());
System.out.println(p.getAddress().getZipcode());


}
}

2010-07-23

吃紅色火龍果 好像有助 排便

這個禮拜 肚子都漲漲悶悶的.. 精神也不是很好....
就在 昨天晚上 吃了 鄰居送的 紅色火龍果...
今天早上 一到公司 就 一切順暢... 量 還蠻多的..
快到中午又順暢了一次, 但是不是 拉肚子喔..
現在精神就感覺好很多, 比起前幾天的肚子悶悶 跟 精神不繼. 大概 宿便太多了會有影響.

所以, 大概以後有這樣問題. 就來吃紅色火龍果摟..

2009-07-23

在ssh consle 下顯示中文


  1. 安裝與設定locale

    apt-get install locales
    dpkg-reconfigure locales
    cat /etc/locales.gen

    dpkg-reconfigure 選單裡面一共選了

    en_US ISO-8859-1
    en_US.UTF-8 UTF-8
    zh_TW BIG5
    zh_TW.UTF-8 UTF-8

    最後 default 部份選用 zh_TW.UTF-8

    檢查 /etc/locales.gen 裡面的設定是否正確.



  2. 編輯 ~/.bashrc

    export LC_ALL=zh_TW.UTF-8
    export LANG=zh_TW.UTF-8

    將上面兩行新增進 ~/.bashrc


  3. 設定ssh client 使用 UTF-8 連線

2009-07-08

PSP 2007 改機到可以玩 iso檔

拿抽到的 ipod touch 去換了一台 psp 2007 version 4.01 版. 去nova 買了一張 sony 4g ms pro 的記憶卡($680 在新竹nova 最裡面那一個賣 電玩的). 接下來就是要描述如何改機變成可以玩iso 檔的步驟.
1. 更新韌體到 5.03版
  1. 檢查現有 韌體版本
  2. 下載 5.03官方下載 密碼:楓葉小嘉上傳
  3. 複製 eboot.pbp 到 usb_mode:/PSP/GAME/UPDATE.(如果沒有請自行新增, 我的經驗是 新的只需要自己新增 UPDATE 這一個目錄)
  4. 執行升級

    psp_mode:/game/Memory Stick/PSP 升級版本5.03
    psp_ui: 開始. 按下 [x]決定
    psp_ui: 接受升級 接受
    psp_ui: 升級百分比. 直到100%
  5. 檢查是否升級到 5.03

    psp_mode:/Settings/System Settings/System Infomation
    psp_ui: System Sodtware 5.03

2. hack to 5.03HEN
  1. 下載 猴子都會用的版本
  2. 複製 壓縮檔中 /PICTURE/* to usb_mode:/PICTURE/
  3. 複製 壓縮檔中/請自行刪增純彩圖直到成功率高為止/* to usb_mode:/PICTURE/
  4. psp_mode:/Photo/Memory Stick. (壓進去以後 PSP會自動掃描所有檔案, 如果成功你的畫面會出現 綠底, 接著 PSP 會自動重新開機, 就算是成功. 如果沒有出現綠底, 那過一小段時間你的PSP 會自動關機, 不會開機, 表示沒有成功. 到目前為止, 我的成功率蠻高的.)
  5. 檢查 韌體版本

    psp_mode:/Settings/System Settings/System Infomation
    psp_ui: System Sodtware 5.03 ChickHEN R2

3. 啟動 CFWEnabler 3.10
4. 開始玩 iso 遊戲

2009-07-01

修改 kurobox pro source.list for debian etch

按照KURO-BOX/PRO 完整安裝改機的講法我已經把 kurobox pro 更新到 debian etch. 不過, 裡面的 /etc/apt/source.list 已經過時找不到相關的apt-get 可以用的 source list.
[分享] 老調重彈 - 玄箱(追加 console 連線心得、追加作業系統使用心得)這一篇裡面有說明如何新增自己 source.list 按照上面的講法.
vi /etc/apt/source.list

deb http://security.debian.org/ oldstable/updates main contrib non-free
deb ftp://opensource.nchc.org.tw/debian/ oldstable main contrib non-free
deb ftp://debian.linux.org.tw/debian/ oldstable main contrib non-free
deb-src ftp://opensource.nchc.org.tw/debian/ oldstable main contrib non-free
deb-src ftp://debian.linux.org.tw/debian/ oldstable main contrib non-free

apt-get update
apt-get upgrade
apt-get dist-upgrade
就可以繼續進行相關的 安裝