随感:Android和Oracle Java平台之间的差异

看标题,这本来就是理所当然的事情,本来就不是一个东西。只是由于实际操作起来比较麻烦,就打算随便记下来。

这一年多闲着没事的时候就看看Java的源代码,对Java有了一个新的认识。只不过一直都是在Oracle(其实很想说是SUN)的平台上,所以这点认识其实还只是停留在Java代码的层次。虽说当年也搞过一阵Android,但是对Android平台的理解(或者说对系统架构这个大的概念的理解)还不够深入,做sample还是花了一些时间走了一些弯路。要做的东西其实很简单,就是Android App从普通的服务器上取数据,而这几天看的主要就是通信部分。也许是我的思路最开始就是错的,所以在Android平台上出现的种种错误归根结底都还是平台的不一样。下面就把这些归纳一下。

第一次碰壁,是想实验一下Android App是否能直接利用JDBC驱动来访问服务器上的数据库。结果当然是失败,原因是Android上的Java里面缺少数据库链接用的类库包,比如 javax.sql.XAConnection。

既然不能直接使用JDBC,那么通信部分貌似就只能利用HTTP了。而比起直接用纯粹的HTTP,SOAP更加的流行。而Java当中SOAP的Framework主要有两个,一个是JAX-WS,完全基于JCP标准的,配置起来比较麻烦,暂时没那个耐心。还有一个就是Axis2,曾经用过配置也比较简单。Android上用的是第三方的类库k2soap,能够简单的和服务器端的Axis2实现对接。只是觉着Axis2直接向客户端传送字符串的话过于简单,如果能直接传送对象之类的话比较理想。这就是接下来第二次碰壁,Axis2中有一种可以传送XML元素对象的方式Axiom。服务器端和客户端都在Oracle的Java平台上的话没有问题,把客户端移到Android平台上后还是报错。首先是通信部分,这次轮到java.net这个包,还是类库不全。于是把Axis2的通信部分换k2soap的,只用Axiom的传送对象部分。

Axiom中会用到下面这样的配置文件,来告诉JVM哪些是用来创建Axiom数据类对象的工厂类,这在Java中是比较常用的做法。

<?xml version="1.0" encoding="UTF-8"?-->

<implementations xmlns="http://ws.apache.org/axiom/">
<implementation loader="org.apache.axiom.om.impl.llom.factory.OMLinkedListMetaFactoryLoader" name="llom">
<feature name="default" priority="100"/>
</implementation>

<implementation loader="org.apache.axiom.om.impl.dom.factory.OMDOMMetaFactoryLoader" name="doom">
<feature name="dom" priority="100"/>
</implementation>
</implementations>

可是就是这个已经被压缩到jar类库文件里面的配置文件,Android的classloader死活就是load不进来。把配置文件的位置换了结果也还还是一样。实在没有办法的情况下,只好改写导入源代码中配置文件的部分,就像这样:

//Enumeration e = classLoader.getResources("META-INF/axiom.xml");

Enumeration e = classLoader.getResources("assets/axiom.xml");

这回配置文件是load进来了,又碰到了第三座墙。还是缺少类库的问题,如下图:

随感:Android和Oracle Java平台之间的差异

应该是解析XML的类库。这次是彻底放弃了,真的是没精力去一个一个的添加修改Java的源代码。

这次是充分体验到了Android和Oracle的Java平台之间的差异。工作以来一直都是业务系统偏多,很少能接触这些,现在也只能感慨一下,都这把年纪了,才开始关注平台架构。

  • 4
  • 1,532 次阅读
    A+
发布日期:2014年08月18日  所属分类:Java

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:4   其中:访客  4   博主  0

  1. avatar Frank Zhang 1

    额,谁能告诉我一下怎么修改分类么?

    View Comment
  2. avatar 麦加C 4

    后台可以修改分类。BTW,移动端和服务器之间通信,都是做webservice,然后大多用http协议。以前一起做DEMO的时候也是现场系统连接后台webservice来更新数据状态。

    View Comment
  3. avatar Arcko 4

    品德很高大上啊,主动承担起了打通各种大墙的历史使命。虽败犹荣啊

    View Comment