Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Specify a package instead of "classesToBeBound" for spring Jaxb2Marshaller

Tags:

java

spring

jaxb2

I am trying to use Jaxb2Marshaller to marshal a set of java classes using spring. I know this can be done using the following code

<bean id="jaxbMarshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
    <property name="classesToBeBound">
        <list>
            <value>com.example.test1</value>
            <value>com.example.test2</value>
        </list>
    </property>
</bean>  

What I would like to do is instead of specifying a list of classes, I would like to specify just the package name containing all the classes ( in the above case com.example).

Does anyone know of a way to do this, or any other way which does not require me to list all the classes. any help would be appreciated !

Thanks.

like image 606
Sandeep More Avatar asked Jan 30 '12 17:01

Sandeep More


3 Answers

From Spring 3.1 (i think) you can use also the packagesToScan property, which accepts wildcards. It just doesn't work with elements without the @XmlRootElement annotation, just like the contextPath property. These need generated object-factory.

Could look like:

<property name="packagesToScan">
    <list>
        <value>com.test.*</value>
        <value>com.*.test</value>
    </list>
</property>
like image 141
tomasb Avatar answered Nov 11 '22 05:11

tomasb


You could set the contextPath with the following syntax:

<bean id="jaxbMarshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
    <property name="contextPath" value="com.example"/>
</bean>  
like image 5
Lai Avatar answered Nov 11 '22 04:11

Lai


If you are using the new version of JAXB then you can use something like this in your application context if you add the oxm namespace to your xml file.

<?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.1.xsd
           http://www.springframework.org/schema/oxm
           http://www.springframework.org/schema/oxm/spring-oxm-3.1.xsd">
  <oxm:jaxb2-marshaller id="jaxbMarshaller" contextPath="com.example"/>
  <!-- other beans -->
</beans>

I have a production level program running with these, so let me know if you have any more questions.

Good Luck.

like image 3
thatidiotguy Avatar answered Nov 11 '22 06:11

thatidiotguy