Question

Nous essayons de construire des services RESTful avec Spring MVC. Nous fournirons plusieurs représentations: XML, HTML, et JSON. Nous aimerions utiliser JiBX comme la technologie OXM.

Nous sommes actuellement de la difficulté à trouver comment câbler ressort avec JiBX. Si nous voulons câbler une seule classe, par exemple Customer, nous définissons simplement une JibxMarshaller, un MarshallingView XML, et ajoute aussi notre ContentNegotiatingViewResolver. Cela fonctionne très bien.

Le problème est que nous ne savons pas comment câbler plusieurs classes de triage, par exemple, Customer et User. Chaque JibxMarshaller peut prendre en charge une seule classe (contrairement à la Jaxb2Marshaller qui peut supporter un grand nombre). Nous avons essayé de déclarer un placier pour chaque classe, mais le MarshallingView ne supporte qu'un seul placier. Déclaration de plusieurs MarshallingViews ne fonctionne pas (il apparaît que les premier travaux).

Vos conseils sont appréciés. Merci.

<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
    <property name="mediaTypes">
        <util:map>
            <entry key="xml" value="application/xml"/>
        </util:map>
    </property>
    <property name="defaultViews">
        <util:list>
            <bean class="org.springframework.web.servlet.view.xml.MarshallingView">
                <property name="marshaller" ref="userMarshaller"/>
            </bean>
            <bean class="org.springframework.web.servlet.view.xml.MarshallingView">
                <property name="marshaller" ref="customerMarshaller"/>
            </bean>
        </util:list>
    </property>
</bean>

<bean id="userMarshaller" class="org.springframework.oxm.jibx.JibxMarshaller">
    <property name="targetClass" value="com.mycompany.User"/>
</bean>
<bean id="customerMarshaller" class="org.springframework.oxm.jibx.JibxMarshaller">
    <property name="targetClass" value="com.mycompany.Customer"/>
</bean>

Mise à jour en fonction de la réponse de Ritesh ci-dessous:

Il se trouve que je jeté par la propriété targetClass du JibxMarshaller. Je pensais que cela signifiait le placier ne fonctionne que pour une seule classe, cependant, il semble que la classe utilise cible comme un moyen de trouver toutes les liaisons connexes. Ainsi, la solution consiste à utiliser un seul placier, en utilisant une classe cible arbitraire de votre ensemble de classes que vous avez des liaisons pour. Par exemple:

<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
    <property name="mediaTypes">
        <util:map>
            <entry key="xml" value="application/xml"/>
        </util:map>
    </property>
    <property name="defaultViews">
        <util:list>
            <bean class="org.springframework.web.servlet.view.xml.MarshallingView">
                <property name="marshaller" ref="jibxMarshaller"/>
            </bean>
        </util:list>
    </property>
</bean>

<bean id="jibxMarshaller" class="org.springframework.oxm.jibx.JibxMarshaller">
    <property name="targetClass" value="com.mycompany.User"/>
</bean>
Était-ce utile?

La solution

compilateur de liaison JiBX ajoute champ JiBX_bindingList aux fichiers de classe. Au moment de l'exécution, la (toute classe compilée avec le champ de JiBX_bindingList) « targetClass » est utilisé pour construire un BindingFactory. Il est le getMappedClasses() de IBindingFactory qui est utilisé par JibxMarshaller dans supports () méthode pour vérifier si marshaller peut rassembler une classe.

S'il vous plaît voir aussi JiBX l'utilisation de l'exécution.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top