Spring OXM не работает со Struts 1 - PullRequest
0 голосов
/ 27 мая 2011

Я использую Spring OXM, а также Struts 1, но без интеграции Struts с Spring IOC.Это потому, что приложение старое, и я просто добавляю модуль, который включает в себя привязку XML, и я не собираюсь менять архитектуру приложения.

У меня есть класс действия, вызывающий ClasspathXmlApplicationContextдля внедрения бина в OXM.

Вот мой весенний контекст 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);
    }

Веб-приложение 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.

Раздражает, когда есть ошибка, но нет сообщения об ошибке.Это заставляет вас застрять на несколько дней.

Спасибо

Будет

1 Ответ

1 голос
/ 27 мая 2011

Это раздражает, когда есть ошибка но нет сообщения об ошибке. Это делает ты застрял на несколько дней.

??? Там есть сообщение об ошибке: ваш 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

A ClassPathXmlApplicationContext экземпляр состоит из определенных бобов в «services.xml» и «daos.xml» может быть создан как так ...

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

Возможно, вам также следует использовать этот шаблон с этим конструктором :

ctx = new ClassPathXmlApplicationContext("oxm-context.xml", XmlMapper.class);
...