??xml version="1.0" encoding="utf-8" standalone="yes"?>
Eclipse3.2
MyEclipse5.5.1GA
JDK1.5
创徏一?/span>WEB Service工程XFireQ按照网上的实例开发了一个简单的HelloWorldE序Q发布到TOMCAT一?/span>OK?/span>
客户端用XFire插g开发(比较方便Q,需要先下蝲插gQ步骤如下:
打开Eclipse?/span>Help菜单Q选择”Software Updates”Q然后再选择”Find and Install.”
选择"Search for new features to install"Q然后点?/span>Next
选择"Create New Remote Site"Q?/span> ?/span>name中输?/span>"XFire"Q在eclipse update site中输?/span>
http://dist.codehaus.org/xfire/update/
选择OK
选择Finish?/span>
2、新Z?/span>java project。命名ؓ“Client”Q其他默认,finish?/span>
3?/span>File->New->Other Q选择“XFire”文g夹下?#8220;Code generation from WSDL document”Q打开代码生成向导Q?/span>
WSDL的地址栏填?/span>http://localhost:8080/XFire/services/HelloWorldService?wsdlQ?/span>Output directory栏中Ҏ览按钮,选择我们刚才新徏的项?/span>ClientQ这两项是必填的。可选项中,package一栏可以选已l存在的包名Q如果不填这一,代码生成器会?/span>wsdl目标命名I间的基上创Z个?/span>
完成后,可以看到目中多?/span>XFirecdQ还?/span>package下面的生成的一些类。此时要保证IDE?/span>Tomcat服务器是打开的?/span>
此时Q在调用服务之前Q还有一个重要的步骤Q从XFireProject目的右键菜单里调出Properties配置H口Q选中左面一栏中?/span>XFire,右面会列出所有与XFireq行有关的类库,按列表中所C的Q选中一些类库,q些cd在调用本服务时是必须的?br />
Commons Codec(commons-codec-1.3.jar)
Commons HttpClient(commons-httpclient-3.0.jar)
如果~少q两?/span>JAR文gQ客L在调?/span>WEB 服务时会出错?/span>
?/span>Tomcat5.0下正常发布,客户端也能正常调用。然而在发布?/span>WebSphere5.1(base)上面Ӟ出C一些列问题Q下面是问题单描qͼ只截取了LOG中部分信息)以及解决q程?/span>
[08-5-14 7:02:31:500 GMT] 2a29c7a6 XFireServlet E org.codehaus.xfire.transport.http.XFireServlet TRAS0014I: 下列异常已记?/span> org.springframework.beans.factory.BeanDefinitionStoreException: Error registering bean with name 'xfire.typeMappingRegistry' defined in class path resource [org/codehaus/xfire/spring/xfire.xml]: Class that bean class [org.codehaus.xfire.aegis.type.DefaultTypeMappingRegistry] depends on not found; nested exception is java.lang.NoClassDefFoundError: org/codehaus/xfire/aegis/type/DefaultTypeMappingRegistry
java.lang.NoClassDefFoundError: org/codehaus/xfire/aegis/type/DefaultTypeMappingRegistry
[08-5-14 7:02:31:531 GMT] 2a29c7a6 ServletInstan E SRVE0100E: 未识别出?/span> servlet XFireServlet 抛出?/span> init() 异常Q?/span>javax.servlet.ServletException: Error initializing XFireServlet.
at org.codehaus.xfire.transport.http.XFireServlet.init(XFireServlet.java:52)
[08-5-14 7:02:31:531 GMT] 2a29c7a6 WebGroup E SRVE0020E: Q?/span>Servlet 错误Q-Q?/span>XFireServletQ:无法装入 servletQ?/span>org.springframework.beans.factory.BeanDefinitionStoreException: Error registering bean with name 'xfire.typeMappingRegistry' defined in class path resource [org/codehaus/xfire/spring/xfire.xml]: Class that bean class [org.codehaus.xfire.aegis.type.DefaultTypeMappingRegistry] depends on not found; nested exception is java.lang.NoClassDefFoundError: org/codehaus/xfire/aegis/type/DefaultTypeMappingRegistry
java.lang.NoClassDefFoundError: org/codehaus/xfire/aegis/type/DefaultTypeMappingRegistry
[08-5-14 7:02:31:547 GMT] 2a29c7a6 WebGroup E SRVE0026E: Q?/span>Servlet 错误Q-Q?/span>XFireServletQ:org.springframework.beans.factory.BeanDefinitionStoreException: Error registering bean with name 'xfire.typeMappingRegistry' defined in class path resource [org/codehaus/xfire/spring/xfire.xml]: Class that bean class [org.codehaus.xfire.aegis.type.DefaultTypeMappingRegistry] depends on not found; nested exception is java.lang.NoClassDefFoundError: org/codehaus/xfire/aegis/type/DefaultTypeMappingRegistry
java.lang.NoClassDefFoundError: org/codehaus/xfire/aegis/type/DefaultTypeMappingRegistry
上述问题出现后开始在|上大肆查找资料Q中间替换过WebSphere?/span>lib里面的几个包Q报的错误虽然有所变化Q但仍然不能清除。最后觉得是否与JDK版本有关Q因为在WebSphere启动日志里看?/span>WebSphere用的JDK版本?/span>1.4.1Q而我所开发的XFire工程?/span>JDK1.5,因此军_?/span>XFire工程?/span>JDK包换?/span>1.4然后?/span>1.4版本重新~译Q然后导?/span>WAR包重新在WebSphere中发布?/span>
先将WebSphere下的lib包恢复到原来状态(因ؓ中间替换q几个包Q重新发?/span>1.4版本后,错误依旧Q好吧,开始替?/span>WebSphere下的包:
1?span style="font: 7pt 'Times New Roman'"> 先将WebSphere下的lib包中?/span>qname.jar包替换ؓ最新版本?/span>
2?span style="font: 7pt 'Times New Roman'"> ?/span>WebSphere下的lib包中?/span>jdom.jar替换?/span>jdom-1.0.jar.
3?span style="font: 7pt 'Times New Roman'"> ?/span>WebSphere下的lib包中?/span>wsdl4j.jar包替换ؓwsdl4j-1.5.1.jar(本来替换?/span>xfire-1.2.6?/span>lib里面?/span>wsdl4j-1.6.1.jarQ但替换完之后服务v不来了,其他版本的没试,在网上看到好像说wsdl4j-1.5.1解决了之前版本的什?/span>BUG.)
4?span style="font: 7pt 'Times New Roman'"> ?/span>WebSphere下的lib包中dQ?/span>stax-api-1.0.1.jar?/span>jaxen-1.1-beta-9.jar两个包。(q有说需要添?/span>stax-untils-20040917.jar,不过好像不添加也没问题。这些包?/span>xfire-1.2.6?/span>lib里面都有。)
重新启动服务器,我们l于可以看到盼望已久?/span>wsdl描述面?/span>
然后测试客LQ注?/span>XFire插g开发客LE序好像必须使用JDK1.5Q低版本好像不支持。(记得在工E属性里?/span>JDK换成1.5后,然后?/span>Java Compiler中选中“Enable project specific settings”Q然后在下面?#8220;Compiler compliance level选中5.0”Q然后点Apply->ok,重新~译一下)Q好Q编写一个测试类Q运行就可以看到我们惌得到?/span>HelloWorld了?/span>
ȝQ注?/span>JDK版本是否冲突。注?/span>WebSphere下的lib中的包是否和目中的包冲H以及包是否全?/span>