Tomee 7.0.2, JSON date serialization, and workaround

When @Produces({ MediaType.APPLICATION_JSON }) and @XmlRootElement are put on a service and model classes respectively, Tomee serializes an entity to JSON automatically.

However, when java.util.Date is serialized, then the result was very strange, I expected this

"2012-01-02T11:12+07"

but what I actually got from Tomee 7.0.2 was

"25550102111200+0700"

So I tested with Tomee 1.7.4 instead of 7.0.2; and it works. Apache web site mentioned that Johnzon is used in Tomee 7.0.2, so I thought maybe the problem is there. I added a customized JohnzonConverter as follow:

In model:

@XmlRootElement
@Entity
public class Word {
...
    @JohnzonConverter(MyDateConverter.class)
    @Temporal(TemporalType.TIMESTAMP)
    private Date t1;
 ...
}

MyDateConverter.java:

import org.apache.johnzon.mapper.Converter;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import static java.util.Locale.ENGLISH;

public class MyDateConverter implements Converter<Date> {

    @Override
    public String toString(Date date) {
        return new SimpleDateFormat("yyyy-MM-dd'T'HH:mmX", ENGLISH).format(date);
    }

    @Override
    public Date fromString(String s) {
        try {
            return new SimpleDateFormat("yyyy-MM-dd'T'HH:mmX", ENGLISH).parse(s);
        } catch (ParseException e) {
            throw new IllegalArgumentException(e);
        }
    }
}

Then even Tomee 7.0.2 works in the way I expected.

P.S. I added this to pom.xml too

<dependency>
  <groupId>org.apache.johnzon</groupId>
  <artifactId>johnzon-mapper</artifactId>
  <version>1.0.0</version>
  <scope>provided</scope>
</dependency>

 

Advertisements

simplejson ใน python 2.6 และ python 2.5

ผมเคยใช้ python 2.6 แล้วงงๆ ไหนว่ามี simplejson ไง import simplejson ก็ไม่ได้ ที่ไหน import json แทน ใช้ import json ได้ได้พักหนึ่ง ก็เพลินดี วันนี้กลับมาเขียนโปรแกรมที่บ้านเจอ python 2.5 เข้าไป import json ได้เหมือนกันแต่ไม่มี .loads และ .dumps ก็เลยเขียน code ตอน import แบบนี้

try:
    import json
    json.loads
except:
    import simplejson as json

จำท่ามาจากตัวอย่าง bsddb ที่ไหนสักแห่ง ไม่รู้ว่าทำแบบนี้เหมาะหรือเปล่า แต่มันก็รันได้นะ …

เรียกว่า Basa API แล้วกัน

เป็นเวลานานมาแล้วเวลาเอาโปรแกรมต่างๆ มาต่อกัน ตัดคำเอย, part of speech tagger เอย ก็ต่อกันไม่ค่อยได้ นานมาแล้วอีกเหมือนกัน ก็เลยทำให้แต่ละตัวเป็น service ขึ้นมา แล้วก็เรียกผ่านเว็บได้. เคยดู SOAP ไว้แต่ว่ากว่าจะทำอะไรได้แต่ละอย่างก็วุ่นวายมากมาย กว่าจะใช้ได้. ใช้ XML-RPC ก็ง่ายหน่อยแต่ว่าดูเหมือนมันไม่ค่อยช่วยอะไร สุดท้ายก็ส่งแค่ string ที่มี XML หรือหลังๆ มาเป็น JSON อยู่ข้างในแล้วจะใช้ XML-RPC ทำไม เราก็แค่ใช้ HTTP. ล่าสุดนี้ REST น่าจะใกล้เคียงที่สุด แต่ก็ยังต้องประเด็นถกกันอีกว่าจะเรียก REST ได้หรือเปล่าบางคนก็เรียก REST แบบหลวมๆ บางคนก็ใช้แบบเคร่งครัด ต้องไม่มี state ไม่ใช้ cookie อะไรต่างๆ นานา ที่ผมก็ไม่มั่นใจอีกว่าจะทำอย่างนั้นได้ตลอด. ก็เลยตามเฟชัน เห็นเขามี Flickr/Yahoo/Google/Flickr API ก็เลยเรียก API ที่ทำอยู่ว่า “Basa API” และกัน Basa เป็นภาษาชวาแปลว่าภาษานั่นล่ะ :-P.

Basa API รวมๆ แล้วก็คือ API ที่เกี่ยวกับการประมวลผลภาษา ทำงานบน HTTP และใช้ JSON เป็นหลัก เน้นให้เอามาใช้กับ Ajax ง่ายๆ ด้วย แต่ก็ไม่จำเป็นต้องใช้กับ Ajax ตรงๆ (จำทำให้คล้าย REST หรือไม่คล้ายก็ได้).

ตอนนี้ประเด็นที่ดูต่อไปคือ authentication จำทำอย่างไร ใช้ basic auth จะง่ายไปหรือเปล่า ใช้ OAuth จะได้ได้หรือไม่.

dicthttp แบบมี xml และระบุ dict server ได้

dicthttp เป็นโปรแกรมที่ครอบ dict protocol ไว้อีกทีเพื่อที่จะใช้งานผ่าน http ได้ จะได้ไม่โดน block และใช้กับเทคนิค ajax ได้ด้วย. จาก ความเดิมในตอนที่แล้ว. dicthttp ให้ผลลัพธ์ออกมาเป็นแบบ json แถมยังเลือกไม่ได้ว่าจะใช้ dict server ตัวไหน จาก comment ของ @bact และ @jittat ก็ทำให้ได้ url แบบนี้ออกมา

http://localhost:8000/d:แมว?host=dict.longdo.com&format=xml

มี host=dict.longdo.com และ format=xml เข้ามาเพื่อระบุ dict server และ format ตามลำดับนั้นเอง

dict

มีภาพประกอบด้วย 😛

โปรแกรมก็เหมือนเดิม checkout ออกมาจาก svn ได้เลย http://code.google.com/p/basaasa/source/browse/#svn/trunk/dicthttp.