当前位置: 代码迷 >> Web前端 >> WebSphere5.1上发布XFire的有关问题解决
  详细解决方案

WebSphere5.1上发布XFire的有关问题解决

热度:470   发布时间:2012-10-18 13:46:55.0
WebSphere5.1下发布XFire的问题解决

开发环境:

MyEclipse blue 7.5

JDK1.4.2

?

创建一个WEB Service工程XFire,按照网上的实例开发了一个简单的HelloWorld程序,发布到TOMCAT一切OK

客户端用XFire插件开发(比较方便),需要先下载插件,步骤如下:

打开EclipseHelp菜单,选择”Software Updates”,然后再选择”Find and Install.”
选择"Search for new features to install",然后点击Next
选择"Create New Remote Site"?name中输入"XFire",在eclipse update site中输入

http://dist.codehaus.org/xfire/update/
选择OK
选择Finish

2、新建一个java project。命名为“Client”,其他默认,finish

3File->New->Other?,选择“XFire”文件夹下的“Code generation from WSDL document”,打开代码生成向导,

WSDL的地址栏填入http://localhost:8080/XFire/services/HelloWorldService?wsdlOutput directory栏中点浏览按钮,选择我们刚才新建的项目Client,这两项是必填的。可选项中,package一栏可以选已经存在的包名,如果不填这一项,代码生成器会在wsdl目标命名空间的基础上创建一个。

???完成后,可以看到项目中多了XFire类库,还有package下面的生成的一些类。此时要保证IDETomcat服务器是打开的。
????
此时,在调用服务之前,还有一个重要的步骤,从XFireProject项目的右键菜单里调出Properties配置窗口,选中左面一栏中的XFire项,右面会列出所有与XFire运行有关的类库,按列表中所示的,选中一些类库,这些类库在调用本服务时是必须的。

Commons Codec(commons-codec-1.3.jar)

Commons HttpClient(commons-httpclient-3.0.jar)

如果缺少这两个JAR文件,客户端在调用WEB?服务时会出错。

???所有的配置都已经完成,最后就是编写代码完成调用。

?

Tomcat下正常发布,客户端也能正常调用。然而在发布到WebSphere5.1(base)上面时,就出现了一些列问题,下面是问题简单描述(只截取了LOG中部分信息)以及解决过程。

[11-10-27 16:37:45:844 CST] 70140f9e WebGroup ? ? ?E SRVE0026E: [Servlet 错误]-[javax.xml.namespace.QName: method &lt;init&gt;&#40;Ljava/lang/String&#59;Ljava/lang/String&#59;Ljava/lang/String&#59;&#41;V not found]:java.lang.NoSuchMethodError: javax.xml.namespace.QName: method <init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V not found

at at org.codehaus.xfire.aegis.type.DefaultTypeMappingRegistry.<clinit>(DefaultTypeMappingRegistry.java:66).null(Unknown Source)

at org.codehaus.xfire.aegis.AegisBindingProvider.<init>(AegisBindingProvider.java:67)

at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java(Compiled Code))

at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java(Compiled Code))

at java.lang.reflect.Constructor.newInstance(Constructor.java(Compiled Code))

at java.lang.Class.newInstance3(Class.java(Compiled Code))

at java.lang.Class.newInstance(Class.java(Compiled Code))

at org.codehaus.xfire.service.binding.ObjectServiceFactory.getBindingProvider(ObjectServiceFactory.java:173)

at org.codehaus.xfire.service.binding.DefaultServiceConfiguration.getInParameterName(DefaultServiceConfiguration.java:162)

at org.codehaus.xfire.service.binding.ObjectServiceFactory.getInParameterName(ObjectServiceFactory.java:1063)

at org.codehaus.xfire.service.binding.ObjectServiceFactory.addOperation(ObjectServiceFactory.java:817)

at org.codehaus.xfire.service.binding.ObjectServiceFactory.initializeOperations(ObjectServiceFactory.java:761)

at org.codehaus.xfire.service.binding.ObjectServiceFactory.create(ObjectServiceFactory.java:444)

at org.codehaus.xfire.service.binding.ObjectServiceFactory.create(ObjectServiceFactory.java:374)


[11-10-27 16:37:48:875 CST] ?5e824f95 WebGroup ? ? ?E SRVE0026E: [Servlet 错误]-[org/codehaus/xfire/aegis/type/DefaultTypeMappingRegistry]:java.lang.NoClassDefFoundError: org/codehaus/xfire/aegis/type/DefaultTypeMappingRegistry
at org.codehaus.xfire.aegis.AegisBindingProvider.<init>(AegisBindingProvider.java:67)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java(Compiled Code))
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java(Compiled Code))
at java.lang.reflect.Constructor.newInstance(Constructor.java(Compiled Code))
at java.lang.Class.newInstance3(Class.java(Compiled Code))
at java.lang.Class.newInstance(Class.java(Compiled Code))
at org.codehaus.xfire.service.binding.ObjectServiceFactory.getBindingProvider(ObjectServiceFactory.java:173)
at org.codehaus.xfire.service.binding.DefaultServiceConfiguration.getInParameterName(DefaultServiceConfiguration.java:162)
at org.codehaus.xfire.service.binding.ObjectServiceFactory.getInParameterName(ObjectServiceFactory.java:1063)
at org.codehaus.xfire.service.binding.ObjectServiceFactory.addOperation(ObjectServiceFactory.java:817)
at org.codehaus.xfire.service.binding.ObjectServiceFactory.initializeOperations(ObjectServiceFactory.java:761)
at org.codehaus.xfire.service.binding.ObjectServiceFactory.create(ObjectServiceFactory.java:444)
at org.codehaus.xfire.service.binding.ObjectServiceFactory.create(ObjectServiceFactory.java:374)
at org.codehaus.xfire.service.binding.ObjectServiceFactory.create(ObjectServiceFactory.java:355)

?

上述问题出现后开始在网上大肆查找资料,中间替换过WebSpherelib里面的几个包,报的错误虽然有所变化,但仍然不能清除。最后觉得是否与JDK版本有关,因为在WebSphere启动日志里看到WebSphere用的JDK版本是1.4.1,而我所开发的XFire工程是JDK1.5,因此决定把XFire工程用JDK包换成1.4然后用1.4版本重新编译,然后导出WAR包重新在WebSphere中发布。

?

先将WebSphere下的lib包恢复到原来状态(因为中间替换过几个包)重新发布1.4版本后,错误依旧,好吧,开始替换WebSphere下的包:

1、??先将WebSphere下的lib包中的qname.jar包删除,使用stax-api-1.0.1.jar里的QName

2、??WebSphere下的lib包中的jdom.jar替换为jdom-1.0.jar.

3、??WebSphere下的lib包中的wsdl4j.jar包替换为wsdl4j-1.5.1.jar(本来替换为xfire-1.2.6lib里面的wsdl4j-1.6.1.jar,但替换完之后服务起不来了,其他版本的没试,在网上看到好像说wsdl4j-1.5.1解决了之前版本的什么BUG.)

4、??WebSphere下的lib包中添加:stax-api-1.0.1.jarjaxen-1.1-beta-9.jar两个包。(还有说需要添加stax-untils-20040917.jar,不过好像不添加也没问题。这些包在xfire-1.2.6lib里面都有。)

重新启动服务器,我们终于可以看到盼望已久的wsdl描述页面。

?

?

总结:注意JDK版本是否冲突。注意WebSphere下的lib中的包是否和项目中的包冲突以及包是否全。

?

  相关解决方案