2010-08-23 4 views
2

Je cherche une manière générique de sérialiser des objets en Java en utilisant la sérialisation JAXB XML. Je voudrais avoir quelque chose comme ceci:Java: Sérialisation JAXB générique

public static <T> String serializeUsingJAXB(T entity) { 
    JAXBContext context = JAXBContext.newInstance(T.class); 
    // ... 
} 

Cependant, il semble que du fait de l'effacement de type, T.class ne fonctionne pas.

Ce qui va?

Répondre

6

Essayez entity.getClass()

+0

sournoise Stuf f :) – willcodejavaforfood

+0

Mon Dieu, c'était facile. Merci! –

+0

@Jason: Assurez-vous que dans vos besoins 'entity' n'est jamais' null'. Si c'est le cas, vous obtiendrez NPE. –

1
public static <T> String serializeUsingJAXB(
    T entity, 
    Class< ? extends T> clazz 
) 
{ 
    JAXBContext context = JAXBContext.newInstance(clazz); 
    // ... 
} 
+0

'T' pourrait être' Object' là ... –

+0

@Tom. Il pourrait, mais je n'ai aucune idée de ce que le reste de cette méthode ressemble. C'est une technique générique générique de programmation. –

+0

Peu importe le reste de la méthode. –

0

La réponse évidente est:

public static String serializeUsingJAXB(Object entity, JAXBContext context) { 
    // ... 
} 
1

Vous pouvez également envisager:

public static <T> String serializeUsingJAXB(T entity) { 
    StringWriter writer = new StringWriter(); 
    javax.xml.bind.JAXB.marshal(entity, writer); 
    return writer.toString(); 
} 

Pour plus d'informations, voir la classe javax.xml.bind.JAXB

+1

Merci pour ça, c'est bon à savoir. Cela ne me dérange pas de le faire depuis longtemps car je peux définir la propriété JAXB_FORMATTED_OUTPUT du Marshaller sur false. –

Questions connexes