2017-07-14 5 views
0

Je travaille sur un service SOAP 1.1 avec Apache CXF 3.1.12 (avec springboot)Apache CXF mustUnderstand booléen vs entier

Je suis en train de comprendre comment je peux forcer dans l'en-tête de générer mustUnderstand comme un entier (0 | 1) au lieu de boolean (true | false). Voir le document incorrect ci-dessous. D'après ce que je comprends, dans le savon 1.1, le vrai/faux n'est pas acceptable. Peu importe, mes clients n'aiment pas ça et je n'ai aucun contrôle sur eux.

<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing"> 
    <s:Header> 
     <a:Action s:mustUnderstand="true">http://...</a:Action> 
    </s:Header> 
    <s:Body> 
    ... 
    </s:Body> 
</s:Envelope> 

C'est un service WSDL-première et il n'y a aucune mention de l'espace de noms SOAP 1.2 dans le WSDL. Mon information sur le paquet est:

@javax.xml.bind.annotation.XmlSchema(namespace = "http://...", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED) 

et mon point de terminaison est créé avec:

EndpointImpl endpoint = new EndpointImpl(bus, 
       new MyClass(), SOAPBinding.SOAP11HTTP_BINDING); 

Je modifie l'en-tête mustUnderstand dans une AbstractSoapInterceptor à Phase.WRITE avec HDR-> setMustUnderstand (true), mais il encore sort comme un booléen.

Il y a un vieux problème dans JIRA à ce sujet, et est marqué comme fixé il y a longtemps: https://issues.apache.org/jira/browse/CXF-2213?jql=text%20~%20%22mustUnderstand%22

Toute aide serait appréciée.

Répondre

0

j'ai réussi à résoudre ce problème en forçant la réponse à un SOAP 1.1 réponse dans l'intercepteur, via:

final SoapVersion soap11 = Soap11.getInstance(); 
message.setVersion(soap11); 

Je doute que ce soit la bonne façon, je ne sais pas pourquoi il insiste sur le fait de penser qu'il est pas un message SOAP 1.1. Mais cela a au moins fixé le problème spécifique ci-dessus, et me permettra de continuer jusqu'à ce que je trouve la bonne façon.