unmarshaller - jaxb2marshaller spring boot
Inyectar JAXBContext en primavera (3)
Estoy tratando de inyectar un JAXBContext
en el contexto de la aplicación Spring, por:
<bean id="jaxbContext" class="javax.xml.bind.JAXBContext" factory-method="newInstance">
<constructor-arg type="java.lang.Class" value="com.package.MyClassName"/>
</bean>
Se lanza una excepción:
No se encontró un método de fábrica coincidente: método de fábrica ''newInstance''
Y también intento:
<bean id="jaxbContext" class="javax.xml.bind.JAXBContext" factory-method="newInstance">
<constructor-arg type="java.lang.String" value="com.package"/>
</bean>
Y arroja una excepción:
javax.xml.bind.JAXBException: "com.package" no contiene ObjectFactory.class o jaxb.index Puse un archivo jaxb.index dentro del paquete "com.package" y tiene una sola línea "MyClassName" en el archivo.
¿Has probado Spring OXM? La última línea es importante, los espacios de nombres son solo para referencia:
<?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>
Ver 8.4. Configuración basada en esquemas XML . También necesitarás spring-oxm
en tu ruta de spring-oxm
.
La respuesta de @ Tomasz es la solución que recomendaría, pero si desea seguir con JAXBContext
, la razón por la que su primer ejemplo falló es que el método static getInstance()
en JAXBContext
no toma un solo argumento de Class
, sino que toma una vararg lista de ellos Entonces necesitas inyectar una lista, no una sola clase:
<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>
esto resolverá el problema para el archivo jaxb.index o el problema de ObjectFactory en Spring Env. proporcione el valor del paquete donde están las clases que generan el xml
ingrese el código aquí`
<bean id="marshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
<property name="packagesToScan" >
<value>com.adarsh.spring.integration.entities</value>
</property>
</bean>`