0

我使用Spring OXM以及Struts 1但不使用将 Struts 与 Spring IOC 集成。这是因为应用程序是一个旧应用程序,我只是添加一个涉及 XML 绑定的模块,我无意更改应用程序的体系结构。

我有一个动作类调用ClasspathXmlApplicationContextOXM 的 bean 注入。

这是我的春季上下文 XML:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:oxm="http://www.springframework.org/schema/oxm"
  xsi:schemaLocation="
     http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
     http://www.springframework.org/schema/oxm 
     http://www.springframework.org/schema/oxm/spring-oxm-1.5.xsd">

    <bean id="xmlMapper" class="com.st.mas.wmr.utils.xml.stifbinconv.XmlMapper">
        <property name="marshaller" ref="jaxbMarshaller" />
        <property name="unmarshaller" ref="jaxbMarshaller" />
    </bean>
    <bean id="jaxbMarshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
        <property name="contextPath" value="com.st.mas.wmr.utils.xml.jaxb.stifbinconv"/>
        <property name="validating" value="true"/>
    </bean>
</beans>

动作类:

public class StifBinConversionAction extends AnyDispatchAction {
    private IProcessStifOliBinConversion svc;

    public StifBinConversionAction() {
        super();
        svc = new ProcessStifOliBinConversion();
    }

服务等级:

public class ProcessStifOliBinConversion
    implements
        IProcessStifOliBinConversion {
    private BasicDataSource ds;

    private IAtomStifOliBinConversion dao;
    private ApplicationContext ctx;
    private XmlMapper xmlMapper;

    public ProcessStifOliBinConversion() {
        super();
        ds = new BasicDataSource();
        //TODO consts
        ds.setDriverClassName("oracle.jdbc.driver.OracleDriver");
        ds.setUrl("jdbc:oracle:thin:@sglx482:1521:wmr");
        ds.setUsername("wmr_online");
        ds.setPassword("wmr_online");

        dao = new AtomStifOliBinConversion(ds);
        ctx = new ClassPathXmlApplicationContext("com/st/mas/wmr/utils/xml/stifbinconv/oxm-context.xml");
        xmlMapper = ctx.getBean(XmlMapper.class);
    }

Web 应用程序HTTP 500 没有任何错误消息或堆栈跟踪。但是,如果我将 的配置位置更改为ClasspathXmlApplicationContext无效位置,Spring 会引发异常。

org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from class path resource [classes/com/st/mas/wmr/utils/xml/stifbinconv/oxm-context.xml]; nested exception is java.io.FileNotFoundException: class path resource [classes/com/st/mas/wmr/utils/xml/stifbinconv/oxm-context.xml] cannot be opened because it does not exist

似乎问题出在 Spring 注入中。

当出现错误但没有错误消息时,这很烦人。它会让你卡住几天。

谢谢

将要

4

1 回答 1

1

当出现错误但没有错误消息时,这很烦人。它会让你卡住几天。

???有一条错误消息:在此位置找不到您的 XML:

classes/com/st/mas/wmr/utils/xml/stifbinconv/oxm-context.xml

我会说您将错误的参数传递给ApplicationContext. 看一下4.7.1.1 构造 ClassPathXmlApplicationContext 实例 - 快捷方式中的例子

考虑如下所示的目录布局:

com/
  foo/
    services.xml
    daos.xml
    MessengerService.class

可以像这样实例化由“services.xml”和“daos.xml”中定义的 bean 组成的 ClassPathXmlApplicationContext 实例......

ApplicationContext ctx = new ClassPathXmlApplicationContext(
    new String[] {"services.xml", "daos.xml"}, MessengerService.class

也许你也应该使用这个 Constructor模式:

ctx = new ClassPathXmlApplicationContext("oxm-context.xml", XmlMapper.class);
于 2011-05-27T08:52:18.843 回答