解决 xfire 客户端程序 加载报错 PropertyAccessExceptionsException

本文解决了一个使用XFire构建的WebService客户端在Tomcat6.0环境下部署时出现的类未找到异常问题。通过调整客户端的service.xml配置文件,仅保留serviceClass元素并确保接口类路径一致,成功避免了错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我使用的是xfire构建的webservice服务端和客户端,tomcat6.0

自己写的服务器端,运行当然是没有问题啦~

然后自己写了个客户端,因为是web工程,部署的时候,就报错了。。。

但是这个web工程,当运行链接webservice的类时,即作为 java application运行时,是可以连接上,并且返回值正确的。

*错误如下:

严重: Servlet /remoteXfireTest threw load() exception

PropertyAccessExceptionsException (2 errors)

org.springframework.beans.TypeMismatchException: Failed to convert property value of type [java.lang.String] to required type [java.lang.Class] for property 'serviceClass'; nested exception is java.lang.IllegalArgumentException: Class not found: com.geoway.webservice.DataService

java.lang.IllegalArgumentException: Class not found: com.geoway.webservice.DataService

    at org.springframework.beans.propertyeditors.ClassEditor.setAsText(ClassEditor.java:66)

    at org.springframework.beans.BeanWrapperImpl.doTypeConversionIfNecessary(BeanWrapperImpl.java:771)

    at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:584)

    at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:469)

    at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:626)

    at org.springframework.beans.BeanWrapperImpl.setPropertyValues(BeanWrapperImpl.java:653)

    at org.springframework.beans.BeanWrapperImpl.setPropertyValues(BeanWrapperImpl.java:642)

    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1023)

    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:824)

    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:345)

    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:226)

    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:147)

    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:275)

    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:320)

    at org.codehaus.xfire.spring.XFireConfigLoader.getXFireApplicationContext(XFireConfigLoader.java:107)

    at org.codehaus.xfire.spring.XFireConfigLoader.loadContext(XFireConfigLoader.java:41)

    at org.codehaus.xfire.transport.http.XFireConfigurableServlet.loadConfig(XFireConfigurableServlet.java:86)

    at org.codehaus.xfire.transport.http.XFireConfigurableServlet.createXFire(XFireConfigurableServlet.java:54)

    at org.codehaus.xfire.transport.http.XFireServlet.init(XFireServlet.java:45)

    at javax.servlet.GenericServlet.init(GenericServlet.java:212)

    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1161)

    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:981)

    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4042)

    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4348)

    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)

    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)

    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)

    at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:920)

    at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:883)

    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492)

    at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1138)

    at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)

    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)

    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)

    at org.apache.catalina.core.StandardHost.start(StandardHost.java:719)

    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)

    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)

    at org.apache.catalina.core.StandardService.start(StandardService.java:516)

    at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)

    at org.apache.catalina.startup.Catalina.start(Catalina.java:566)

    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

    at java.lang.reflect.Method.invoke(Method.java:597)

    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)

    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)

org.springframework.beans.TypeMismatchException: Failed to convert property value of type [java.lang.String] to required type [java.lang.Class] for property 'implementationClass'; nested exception is java.lang.IllegalArgumentException: Class not found: com.geoway.webservice.impl.DataServiceImpl

java.lang.IllegalArgumentException: Class not found: com.geoway.webservice.impl.DataServiceImpl

    at org.springframework.beans.propertyeditors.ClassEditor.setAsText(ClassEditor.java:66)

    at org.springframework.beans.BeanWrapperImpl.doTypeConversionIfNecessary(BeanWrapperImpl.java:771)

    at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:584)

    at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:469)

    at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:626)

    at org.springframework.beans.BeanWrapperImpl.setPropertyValues(BeanWrapperImpl.java:653)

    at org.springframework.beans.BeanWrapperImpl.setPropertyValues(BeanWrapperImpl.java:642)

    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1023)

    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:824)

    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:345)

    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:226)

    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:147)

    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:275)

    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:320)

    at org.codehaus.xfire.spring.XFireConfigLoader.getXFireApplicationContext(XFireConfigLoader.java:107)

    at org.codehaus.xfire.spring.XFireConfigLoader.loadContext(XFireConfigLoader.java:41)

    at org.codehaus.xfire.transport.http.XFireConfigurableServlet.loadConfig(XFireConfigurableServlet.java:86)

    at org.codehaus.xfire.transport.http.XFireConfigurableServlet.createXFire(XFireConfigurableServlet.java:54)

    at org.codehaus.xfire.transport.http.XFireServlet.init(XFireServlet.java:45)

    at javax.servlet.GenericServlet.init(GenericServlet.java:212)

    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1161)

    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:981)

    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4042)

    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4348)

    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)

    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)

    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)

    at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:920)

    at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:883)

    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492)

    at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1138)

    at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)

    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)

    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)

    at org.apache.catalina.core.StandardHost.start(StandardHost.java:719)

    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)

    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)

    at org.apache.catalina.core.StandardService.start(StandardService.java:516)

    at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)

    at org.apache.catalina.startup.Catalina.start(Catalina.java:566)

    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

    at java.lang.reflect.Method.invoke(Method.java:597)

    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)

    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)

在网上也看到很多人,都没有人写解决方法的。。晕。。

 

其实问题是出在,你的客户端程序中的service.xml中,配置了和服务器端相同的

<serviceClass>和<implementationClass>,而你的客户端中当然不会有<implementationClass>里面的实现类,及时是<serviceClass>里面的接口类,也不一定和服务器端的接口类放在相同的路径下。

因此在web.xml加载时,当加载到service.xml时,就报错啦~因为找不到嘛。

 

还有人说,把服务器的classes里面的class放到客户端的classes文件夹下,但是,由于我的webservice是要提供给客户使用的,我可不希望把class都给人家,即使是编译好的。。

 

解决办法就是:

在service.xml中只配置<serviceClass>个元素,然后接口类要和客户端中包含的接口类包名什么的要一样就好了,

这个是我的webservice客户端中的service.xml:

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

<beans xmlns="http://xfire.codehaus.org/config/1.0">

<service>

       <name>DataService</name>

       <namespace>http://service.maggie.com/DataService</namespace>

       <serviceClass>com.maggie.webs.DataService</serviceClass>

       <style>wrapped</style>

       <use>literal</use>

       <scope>application</scope>

       <properties>

           <property name="mtom-enabled" value="true" />

       </properties>

    </service>

</beans>

不过还有个奇怪的问题。。。我以前用tomcat5.5运行这个项目的时候就没有报错。。最近改成tomcat6了就报这个错了。。虽然不影响项目运行吧。。就是觉得别扭。。不知道是不是tomcat版本的问题呢。。。。,或者jdk。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值