2 votes

Java : QName pour JAXBElement, sans espace de nom ni préfixe (avec matlab)

Je suis très novice en matière de JAXB et de Java. J'ai utilisé xjc, et je remplace les espaces de noms personnalisés ns1 ns2 etc. en utilisant mon propre namespacemapper. Le java s'exécute à travers Matlab, il n'est donc pas formaté exactement comme le java habituel. Toute réponse directe en Java est la bienvenue, car je devrais être capable de le convertir.

Voici ce que je veux :

<String> blah </String>

Au lieu de cela, après le triage, j'obtiens :

<String xmlns:ns4="http://www.w3.org/2001/XMLSchema" xsi:type="ns4:string">
blah 
</String>

Y a-t-il un moyen d'enlever les "xmlns:ns4" et autres de l'élément ?

Le code (matlab)java correspondant est :

a=javax.xml.namespace.QName('String');
c=JAXBElement(a, inner_class, 'blah');

où c est ajouté ultérieurement à la liste qui contient l'élément String.

jxb = JAXBContext.newInstance('mypackage');
jaxbMarshaller = jxb.createMarshaller();
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
jaxbMarshaller.setProperty('com.sun.xml.internal.bind.namespacePrefixMapper', MyCustomMapper());
jaxbMarshaller.setProperty(Marshaller.JAXB_SCHEMA_LOCATION, 'http://thelocationofmyschema.com')
jaxbMarshaller.marshal(jaxbclassinstance, file);

Mon XML est fonctionnel, mais pour des raisons de propreté et de cohérence, j'aimerais supprimer les xmlns si c'est relativement simple.

Merci ! C'est ma toute première question sur stackoverflow, désolé si elle n'est pas à la hauteur.

UPDATE

J'ai résolu ce problème. Deux choses étaient nécessaires : au lieu de "blah j'ai fait

 blah=java.lang.String('blah')

quelque chose que j'oublie de faire pour java dans matlab . Deuxièmement, lors de la réalisation du JAXBElement au lieu d'utiliser une variable inner_class, si j'utilise la variable blah.getClass() il s'imprime sans aucune qualification. Je me rends compte maintenant qu'il s'agissait plus d'une question sur le mashalling que d'une question sur l'utilisation du logiciel. QName question.

0voto

tenwest Points 336

Comme demandé, je poste ma solution comme une réponse :

UPDATE

J'ai résolu ce problème. Deux choses étaient nécessaires : au lieu de 'blah', j'ai fait

blah=java.lang.String('blah') quelque chose que j'ai oublié de faire pour java dans matlab. Je pense que lorsque j'ai entré juste 'blah', quelque chose s'est mal passé dans la conversion de la chaîne de matlab en chaîne java.

Deuxièmement, lors de la création du JAXBElement, au lieu d'utiliser une variable inner_class - qui a été créée à l'aide de l'option

classlist = class.getClass.getClasses();
inner_class = classlist(1);

J'utilise blah.getClass() (où blah est une variable pour une chaîne de caractères).

cela s'imprime sans aucune qualification. Je réalise maintenant que c'était plus une question de mashalling qu'une question de QName.

Demandez-moi pourquoi l'un de ces éléments est nécessaire, et je n'aurai pas de réponse à vous donner :)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X