将JAXBContext注入spring

icomxhvb  于 2023-09-29  发布在  Spring
关注(0)|答案(3)|浏览(109)

我正在尝试将JAXBContext注入到spring应用程序上下文中,方法是:

<bean id="jaxbContext" class="javax.xml.bind.JAXBContext" factory-method="newInstance">
  <constructor-arg type="java.lang.Class" value="com.package.MyClassName"/>
</bean>

它抛出一个异常:
找不到匹配的工厂方法:工厂方法'newInstance'
我也试着:

<bean id="jaxbContext" class="javax.xml.bind.JAXBContext" factory-method="newInstance">
  <constructor-arg type="java.lang.String" value="com.package"/>
</bean>

它抛出一个异常:
javax.xml.bind.JAXBException:“com.package”不包含ObjectFactory.class或jaxb.index我确实在“com.package”包中放置了一个jaxb.index文件,并且在文件中有一行“MyClassName”。

lyr7nygr

lyr7nygr1#

@Tomasz的答案是我推荐的解决方案,但是如果你想坚持使用JAXBContext,那么你的第一个例子失败的原因是static getInstance() method on JAXBContext没有接受一个Class参数,它接受了一个变量列表。所以你需要注入一个列表,而不是一个类:

<bean id="jaxbContext" class="javax.xml.bind.JAXBContext" factory-method="newInstance">
  <constructor-arg value-type="java.lang.Class">
    <list>
       <value>com.package.MyClassName</value>
    </list>
  </constructor-arg>
</bean>
amrnrhlw

amrnrhlw2#

你试过Spring OXM吗?最后一行很重要,命名空间仅供参考:

<?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-2.5.xsd
    http://www.springframework.org/schema/oxm http://www.springframework.org/schema/oxm/spring-oxm-1.5.xsd">

    <oxm:jaxb2-marshaller id="marshaller" contextPath="com.package"/>
</beans>

请参见8.4.基于XML架构的配置。Yu还需要在类路径上使用spring-oxm

k3bvogb1

k3bvogb13#

这将解决jaxb.index文件的问题或springenv中的ObjectFactory问题。提供生成xml的类所在的包的值

<bean id="marshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
        <property name="packagesToScan" >
            <value>com.adarsh.spring.integration.entities</value>
        </property>
   </bean>

相关问题