Posts Tagged ‘groovy’

Maven recipe #1: Test Java code with groovy

05月 19, 2010

问题: 受够了,不想写Java了,写个含有数据的map还要new出来一个一个put进去,想用groovy解决单元测试
解决: gmaven+groovy eclipse插件可以解决这个需求
在pom.xml中添加gmaven的依赖,注意,仅用来测试。老大不让生产代码里有不可靠的东西。
[cc lang="xml"]

org.codehaus.groovy.maven.runtime
gmaven-runtime-default
1.0-rc-3
test

org.codehaus.groovy.maven
gmaven-plugin
1.0-rc-3

generateStubs
compile
generateTestStubs
testCompile

[/cc]

在eclipse中新建source folder, src/test/groovy,在其中创建groovy test case即可

Groovy http-builder tips

11月 20, 2009

最近用Groovy的HttpBuilder模块开发RESTful服务的客户端,遇到不少问题,浪费不少时间

网上的例子都是从Grape开始的,但是按照例子上运行,无论是通过grape install还是在代码里@Grab都没有办法把http builder加到classpath里,甚至依赖关系已经下载到~/.groovy/grapes里了,但是还是在import的时候报错。用Grails的时候也是一样,如果通过ivy定义依赖,通过ant下载到lib目录中,在grails shell里还是没有办法引用。不理解了,难道还需要手动再指定path吗。最后用grails的rest插件(grails install-plugin rest)总算是下载到了path中了。

第二是http builder的报错太智能了,它会把服务器端50x的报错输出在客户端。在查看错误的时候一定要分清楚。

第三是net.sf.json-lib这个库在转json的时候有一点问题,比如这样的js对象
{“result”:”success”}

会因为key上有引号而无法解析,必须是这样的格式:
{result: “success”}

至于那种是正确的json我也没有兴趣了解了,只是非常遗憾的是couchdb返回的都是前一种形式。

当然了,瑕不掩瑜,http builder还是提供了非常方便的封装,比直接用HttpURLConnection或是HttpClient更加Groovy

Mapping Geometry in Grails and MySQL

10月 6, 2009

针对地理数据的ORM,有一个Hibernate的扩展HibernateSpatial项目可以将JTS对象映射到MySQL/PostGIS/Oracle中。这个扩展同样可以用在Grails里,这里有一篇简单的介绍,关于在Grails和MySQL中管理地理数据:
http://www.grails.org/MySQL+GIS-Geometry+with+Grails

不过按照这个文章里介绍的方法用,很可能会遭遇这样的报错:

org.hibernate.MappingException: No Dialect mapping for JDBC type: 2003

这个问题最终在这里得到了解答:
http://n2.nabble.com/No-Dialect-mapping-for-JDBC-type-2003-td1141106.html
按照邮件列表里的反映,上面的配置在Postgis里是可以work的,但是如果用Mysql还需要指定JPA的columnDefinition,对应的Hibernate属性是sql-type。虽然作者承诺会在今后的版本里修改这个问题,不过眼下的M2版本还没有修正这个问题。为此,Grails的用户特地提出在Grails中加入sql-type的支持:
http://jira.codehaus.org/browse/GRAILS-3201
现在按照下面文档的说明,可以在mapping里指定sqlType了:
http://grails.org/doc/latest/ref/Database%20Mapping/column.html

实例代码里的domain定义应该改成:

import com.vividsolutions.jts.geom.Polygon
import org.hibernatespatial.GeometryUserType

public class MyPoly {
    String name
    Polygon poly

    static mapping = {
        poly type: GeometryUserType, sqlType:"GEOMETRY"
    }

}

于是,再也没有莫名其妙的No Dialect报错了。

Reading GPS Data From EXIF Using Groovy

10月 5, 2009

废话不说了,直接上code吧:

import com.drew.imaging.jpeg.*;
import com.drew.metadata.*;
import com.drew.metadata.exif.*;

file = new File("sample.jpg");
meta = JpegMetadataReader.readMetadata(file);

gpsdir = meta.getDirectory(GpsDirectory.class);
lat = gpsdir.getRationalArray(GpsDirectory.TAG_GPS_LATITUDE);
lon = gpsdir.getRationalArray(GpsDirectory.TAG_GPS_LONGITUDE);
lats = lat[0].doubleValue() + lat[1].doubleValue()/60 + lat[2].doubleValue()/3600;
lons = lon[0].doubleValue() + lon[1].doubleValue()/60 + lon[2].doubleValue()/3600;
println(lats);
println(lons);

metadata-extractor似乎是现在惟一的读取exif信息的java库。在ivy中可以添加这样一个依赖:

<dependency org="com.drewnoakes" name="metadata-extractor" rev="2.4.0-beta-1" conf="runtime"/>

加关注

Get every new post delivered to your Inbox.