2010-10-19 5 views
2

J'ai un CustomQuoteRequest de classe simple:Cartographie une propriété Java à plusieurs attributs XML en utilisant JAXB et Moxy

public class CustomQuoteRequest { 

    private String requestId; 

    private String currencyPairCode; 

    public String getRequestId() { 
    return requestId; 
    } 

    public void setRequestId(String requestId) { 
    this.requestId = requestId; 
    } 

    public String getCurrencyPairCode() { 
    return currencyPairCode; 
    } 

    public void setCurrencyPairCode(String currencyPairCode) { 
    this.currencyPairCode = currencyPairCode; 
    } 
} 

Je voudrais carte currencyPairCode deux attributs différents dans le fichier XML. Ceci est le fichier de mappage Moxy J'utilise:

<xml-bindings 
    xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/oxm" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.eclipse.org/eclipselink/xsds/persistence/oxm http://www.eclipse.org/eclipselink/xsds/eclipselink_oxm_2_1.xsd" 
    > 
    <java-types> 
     <java-type name="com.anz.fxeasy.domain.model.quote.CustomQuoteRequest" xml-accessor-type="FIELD"> 
      <xml-root-element name="FIXML"/> 
      <java-attributes> 
       <xml-element java-attribute="requestId" xml-path="QuotReq/@ReqId"/> 
       <xml-element java-attribute="currencyPairCode" xml-path="QuotReq/QuoteReq/Instrmt/@Sym"></xml-element> 
       <xml-element java-attribute="currencyPairCode" xml-path="QuotReq/QuoteReq/Leg/Leg/@Sym"></xml-element> 
      </java-attributes> 
     </java-type> 
    </java-types> 

Cependant, le deuxième élément XML semble remplacer la précédente. Des idées? Merci beaucoup

Répondre

2

EclipseLink Moxy 2.1.X

En EclipseLink 2.1.X vous pouvez utiliser un Customizer XML pour y parvenir. Vos métadonnées externes ressemblerait à ce qui suit:

<xml-bindings 
    xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/oxm" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.eclipse.org/eclipselink/xsds/persistence/oxm http://www.eclipse.org/eclipselink/xsds/eclipselink_oxm_2_1.xsd" 
    > 
    <java-types> 
     <java-type name="forum78.CustomQuoteRequest" xml-accessor-type="FIELD" xml-customizer="customizer.CustomQuoteRequestCustomizer"> 
      <xml-root-element name="FIXML"/> 
      <java-attributes> 
       <xml-element java-attribute="requestId" xml-path="QuotReq/@ReqId"/> 
       <xml-element java-attribute="currencyPairCode" xml-path="QuotReq/QuoteReq/Instrmt/@Sym"/> 
      </java-attributes> 
     </java-type> 
    </java-types> 
</xml-bindings> 

Dans le customizer nous allons ajouter une seconde carte pour la propriété currencyCodePair. Nous aurons besoin d'indiquer que ce mappage est en écriture seule. La mise en œuvre du customizer XML ressemblerait à ce qui suit:

package customizer; 

import org.eclipse.persistence.config.DescriptorCustomizer; 
import org.eclipse.persistence.descriptors.ClassDescriptor; 
import org.eclipse.persistence.oxm.mappings.XMLDirectMapping; 

public class CustomQuoteRequestCustomizer implements DescriptorCustomizer { 

    public void customize(ClassDescriptor descriptor) throws Exception { 
     XMLDirectMapping currencyPairCodeLegMapping = new XMLDirectMapping(); 
     currencyPairCodeLegMapping.setAttributeName("currencyPairCode"); 
     currencyPairCodeLegMapping.setXPath("QuotReq/QuoteReq/Leg/Leg/@Sym"); 
     currencyPairCodeLegMapping.setIsWriteOnly(true); 
     descriptor.addMapping(currencyPairCodeLegMapping); 

    } 

} 

EclipseLink Moxy 2.2

Dans la prochaine version EclipseLink 2.2, vous serez en mesure de le faire en utilisant seulement les métadonnées extériorisée:

<xml-bindings 
    xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/oxm" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.eclipse.org/eclipselink/xsds/persistence/oxm http://www.eclipse.org/eclipselink/xsds/eclipselink_oxm_2_1.xsd" 
    > 
    <java-types> 
     <java-type name="forum78.CustomQuoteRequest" xml-accessor-type="FIELD"> 
      <xml-root-element name="FIXML"/> 
      <java-attributes> 
       <xml-element java-attribute="requestId" xml-path="QuotReq/@ReqId"/> 
       <xml-element java-attribute="currencyPairCode" xml-path="QuotReq/QuoteReq/Instrmt/@Sym"/> 
       <xml-element java-attribute="currencyPairCode" xml-path="QuotReq/QuoteReq/Leg/Leg/@Sym" write-only="true"/> 
      </java-attributes> 
     </java-type> 
    </java-types> 
</xml-bindings> 

Le bug suivant peut être utilisé pour suivre ce support:

+0

Fantastique, merci beaucoup pour ça! – Sergio

Questions connexes