常用英语口语444句
1. I see. 我明白了。
2. I quit! 我不干了!
3. Let go! 放手!
4. Me too. 我也是。
5. My god! 天哪!
6. No way! 不行!
7. Come on. 来吧(赶快)
8. Hold on. 等一等。
9. I agree。 我同意。
10. Not bad. 还不错。
11. Not yet. 还没。
12. See you. 再见。
13. Shut up! 闭嘴!
14. So long. 再见。
15. Why not? 好呀! (为什么不呢?)
Categorized in: My Life · Tagged with: English
某些 Linux distribution 导致 Java swing 空白
某些 Linux 下使用最新的 Java Swing application 会出现一片空白。
尝试如下两种解决办法:
- 在 .profile 或 .bashrc 添加 export AWT_TOOLKIT=MToolkit
- 禁用外观的特殊效果
Categorized in: Java, Operation Systems · Tagged with: Java, Linux, Swing
Netbeans 6.7 中的 Link-in-Editor 功能
Eclipse 和 Netbeans 两大 IDE 我都用过,当然,主要还是 Eclipse 为主。在熟悉了 Eclipse 的快捷键后,开发起来有一种很顺手的感觉。
然而,转换到 Netbeans 之后一直很郁闷,也很纳闷,为什么 Netbeans 没有类似 Eclipse 的 link-in-editor 功能呢? 在切换文件的同时,左侧的项目浏览器或文件浏览器也能够同时切换。
今天偶然发现,其实 Netbeans 也有这样的功能,只是自己缺少耐心,缺乏探索。在 Netbeans 的 视图 菜单中,选择 将编辑器与视图同步,即可达到这种效果。
Categorized in: Java · Tagged with: Eclipse, Java, NetBeans
Tutorial of SOAP with Attachments API for Java
随着web 服务、SOA 概念的兴起,和诸多 SOA 应用的实践,Java 阵营也审时度势,趁势推出相应的 API 以应对这一变化。SOAP 是 Java web 服务栈中很基础的一项技术,web 服务间以 SOAP 消息来互相通信。
SOAP with Attachments API for Java(简称 SAAJ) 就是 Java 阵营为访问 web 服务所提供的基础设施,它简化了对 SOAP 的处理。
SAAJ 包含 2 部分 APIs,其一用于创建消息,添加消息内容,其二则用于建立连接,发送 SOAP 消息。
一. 创建 SOAP 消息
SOAP 消息的 XML 文档结构在前一篇文章中已有图示。其中,SAAJ APIs 中的 SOAPMessage 类表示一个 SOAP 消息,SOAPPart 类表示 SOAP part,SOAPEnvelope 接口表示 SOAP envelope,等等。很多 SAAJ APIs 的接口都继承了 DOM 接口。
当创建一个 SOAPMessage 时,该 SOAPMessage 会自动创建并包含 SOAP 消息所必须的部分:一个新的 SOAPMessage 对象会包含一个 SOAPPart 对象,这个 SOAPPart 则包含有一个 SOAPEnvelope 对象,该 SOAPEnvelope 对象会包含一个空的SOAPHeader 对象,紧接着是一个空的 SOAPBody 对象。SOAPHeader 在 SOAP 消息中是可选的,这里之所以自动创建它,是因为我们在 SOAP 消息中经常会使用到它。
Read more »
Categorized in: SOA · Tagged with: SAAJ, SOAP, Webservice, XML
Structures of SOAP with Attachments
还是图形看起来更直观:

SOAP Message with No Attachments
—-

SOAP Message with Attachments
Categorized in: SOA · Tagged with: SOAP, Webservice
一个简单的 POJO factory 实现
很简单,看看代码就明白了,不比 “hello,world” 复杂
。 主入口类 ServiceFactory 类似于 spring 的 BeanFactory:
/**
*
* @author javafuns
*/
public class ServiceFactory {
private static Map beansMap = Configuration.getInstance().getAllServices();
private ServiceFactory() {
}
public static T getService(Class superClaz) throws XxxException {
String serviceClazShortName = BeanUtil.getClassShortName(superClaz);
String impl = beansMap.get(serviceClazShortName);
if (isBlank(impl)) {
throw new XxxException();
}
try {
return (T) Class.forName(impl, true, ServiceFactory.class.getClass().getClassLoader()).newInstance();
} catch (InstantiationException e) {
throw new XxxException("xxxx", e);
} catch (IllegalAccessException e) {
throw new XxxException("xxxx", e);
} catch (ClassNotFoundException e) {
throw new XxxException("xxxx", e);
}
}
private static boolean isBlank(String s) {
return (s == null || "".equals(s.trim()));
}
public static void main(String[] args) {
try {
Map map = ServiceFactory.getService(Map.class);
map.put("key", "value");
System.out.println(map.get("key"));
List list = ServiceFactory.getService(List.class);
list.add("hello");
list.add("world");
for (String s : list) {
System.out.println(s);
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
使用Configuration类读取(属性)配置文件:
/**
*
* @author javafuns
*/
class Configuration {
private static Configuration instance = new Configuration();
private Map serviceMap = new HashMap();
private Configuration(String filename) {
try {
Properties properties = new Properties();
properties.load(getClass().getResourceAsStream("/" + filename));
String services = properties.getProperty("services", "");
extractService(services);
} catch (Exception e) {
e.printStackTrace();
}
}
protected Configuration() {
this("config.properties");
}
public static Configuration getInstance() {
return instance;
}
/**
* extract all services definitions from configuration.properties.
* @param services
*/
private void extractService(String serviceDefs) {
if (serviceDefs != null) {
serviceDefs = serviceDefs.trim();
if (serviceDefs.startsWith("{") && serviceDefs.endsWith("}")) {
String[] services = serviceDefs.substring(1, serviceDefs.length() - 1).split(",");
for (String service : services) {
String[] kv = service.split(":");
if (kv.length == 2) {
this.serviceMap.put(kv[0].trim(), kv[1].trim());
}
}
}
}
}
public String getService(String superClaz) {
return this.serviceMap.get(superClaz);
}
public Map getAllServices() {
return Collections.unmodifiableMap(this.serviceMap);
}
}
BeanUtil只有一个类方法,用于获取类名:
/**
*
* @author javafuns
*/
public class BeanUtil {
private BeanUtil() {
}
public static String getClassShortName(Class clazz) {
String className = clazz.getName();
return className.substring(className.lastIndexOf('.') + 1);
}
}
最后来看一下属性文件是如何定义的:
services={\
Map:java.util.HashMap,\
List:java.util.ArrayList,\
Set:java.util.HashSet\
}
test= test
Categorized in: Design Patterns, Java · Tagged with: DesignPatterns, IOC, Java
打算卖掉笔记本
妈的,心里还有点舍不得,毕竟用了4年了,有点感情了,另外,难道是恋旧心理作怪?
Categorized in: My Life · Tagged with: Apple
Groovy 学习笔记 (五)
- (1..10).each{ log += it } 等价于 (1..10).each({ log += it })
- Closure声明方式之一是: reference.& (其中receiver是对象)

- def adder = { x, y -> return x+y } 等价于 adder(4, 3) 或 adder.call(2, 6)
- 文件读写更加简单:
- def file = new File(‘myFileName.txt’)
- for (line in file) println line
- 方法的最后一个语句得到的值作为返回值,所以return语句是可选的
- 异常不强制要求捕获
- for (it in aaa) 中,变量 aaa 可以是字符串,可以是对象,等等

(
(4.00 out of 5)