首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

struts2 spring集成的一个小疑点

2012-10-24 
struts2 spring集成的一个小问题今天作struts2和spring的集成,由于以前我们的开发框架webwork+spring所以

struts2 spring集成的一个小问题

今天作struts2和spring的集成,由于以前我们的开发框架webwork+spring所以按照以前的思路进行修改了配置文件的路径,也就是自定义了config的配置,然后出现如下问题:

com.opensymphony.xwork2.inject.DependencyException: com.opensymphony.xwork2.inject.ContainerImpl$MissingDependencyException: No mapping found for dependency [type=com.opensymphony.xwork2.ObjectFactory, name='default'] in public void com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.setObjectFactory(com.opensymphony.xwork2.ObjectFactory).
?at com.opensymphony.xwork2.inject.ContainerImpl.addInjectorsForMembers(ContainerImpl.java:157)
?at com.opensymphony.xwork2.inject.ContainerImpl.addInjectorsForMethods(ContainerImpl.java:126)
?at com.opensymphony.xwork2.inject.ContainerImpl.addInjectors(ContainerImpl.java:103)
?at com.opensymphony.xwork2.inject.ContainerImpl.addInjectors(ContainerImpl.java:99)
?at com.opensymphony.xwork2.inject.ContainerImpl$1.create(ContainerImpl.java:84)
?at com.opensymphony.xwork2.inject.ContainerImpl$1.create(ContainerImpl.java:82)
?at com.opensymphony.xwork2.inject.util.ReferenceCache$CallableCreate.call(ReferenceCache.java:155)
?at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
?at java.util.concurrent.FutureTask.run(Unknown Source)
?at com.opensymphony.xwork2.inject.util.ReferenceCache.internalCreate(ReferenceCache.java:81)
?at com.opensymphony.xwork2.inject.util.ReferenceCache.get(ReferenceCache.java:121)
?at com.opensymphony.xwork2.inject.ContainerImpl.inject(ContainerImpl.java:452)
?at com.opensymphony.xwork2.inject.ContainerImpl$6.call(ContainerImpl.java:492)
?at com.opensymphony.xwork2.inject.ContainerImpl$6.call(ContainerImpl.java:491)
?at com.opensymphony.xwork2.inject.ContainerImpl.callInContext(ContainerImpl.java:542)
?at com.opensymphony.xwork2.inject.ContainerImpl.inject(ContainerImpl.java:490)
?at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reload(DefaultConfiguration.java:151)
?at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:52)
?at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:395)
?at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:452)
?at org.apache.struts2.dispatcher.FilterDispatcher.init(FilterDispatcher.java:201)
?at com.inspur.communication.platform.startup.PlatformDispatcher.init(PlatformDispatcher.java:48)
?at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:221)
?at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:302)
?at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:78)
?at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3635)
?at org.apache.catalina.core.StandardContext.start(StandardContext.java:4222)
?at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:760)
?at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:740)
?at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:544)
?at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:626)
?at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:553)
?at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:488)
?at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1149)
?at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
?at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:120)
?at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1022)
?at org.apache.catalina.core.StandardHost.start(StandardHost.java:736)
?at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)
?at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
?at org.apache.catalina.core.StandardService.start(StandardService.java:448)
?at org.apache.catalina.core.StandardServer.start(StandardServer.java:700)
?at org.apache.catalina.startup.Catalina.start(Catalina.java:552)
?at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
?at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
?at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
?at java.lang.reflect.Method.invoke(Unknown Source)
?at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:295)
?at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:433)
Caused by: com.opensymphony.xwork2.inject.ContainerImpl$MissingDependencyException: No mapping found for dependency [type=com.opensymphony.xwork2.ObjectFactory, name='default'] in public void com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.setObjectFactory(com.opensymphony.xwork2.ObjectFactory).
?at com.opensymphony.xwork2.inject.ContainerImpl.createParameterInjector(ContainerImpl.java:239)
?at com.opensymphony.xwork2.inject.ContainerImpl.getParametersInjectors(ContainerImpl.java:229)
?at com.opensymphony.xwork2.inject.ContainerImpl$MethodInjector.<init>(ContainerImpl.java:282)
?at com.opensymphony.xwork2.inject.ContainerImpl$3.create(ContainerImpl.java:130)
?at com.opensymphony.xwork2.inject.ContainerImpl$3.create(ContainerImpl.java:128)
?at com.opensymphony.xwork2.inject.ContainerImpl.addInjectorsForMembers(ContainerImpl.java:154)

查询了半天,看网上有人碰到过,但是没有解决,于是分析代码进行查询原因,原因就是配置文件struts配置文件没有找到,于是想到了修改的配置,经过查询代码发现了这个问题,就是如果你要是修改了config,以后所有的配置只会读取配置的文件,所以struts-spring.jar等插件都采用的default的配置,所以会出错,故修改config的配置,把default的文件全部添加上,然后再添加上自己的配置文件,本来可以采用Dispatcher的DEFAULT_CONFIGURATION_PATHS然后添加自己的配置文件就可以,但是发现这个变量是private的,所有只能把里面的内容全部拷贝出来,所以这个地方的扩展自定义功能也是没有太大意义的。

??<param-name>config</param-name>
??<param-value>
???/WEB-INF/conf/platform-web.xml,struts-default.xml,struts-plugin.xml,struts.xml
??</param-value>

这是因为如果路径改变(不是默认路径), 那么就不会继承默认的配置, 这时候就要手工添加默认配置啦!


热点排行