2012-03-01 1 views
2

Mon WebService (compilant avec la spécification SOAP 1.1) utilise son propre type d'en-tête MonEntête défini dans le xsd comme suit:personnalisée en-tête SOAP 1.1 et attribut mustUnderstand

<xs:complexType name="MyHeader"> 
    <xs:sequence> 
     <xs:element name="MyElement1" type="xs:string"></xs:element> 
     <xs:element name="MyElement2" type="xs:string"></xs:element> 
    </xs:sequence> 
</xs:complexType> 

Malheureusement SAOP message généré « par AXIS 1.4 cadre » a MonEntête élément contenant mustUnderstand = "0" attribut:

<ns:MyHeader soapenv:mustUnderstand="0" xmlns:ns="http://...."> 
    <ns:MyElement1>XXX</ns:MyElement1> 
    <ns:MyElement2>YYY</ns:MyElement2> 
</ns:MyHeader> 

Selon t o spécification SOAP mustUnderstand peut être ajouté à chaque en-tête. Cependant, il me semble que les éléments définis MyHeader ne peuvent pas contenir cet attribut, car le XML résultant est incompatible avec la spécification XML - il ne valide pas les règles XML de cvc-complex-type.

Est-il autorisé d'ajouter mustUnderstand attribut à cette instance d'en-tête? Est-ce qu'AXIS framework 1.4 fonctionne correctement?

Répondre

0

Pour garder une longue histoire courte, s'il vous plaît chercher "enlever mustUnderstand attribut des en-têtes" et qui devrait vous obtenir la solution; par défaut, cet en-tête ne doit pas être ajouté; Si vous avez besoin de l'utiliser réellement, alors je modifierais votre schéma pour la partie d'en-tête pour inclure ces attributs SOAP; Si vous voulez voir un exemple, jetez un oeil à WS-I Claim schema (supprimer use = "prohibited").

+0

Je sais que voici des techniques pour supprimer cet attribut sur les côtés producteur et consommateur. Mais une question importante est: mettre mustUnderstand est autorisé et conforme à la spécification SOAP/XML? Cet attribut peut-il être ajouté même si xsd contient use = "prohibited"? – Max

+2

@ Max, il ne devrait pas; oui, mustUnderstand est autorisé pour littéral (par opposition à codé); La meilleure pratique dans cet espace est de s'assurer que vos types d'en-tête s'étendent à partir d'un type de base "attribué" qui permet à anyAttribute namespace = "## other" processContent = "lax". –

+0

@Petru Existe-t-il un exemple classique d'un tel type d'extension? J'ai essayé d'ajouter un anyAttribute avec namespace = "## other" et processContent = "lax" à mon propre type d'en-tête directement, mais cela n'a pas résolu le problème pour moi. – Eric

Questions connexes