`
blueart
  • 浏览: 21712 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

MapXtreme与Xfire集成解决之道

    博客分类:
  • java
阅读更多

              Mapxtreme与XFire的集成解决之道

昨天在做系统迁移的时候,发现系统中基于Xfirewebservice和基于MapXtreme4.71webgis不能集成在同一个项目中。为了负载均衡,我配置了3个服务器,分别完成地图渲染,数据挖掘(运行大数据量任务)web服务器,web服务器负责相应用户请求并把地图相关的请求发送到地图渲染服务器,大数据量请求发送到数据挖掘服务器。之前先完成Xfirewebservice部分,测试很好,之后我并集中精力开发webgis,在开发过程中我利用到了jdom1.0以前的版本,由于一直关注webgis,没有再去测试之前完成的webservice,结果在准备部署迁移的时候,发现先前测试良好的webservice部分报错说

java.lang.ClassNotFoundException: org.jdom.Content

感觉是jdom版本的问题,下面就是我的解决办法。

1.              更新到更高版本的Jdom,1.01.1均更新过,结果webgis部分在生成地图的时候报错,无法运行,出错如下:

java.lang.NoSuchMethodError:org.jdom.Element.addContent(Lorg/jdom/Element;)

2.              至此确定是jdom版本的问题,而且Jdom在这一点上没有实现向下兼容,但是webservicewebgis都是系统必须集成的模块,为此我想过降低Xfire的版本,发现Xfire依赖的jdom版本都是1.0;升级Mapxtreme版本,发现它用的版本都是jdom1.0版本以下。

3.              在网上搜索发现可以在jdom的源代码的org..jdom.ementjava类中添加几个如下方法:

public   Element addContent(Text text)  { this.content.add(text);

       return this;

    }

 

    public   Element addContent(Element element)  {

       this.content.add(element);

       return this;

    }

 

    public   Element addContent(ProcessingInstruction pi)     {

       this.content.add(pi);

       return this;

    }

 

    public   Element addContent(EntityRef entity)     {

       this.content.add(entity);

       return this;

    }

 

    public   Element addContent(Comment comment)     {

       this.content.add(comment);

       return this;

}

扩展org.jdom.output.XMLOutputter.java,添加如下方法:

public XMLOutputter(String indent, boolean newlines, String encoding) {

       this.currentFormat.indent = indent;

       this.currentFormat.encoding = encoding;

    }

 

    public XMLOutputter(String indent, boolean newlines) {

       this.currentFormat.indent = indent;

    }

 

    public XMLOutputter(String indent) {

       this.currentFormat.indent = indent;

    }

4.              当我把这些源代码添加到我的项目中测试的时候,发现问题依然没有解决,报出的错误是XMLOutputter中没有init方法,当时感觉可能改造也不能成功。到晚上10点钟,做最后尝试,经过fatjar成功打包成Jdom1.2(Jdom当前版本是1.1,似乎没有继续更新的势头,所以我个人定义版本位为1.2)。后加入到项目中后,mapxtremeXfire成功的集成进来了,终于可以安心的回宿舍睡觉了,呵呵。

     附件中是我扩展的Jdom1.2.jar,不知道这样做是不是违法的。

2
0
分享到:
评论
1 楼 zx20319 2010-04-23  
谢谢楼主  帮大忙了

相关推荐

Global site tag (gtag.js) - Google Analytics