2010-10-28 4 views
2

J'ai généré un client en utilisant le framework Axis2 avec XMLBeans comme méthode de liaison de données. Le schéma XSD est le suivant:
<xsd:schema>
<xsd:element name="profile" type="anyType"/>
</xsd:schema>
Axe2 avec liaison de données XMLBeans - Problème avec un client java généré à partir d'un schéma XSD avec anyType

l'objet Java généré qui prend une partie de la demande SOAP contient des méthodes de lecture et de définition permettant d'obtenir et de définir le profil. Voici la signature de la méthode:

Le problème est que même si je dois passer plusieurs nœuds en tant que profil et non pas un document XML valide, mais XMLObject attend un document XML avec un nœud racine.

J'ai besoin de passer:
<accounts></accounts>
<payees></payees>

En fait, le service que j'utilise attend ces nœuds, mais ne les a pas contraint dans le schéma. Ainsi, je ne peux pas ajouter un autre nœud racine car même si le service ne lance aucune exception, le profil ne sera pas utilisable. XMLBeans ajoute déjà l'arborescence XML sous-jacente, je veux dire le nœud de profil dans le document de requête.

Ainsi, je ne peux pas l'utiliser comme un nœud racine. si j'ajoute un nœud racine, le code XML suivant sera créé
<profile> <profile></profile> </profile>

Et je veux que le document soit formaté comme suit:
<profile>
<accounts></accounts> <payees></payees>
</profile>

Je préfère ne pas modifier le schéma du service. Je voudrais savoir s'il existe un moyen avec Axis2/XMLBeans pour résoudre ce problème.

Répondre

1

Je trouve une solution qui est probablement une solution de contournement et non la façon propre de le faire. Au lieu de définir le profil avec un XMLObject comme suit:
requestDocument.setProfile(XmlObject profile);
I utilisé org.w3c.dom.Node objet pour créer le contenu de profil. Voir ci-dessous:
1. Créez les éléments org.w3c.dom.Element à ajouter au profil:
Element accountsElt = profileDocument.createElement("accounts");
Element payeesElt = profileDocument.createElement("payees");
2. Créez un profil vide dans le document à envoyer au service, notez que l'objet est généré automatiquement:
requestDocument.addNewProfile();
3. Obtenez le profil vide et ajouter les enfants à son nœud racine: requestDocument.getProfile().getDomNode().appendChild(accountsElt); requestDocument.getProfile().getDomNode().appendChild(payeesElt);

J'espère que ça aide.

Questions connexes