unmarshaller marshal jaxb2marshaller spring jaxb code-injection

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>`