J'ai un ensemble de classes générées JAXB et certaines des classes ont des méthodes de réglage qui acceptent
"Objet" comme paramètre. Par exemple: Après avoir créé des instances de ces classes dans mon code, j'appelle les méthodes de réglage passant de la valeur requise. Bien que le paramètre de méthode soit l'objet, les valeurs sont les plus susceptibles d'être des chaînes (je n'ai aucun contrôle sur la manière dont il est défini). Cependant, pour garder les choses cohérentes, je jette la chaîne à l'objet de sorte qu'il correspond au type de paramètre de la méthode. Le code ressemble à quelque chose comme ceci: p> Lorsque je marcha les objets Java, je reçois ce qui suit dans le XML résultant, juste devant la valeur de la chaîne: P> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string"
3 Réponses :
J'ai eu un problème similaire. J'envoie XML avec ces attributs à certains WS qui n'a pas été capable de le gérer. Je me souviens que j'utilisais Apache CXF pour l'envoi de ce XML, donc j'ai fini par l'intercepteur CXF qui a traité le retrait de ces attributs. P>
Malheureusement, je n'ai pas trouvé de manière à "désactiver" la génération de ces attributs directement dans Jaxb. Ce que vous pouvez faire (et probablement être le seul moyen de le résoudre) est que vous prenez votre XML généré et de le traiter à nouveau avec une autre API (DOM / SAX) et supprimez les attributs manuellement. Ce n'est définitivement pas une belle solution mais je ne suis pas sûr que vous trouvez mieux: - / p>
Je serais heureux si quelqu'un vous donne une meilleure réponse ... p>
J'ai lu des forums qui ont mentionné écrire un filtre XML (je suppose que ce que vous avez fait) mais j'espérais qu'il y avait une solution plus propre
JAXB Exports Comment vous pouvez résoudre ce problème. Vous avez aligner le type de propriété avec le type de données. Il y a de nombreuses façons d'atteindre cela: p>
Cependant, garder les choses cohérentes, je jette la chaîne à l'objet
qu'il correspond au type de paramètre de la méthode. P>
blockQuote>
Que pensez-vous qu'il arrive à la chaîne lorsque vous le jetez à l'objet? :) p> XSI: Tapez code> Si vos données spécifient d'autres types que votre modèle. Dans votre cas, vous définissez une chaîne, mais le champ est
objet code>. Donc, vos données ont un type différent de votre modèle. Le comportement est correct. P>
chaîne code>, pourquoi est-ce un objet
code> en premier lieu? li>
@xmlelementref code> /
@xmlmixed code> combo à la place. li>
ul>
THX pour confirmer ma compréhension de ce qui se passe. Malheureusement, je ne peux pas changer le type d'objet à la chaîne, car le XSD m'a été fourni (je l'ai fait de la méthode et l'a changé pour accepter la chaîne et le type XSI: Type va bien comme vous l'avez dit). Toute bonnes liens avec votre deuxième suggestion ou cela implique-t-il de changer les cours JAXB aussi? J'utilise Eclipselink Moxy BTW. Y a-t-il une sorte de fonctionnalité que je puisse utiliser? Quand j'ai essayé de jeter la chaîne à l'objet, j'étais serré à des pailles mais sans chance! ;)
@ user3572079 Vous ne pouvez pas modifier le schéma, mais vous pouvez personnaliser, par exemple en utilisant jaxb: javatype code>, voir la mise à jour.
Vous pouvez toujours remplacer le type de propriété à l'aide du paramètre code> type code> sur le @xmlelement code> Annotation.
Thx Blaise, j'ai lu votre solution à l'autre personne qui m'avait un problème similaire et je pensais que je pourrais l'utiliser aussi. Cependant, il serait préférable de ne pas modifier les classes générées par JAXB mais de la coder dans mon programme. J'espérais que vous prenez votre question, mais il semble que EclipsLink Moxy ne fournisse aucun moyen d'empêcher cela de se produire alors? :(
À quoi ressemble la classe
voiture code>.
S'il vous plaît éditer votre question.