Domanda

Stiamo cercando di costruire alcuni servizi RESTful con Spring MVC. Forniremo varie rappresentazioni: XML, HTML, e JSON. Vorremmo utilizzare JiBX come la tecnologia di OXM.

Al momento stiamo avendo difficoltà a capire come collegare fino primavera con JiBX. Se vogliamo cablare una singola classe, per esempio Customer, abbiamo semplicemente definiamo una JibxMarshaller, un MarshallingView XML, e aggiungeremo anche la nostra ContentNegotiatingViewResolver. Questa grande opera.

Il problema è che non siamo sicuri come collegare fino smistamento di più classi, per esempio, Customer e User. Ogni JibxMarshaller può supportare solo una classe (a differenza del Jaxb2Marshaller in grado di supportare molti). Abbiamo provato a dichiarare un marshaller per ogni classe, ma l'MarshallingView supportare una sola marshaller. Dichiarare più MarshallingViews non funziona (compare solo il primo opere).

Il consiglio è apprezzato. Grazie.

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

Aggiornamento in base alla risposta del Ritesh di seguito:

Si scopre che sono stato buttato fuori dalla proprietà targetClass del JibxMarshaller. Ho pensato che significava la marshaller avrebbe funzionato solo per una singola classe, tuttavia, sembra utilizza solo la classe di destinazione come un modo di trovare tutte le associazioni correlate. Quindi, la soluzione è quella di utilizzare un solo marshaller, utilizzando una classe di destinazione arbitraria dal set di classi che avete associazioni per. Ad esempio:

<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>
È stato utile?

Soluzione

JiBX compilatore vincolante aggiunge campo JiBX_bindingList al file di classe. In fase di esecuzione, il 'targetClass' (qualsiasi classe compilato con campo JiBX_bindingList) viene utilizzato per costruire un BindingFactory. E 'il getMappedClasses() di IBindingFactory che viene utilizzato by JibxMarshaller in supporti () metodo per controllare se marshaller può schierare una classe.

Si prega di consultare anche JiBX runtime utilizzo .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top