[Axis][WSDL2Java] Modification des Headers SOAP

Modification des Headers SOAP [Axis][WSDL2Java] - Java - Programmation

Marsh Posté le 29-06-2006 à 16:50:52    

Bonjour,
 
J'ai généré les classes d'un web service à partir d'un fichier WSDL via WSDL2Java. Tout c'est bien déroulé, le webservice marche... Mais j'ai un petit problème je voudrais modifier (mode server) ou récupérer le contenu (mode client) des "headerSOAP" de certaine webMethode,  
 
Voici l'objectif à atteindre:

Citation :

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Header>
    <PlugEventList xmlns="http://tempuri.org/">
      <events>
        <PlugParam>
          <type>string</type>
          <access>Read or Write or ReadWrite or CredentialRead or CredentialWrite or CredentialReadWrite</access>
          <value />
          <time>long</time>
          <sender>string</sender>
          <recipient>string</recipient>
          <operation>long</operation>
          <callsBack>
            <PlugCallBack xsi:nil="true" />
            <PlugCallBack xsi:nil="true" />
          </callsBack>
        </PlugParam>
        <PlugParam>
          <type>string</type>
          <access>Read or Write or ReadWrite or CredentialRead or CredentialWrite or CredentialReadWrite</access>
          <value />
          <time>long</time>
          <sender>string</sender>
          <recipient>string</recipient>
          <operation>long</operation>
          <callsBack>
            <PlugCallBack xsi:nil="true" />
            <PlugCallBack xsi:nil="true" />
          </callsBack>
        </PlugParam>
      </events>
    </PlugEventList>
  </soap:Header>
  <soap:Body>
    <GetEventsResponse xmlns="http://tempuri.org/">
      <GetEventsResult>long</GetEventsResult>
    </GetEventsResponse>
  </soap:Body>
</soap:Envelope>


 
D'après ce que j'ai trouvé sur le net (c'est à dire pas grand chose) il semblerais que pour le mode server, il faut modifier les ***Stub.java parmi les classes générées, est ce que je modifie la bonne fonction?

Code :
  1. public long getEvents(long ticks) throws java.rmi.RemoteException{
  2.         if (super.cachedEndpoint == null) {
  3.             throw new org.apache.axis.NoEndPointException();
  4.         }
  5.         org.apache.axis.client.Call _call = createCall();
  6.         _call.setOperation(_operations[10]);
  7.         _call.setUseSOAPAction(true);
  8.         _call.setSOAPActionURI("http://tempuri.org/GetEvents" );
  9.         _call.setEncodingStyle(null);
  10.         _call.setProperty(org.apache.axis.client.Call.SEND_TYPE_ATTR, Boolean.FALSE);
  11.         _call.setProperty(org.apache.axis.AxisEngine.PROP_DOMULTIREFS, Boolean.FALSE);
  12.         _call.setSOAPVersion(org.apache.axis.soap.SOAPConstants.SOAP12_CONSTANTS);
  13.         _call.setOperationName(new javax.xml.namespace.QName("http://tempuri.org/", "GetEvents" ));
  14.        
  15.         try{
  16.             //Customisation
  17.             SOAPHeaderElement hd = new SOAPHeaderElement(new javax.xml.soap.Name("", "events" ) ;
  18.             hd.addChildElement("PlugParam" );
  19.             _call.addHeader(hd);
  20.           } catch (Exception ex) {
  21.                 ex.printStackTrace(System.err);
  22.           }


 
2) Est ce que quelqu'un peut me donner quelques conseils pour construire la liste des noeuds de cette tête en java car je ne maitrise pas du tout la construction des fichier xml? Je voudrais pas passer pour un feigant qui ne veut pas chercher sur le net ou se taper les tutôts. Mais dans le cadre des webservices ce genre de truc est assait pénible à debugguer (moniteur SOAP + à chaque fois deployement et copie des sources sur le serveur). Donc si vous pouviez me donner un exemple pour construire les principaux type de noeud ca serais vraiment très très, très gentil  :love: :) :love: :)  
 
D'avance Merci !

Reply

Marsh Posté le 29-06-2006 à 16:50:52   

Reply

Marsh Posté le 05-07-2006 à 17:54:04    

Voila j'ai trouvé la moité de la solution: j'arrive à modifier les Header SOAP lors de l'appel (question) d'un web service, mais je cherche toujours comment les modifier lors de la réponse, est ce que quelqu'un as une idée ???
 
Pour ceux que ca intéresse, voici le code pour modifier les Header SOAP lors de l'appel (question) d'un web service (ce code peut être mit directement dans le ***stub.java si le code a été généré via WSDL2JAVA). Bien entendu, il faut remplacer les "string,long ..." par les valeurs ...  ;)  

Code :
  1. public static void GetDateTime(){
  2.         long ticks = 0;
  3.         try {
  4.             String endpointURL = "http://localhost:8084/axis/services/uddiSoap12?wsdl";
  5.             Service  service = new Service();
  6.             Call     call    = (Call) service.createCall();
  7.             call.setTargetEndpointAddress( new java.net.URL(endpointURL) );
  8.             call.setOperationName("GetEvents" );
  9.             call.addParameter("GetEvents",org.apache.axis.encoding.XMLType.XSD_LONG,javax.xml.rpc.ParameterMode.IN);
  10.             call.setReturnType( org.apache.axis.encoding.XMLType.XSD_LONG );
  11.            
  12.             SOAPHeaderElement PlugParam = new SOAPHeaderElement(new javax.xml.namespace.QName("PlugParam" ));
  13.             //PlugParam.setNamespaceURI("http://tempuri.org/" );
  14.            
  15.             PlugParam.addChildElement("type" ).addTextNode("string" );
  16.             PlugParam.addChildElement("access" ).addTextNode("CredentialReadWrite" );
  17.             PlugParam.addChildElement("value" ).addTextNode("22" );
  18.             PlugParam.addChildElement("time" ).addTextNode("long" );
  19.             PlugParam.addChildElement("sender" ).addTextNode("string" );
  20.             PlugParam.addChildElement("recipient" ).addTextNode("string" );
  21.             PlugParam.addChildElement("operation" ).addTextNode("long" );
  22.            
  23.             SOAPElement CallBack = PlugParam.addChildElement("callsBack" );
  24.             SOAPElement PlugCallBack = CallBack.addChildElement("PlugCallBack" );
  25.             PlugCallBack.addChildElement("url" ).addTextNode("string" );
  26.             PlugCallBack.addChildElement("name" ).addTextNode("string" );
  27.             PlugCallBack.addChildElement("time" ).addTextNode("long" );
  28.            
  29.             SOAPElement aList = PlugCallBack.addChildElement("aList" );
  30.             aList.addChildElement("PlugField" ).addAttribute(new SOAPEnvelope().createName("xsi:nil" ),"true" );
  31.             aList.addChildElement("PlugField" ).addAttribute(new SOAPEnvelope().createName("xsi:nil" ),"true" );
  32.            
  33.             CallBack.addChildElement(PlugCallBack);
  34.            
  35.             call.addHeader(PlugParam);
  36.             Long ret = (Long) call.invoke(new java.lang.Object[] {new java.lang.Long(ticks)});
  37.            
  38.             System.out.println("Resultat : " + ret);
  39.         } catch (Exception e) {
  40.             System.err.println(e.toString());
  41.             e.printStackTrace();
  42.         }
  43.     }


Je :pt1cable:  :??:  :pt1cable: vraiment, donc si quelqu'un à une idée, je serais très reconnaissant !!!  

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed