2012-09-14 2 views
2

Je n'arrive pas à trouver un moyen d'ajouter un en-tête personnalisé à une demande de savon du client du service Web sans utiliser SOAPHandler. Je cherche des alternatives et BindingProvider semble faire le travail pour moi. Mais ça n'a pas marché. Je ne suis pas sûr de ce qui me manque ici. Voici ce que je veux que ma demande ressemble:Comment ajouter l'en-tête personnalisé à la demande SOAP via jaxb SANS utiliser SoapHandler

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://xx.xx.xx/xxx/provisioning/ws"> 
    <soapenv:Header> 
       <ws:XXXSecurity xmlns:ws="http://xx.xx.xx/xx/security/ws"> 
       <ws:Identification type="TrustedApplicationIdentification"> 
       <ws:ApplicationId>xx</ws:ApplicationId> 
       </ws:Identification> 
       </ws:xxSecurity> 
     <ws:xxLocale xmlns:ws="http://xx.xx.xx/xx/presentation/webservice/locale"> 
     <ws:clientLocale>en_US</ws:clientLocale> 
     </ws:xxLocale> 
    </soapenv:Header> 
    <soapenv:Body> 
     <ws:GetAllNonProvisionedServers/> 
    </soapenv:Body> 
</soapenv:Envelope> 

ici le code:

Provisioning service = new Provisioning(url, qName); 
ProvisioningPort servicePort = service.getProvisioningPort(); 

servicePort = service.getProvisioningPort(); 


Map<QName, List<String>> headersMap = new HashMap<QName, List<String>>(); 

String mySoapHeader = "<ws:Identification type=\"TrustedApplicationIdentification\">" 
    + "<ws:ApplicationId>Password123$</ws:ApplicationId>" 
    + "</ws:Identification>" ;//+ "</soapenv:Header>"; 

List<String> mySOAPHeaders = new ArrayList<String>(); 
mySOAPHeaders.add(mySoapHeader); 
headersMap.put(qSecurityName, mySOAPHeaders); 

System.out.println(MessageContext.HTTP_REQUEST_HEADERS); 

BindingProvider bp = (BindingProvider) servicePort; 
List<Server> findAllNonProvisionedServers = servicePort 
      .findAllNonProvisionedServers(); 

Répondre

0

Merci les gars, mais il semblait que SOAPHandler soit la bonne solution, alors je vais dans ce sens.

0

J'ai utilisé la classe org.apache.axiom.soap.SOAPFactory pour régler mes WS-Addressing en-têtes SOAP . Faites-moi savoir l'API que vous utilisez pour appeler le service Web, afin que je puisse essayer de vous aider.

+0

J'utilise wsimport pour créer toutes les classes jub stub et les utiliser pour faire l'appel de service Web. Je ne suis pas sûr de savoir comment mettre à jour les informations d'en-tête sur un objet Java. – yousafsajjad

0
 MemberSubmissionEndpointReference endPointReference = new MemberSubmissionEndpointReference(); 
     Elements referenceParameters = endPointReference.referenceParameters; 
     List<Element> elements = referenceParameters.elements; 

     SOAPPartImpl soappartImpl = new SOAPPart1_1Impl(); 
     soappartImpl.addMimeHeader("SOAPAction", "http://www.abc.com/WebServices/UploadService/ProcessUpload"); 
     SOAPDocumentImpl soapdocumentimpl = new SOAPDocumentImpl(soappartImpl);  
     SOAPHeader ele = new Header1_1Impl(soapdocumentimpl, "");  
     elements.add(ele); 

     ProvisioningPort port = service.getPort(endPointReference, EDMOnlineUploadServiceSoap.class, null); 

L'exemple ci-dessus va vous montrer comment ajouter des en-têtes MIME à la demande de service Web. Le code ci-dessus peut être utilisé comme référence. Mais ce n'est pas une solution de travail complète. À mon avis, MemberSubmissionEndpointReference fonctionnera pour WS-Addressing. Veuillez vérifier les autres paramètres d'en-tête.

Il existe d'autres façons de générer le client ws, ce qui vous permettra de définir facilement les en-têtes. S'il vous plaît essayez-les aussi.

Questions connexes