应用 JAXB 把 XML 转换成相应的 JavaBean

跨系统的调用目前无疑是 WebService 的天下,指的是通过 HTTP 请求方式获得 XML 或 JSON 数据的方式,RESTFul 也得到了很好的应用。规范意义上的 Soap 调用不知道还不多不多,反正当年用过的 Corba 鲜有耳闻了,就像很多人对 EJB2 不会有概念一样。

Java 在调用 WebService 获得了 XML 之后,接下来一种常见的处理方式就是把它转换成相应的 JavaBean,再丢给其他组件像 Jsp 标签,FreeMarker 等去就很流畅了。关于 XML 与 JavaBean 互相转换有两个操作叫做:Marshaller 和 Unmarshaller,还没见一个权威的翻译,大概就是编组与反编组,意义如同序列化与反序列化。也就是由 JavaBean 到 XML 叫做 Marshal,由 XML 到 Java 叫做 Unmarshal。

通常从 XML 到 JavaBean 的转换机会大的多,所以我主要也是研究了下如何把 XML 映射成 JavaBean,虽然现在的工具一样也都支持这两个方向的转换。有许多组件可以做到,像 JAXB(Java Architecture for XML Binding)、 阅读全文 >>

类别: Java/JEE. 标签: , , . 阅读(4,153). 评论(0) »

Java 何日能随意实现自定义的对象装箱

Java 步入到 Tiger 后增加了自动拆装箱特性,构造 Integer 不用 Integer i = new Integer(1); 或者 Integer i = Integer.valueOf(1); 只要写成 Integer i=1 就行了。Java 的自动拆装箱只是针对基本类型与其封装类型之间的转换,无法自定义类似的行为,比如想实现某个自定义类 Item,能够通过 Item i = 1; 就完成从整形 1 到自定义类的自动装箱功能。

Java 在目前还是没办法做到的,当然也是我自己的一个猜想。Java 的自动拆装箱与 C# 相比也是要弱些,C# 中 int 仅仅是 Int32 这样的类型的别名,所以它们也是等效的,声明 int i=0; 你就可以呼叫 i.ToString() 方法了。可以说 C# 比 Java 更对象化了。

现在来看下 C++ 是怎么实现自定义类的 Item i = 10; 这样的声明的,见代码: 阅读全文 >>

类别: Java/JEE. 标签: , . 阅读(72). 评论(0) »

Java 的方法签名与字段类型表示-[Ljava.lang.String;

我们什么时候会接触到 Java 的方法签名呢?在进行 JNI 调用时,还有在看方法重载时。重载的方法是有不同的方法签名的,而是不区分返回值,而实际方法签名还揉入了返回值类型的,还有就是 javap -s 查看方法签名时,如 javap -s java.util.Date。

看来方法签名与我们实际工作的关系还真的不大。倒是有次遇着了,事出于 Struts2 应用中提交表单时报出了下面的错误:

00:43:59.716 [http-8080-4] WARN  com.opensymphony.xwork2.ognl.OgnlValueStack - Error setting expression 'version' with value '[Ljava.lang.String;@e18a9a'
ognl.MethodFailedException: Method "setVersion" failed for object cc.unmi.model.Post@ed0cd7
 at ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:1285) ~[ognl-3.0.jar:na]
 at ognl.OgnlRuntime.setMethodValue(OgnlRuntime.java:1474) ~[ognl-3.0.jar:na]
 at ognl.ObjectPropertyAccessor.setPossibleProperty(ObjectPropertyAccessor.java:85 阅读全文 >>

类别: JVM. 标签: , . 阅读(7,601). 评论(0) »

XSLT 调用 Java 的类方法

曾经有两篇介绍了在 XSLT 里如何调用 C# 或 Js 写的函数,其中用到了与微软相关的,像:xmlns:msxsl="urn:schemas-microsoft-com:xslt",  <msxsl:script implements-prefix="unmifn" language="C#">。回到了 Java 环境同样得考虑在 XSLT 中如何调用 Java 的方法,毕竟在 XSLT 外处理内容要方便许多。

参考了一些网上的文章,大多讲的不怎么好理解与应用,未尝试之前不免让人想缩手。其实做起来可以更简单些,两步而已:

1) 声明时指定包名和函数前缀
2) 调用时加上前缀和类名及静态方法,传入参数

要想再深入些,可注意有时候 Java 函数应该传入的参数类型是什么?是否能调用非静态方法,public 是最基本的要求,以及通过什么组件来调用的等等。 阅读全文 >>

类别: Java/JEE, XML/DOM. 标签: , , . 阅读(1,414). 评论(0) »

如何让 Map 中的值按放入顺序输出

笔者致: 当你打开这个页面的时候, 基本就无需再看后面的内容了, 因为直接用 LinkedHashMap 就能满足您的需求.  文中对这个问题的探索只是不知道别人早已过河了, 仍然在河里摸着石头. LinkedHashMap 是 JDK 1.4 加进来的, 之所以有 apache-commons ListOrderedMap 大约是因为它最早所处的是 JDK 1.4 之前的年代.


在使用 Java 的 Hashmap 时,输出 Map 中的值如何使之按放入的顺序输出来,像 List 那样保持顺序。这里的顺序不是说对集合中的数据进行的排序,要是的话用 TreeMap,像 TreeSet 一样就行。 我们看个例子:

阅读全文 >>

类别: Java/JEE. 标签: , , . 阅读(10,855). 评论(6) »

理解 Java 正则表达式怪异的 \\ 和 \\\\,让您见怪不怪

Java 语言里的几大变革,一为 jdk1.4 引入的正则表达式,jdk1.5 引入的泛型。没有泛型之前有不少人曾想方设法从编译器入手让 Java 支持泛型。说到泛型  Perl 无疑是该方面的佼佼者,虽然我们不要求 Java 的正则表式能像 Perl 那样可以用来写诗,但至少能有 JavaScript 好用些,可是还不如。JavaScript 里 // 两斜线一框就是一个模式,分组和后向引用更方便,当然前面那两家伙是动态的,不太好比。

复杂的用法不说,且说 Java 的正则表达式在匹配点(.)  和斜杠(\),表达式要分别写作 \\. 和 \\\\,难看些,不好理解。幸好还有些人记住了,匹配点(.) 或  {、[、(、?、$、^ 和 * 这些特殊符号要要前加双斜框,匹配 \ 时要用四斜杠,这确实能让你包走天涯的。那么为什么是这样呢,不是一个斜杠、三个或更多呢,所以知其然还要知其所以然,这样才能每次心中有数,方能以一变应万变。 阅读全文 >>

类别: Java/JEE. 标签: , , . 阅读(5,180). 评论(1) »

如何在 js 代码中使用 jsp 标签或 Java 代码

JSP 标签还是很方便的,比如 Struts、Spring 等提供给我们的 JSP 标签,可以用它们来获取变量或进行一些计算。比如 struts2 的 <s:url value="/admin/unmi.action"/> 会为我们自动在前面附加上应用上下文,如实际会生成 /testsite/admin/unmi.action。还有更多更方便的标签使用,比如用标签获取到 session 或请求中的数据作为 js 的变量等。 

引申此话题的,其实不光是在 JS 中使用 JSP 标签,可用 JSP 标签的地方当然可以直接写 Java 代码,即 ScriptLet 代码。 阅读全文 >>

类别: Java/JEE, Web/JS. 标签: , , , . 阅读(5,483). 评论(0) »

步步理解 JAVA 泛型编程(三)

前面介绍的无论是泛型类还是泛型方法,基本上都是把定义的类型参数作为一个整体来操作,放到数组或取出来,顶多就是调用了一下 hashCode() 方法,因为这是 Java 的根对象拥有的方法。比如说一个泛型数组,要得到其中的最小元素:

阅读全文 >>

类别: Java/JEE. 标签: , . 阅读(2,096). 评论(3) »

步步理解 JAVA 泛型编程(二)

前面讲了泛型类的定义,你也可以在一个普通类中单单定义一个泛型方法。也就是说类能够带个类型参数,方法也可以带类型参数的。还是来看个例子(包括如何应用),一个获得数组中间元素的方法,因为数组中存储元素的类型是不定的,所以把该方法定义成泛型的。

阅读全文 >>

类别: Java/JEE. 标签: , . 阅读(1,040). 评论(9) »

步步理解 JAVA 泛型编程(一)

JDK 1.5 相对于 JDK 1.4 来说变化最大的部分就是泛型,甚至可以说自 Java 1.0 发布以来也是最大的一次语言变化,因为要涉及到编译器的大改动。很早的时候大家对泛型的呼声很大,正如 C++ 的模板,C# 的泛型确实是个值得借鉴的好特性。JDK1.5 这前,很多人对于泛型是急不可耐,在 JDK1.4 下搭配一个外挂的 Generic Java 编译器,通老实 -Xbootclasspath、-bootclasspath 同样能让你在 1.4 的 JDK 上使用泛型:

javac -J-Xbootclasspath/p:JSR14HOME\gjcrt.jar -bootclasspath JSR14HOME\collect.jar;JDK141HOME\jre\lib\rt.jar -source 1.5 FileName.java
java -Xbootclasspath/p:JSR14HOME\gjc-rt.jar FileName 阅读全文 >>

类别: Java/JEE. 标签: , . 阅读(1,353). 评论(3) »