IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Services Web Java Discussion :

Interopérabilité .Net/Java problème des Hearder Soap


Sujet :

Services Web Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 30
    Points : 19
    Points
    19
    Par défaut Interopérabilité .Net/Java problème des Hearder Soap
    Bonjours à tous,

    Je voudrais pouvoir utiliser des clients/serveur de webservice en Java et .Net (C#) ensembles. Lorsque l'on se limite à des Web méthodes simples ça marche parfait (enfin avec quelques limitations quand même...).

    Le problème se pose pour échanger des données dans les header Soap. En effet .Net permet de transférer des données dans les en têtes très facilement ce qui ne semble pas être le cas côté Java. J'ai déjà posté sur ce forum pour tanter de résoudre ce problème. Je ne suis pas encore arriver à le résoudre complétement, et surtout cette technique de construction du XML"à la main" est une technique de dépanage mais ne représente absolument pas une réel solution (évolutivité..).

    Je voudrais savoir si d'autre personnes on eut ce problème et surtout si il existe des solutions !

    NB: J'utilise actuellement Axis 1.4, peut être existe t 'il des bibliothèques plus adaptées, dans ce cas signalé le moi!!!

    D'avance merci !

  2. #2
    Membre émérite
    Avatar de alexismp
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 503
    Points : 2 777
    Points
    2 777
    Par défaut
    Il est peut-être temps de regarder Java EE 5 et sa brique JAX-WS. Le tutorial (en anglais) est ici: Java EE 5 Tutorial
    JAX-WS est intégré à NetBeans 5.5 beta 2.

    Pour la partie interop avec Microsoft, le projet WSIT (une extension au serveur d'application Java EE 5 Open Source GlassFish) implémente les spécifications MTOM, WS-ReliableMessaging, et autres WS-* avec pour objectif de vérifier la compatibilité avec Microsoft Indigo (WCF).

    Dans tes essais entre .Net et Java, le client et le serveur partagent-ils le même WSDL? Quel est le transport utilisé? SOAP 1.1 ou 1.2?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 30
    Points : 19
    Points
    19
    Par défaut
    En me relisant je me rend compte que je n'est pas était très explicite dans mon premier message, je vais donc essayer de corriger ca:

    Je doit réaliser le portage d'une application déjà dévelloppée en C# tourant sous Windows Embedded vers Linux via Java. Le contexte est un environement embarqué: il s'agit d'un "micro" PC avec une configuration matériel la plus légère possible (RAM, CPU...). Le but est de pouvoir faire marcher ensemble les deux types de "machine" : Linux et Windows. La communication entre les PC se fait via des webservices.

    Au fur et à mesure que j'ai parcouru le programme C# je me suis rendu compte que les personnes qui avaient dévelloppées la solution faisait passer un grand nombre d'informations par les Hearders SOAP. Il ne s'agit pas de liens ou de paramètres de sécurité comme on a l'habitude de voir, mais d'intance de classe et même de multiple instances.


    Côté C#:

    Plus concrétement, voici un exemple (plus d'explications sur MSDN):

    1) La déclarartion d'une classe qui va être transférées:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    public class PlugField : System.Web.Services.Protocols.SoapHeader{
            public string name;
            public string text;
        }
     
        public class PlugParam : PlugField{
            public enum Access{
                Read,
                Write,
                ReadWrite,
                CredentialRead,
                CredentialWrite,
                CredentialReadWrite
            }
            public string type;
            public Access access;
            public object value;
            public long time;
            public string sender; 
            public string recipient;
            public long operation;
            public PlugCallBack[] callsBack;
        }
    }
    2) L'utilisation dans le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public class Plug : System.Web.Services.WebService{
            public PlugParam param;
     
            /// <param name="propertyName">nom de la propriété</param>
            /// <returns>0: propriété retournée  
            ///          2: credential insuffisant
            ///          3: propriété non définie
            ///          </returns>
            [WebMethod(Description = "Lecture de propriété générique (surcharge par classe dérivée) (Plug)")]
            [SoapHeader("param", Direction = SoapHeaderDirection.Out)]
            public virtual int GetProperty(string propertyName){
                ...
            }

    3) Le résultat dans les Headers SOAP:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    HTTP/1.1 200 OK
    Content-Type: text/xml; charset=utf-8
    Content-Length: length
     
    <?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>
    -------------------------------------------------------------------------------------


    Côté Java:

    J'ai décidé d'utiliser Axis et Tomcat pour ça légèreté, ce qui est un facteur important dans un tel context. Que ce soit avec Axis ou avec le serveur Sun et SAAJ le transfert de données de fait de manière similaire: explications et exemple. Comme on peut le voir, pour transférer des paramètres dans les Headers SOAP, il faut "construire à la main" l'XML correspondant. Ceci est adapté pour passer un ou deux paramètres (URL, données de sécurité...), mais pas pour tranférer des instances de classes comme vu précédement avec C#.

    -------------------------------------------------------------------------------------

    Je voulais donc savoir comment résoudre ce type de problème: existe t'il une fonction d'Axis (que je n'est pas encore trouvé) ou bibliothèque capable de transférer des objects dans les en têtes SOAP de manière compatible avec .NET?

    Eventuellement:
    Est ce que d'autre personnes ont eu ce problème et quel approche a été retenue...
    Est ce que ceci est une norme non encore implémenté côté Java ou est ce du "propriétaire" Microsoft (donc avec peu d'espoir que se soit implémenté côté java)...

    D'avance merci !!! (J'espère que ce poste un peu long ne vas pas décourager)...

Discussions similaires

  1. SOAP - Problèmes des caractères spéciaux
    Par InesNael dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 21/03/2008, 10h34
  2. [.NET] Comment appeler des services Java ?
    Par vpet dans le forum Framework .NET
    Réponses: 3
    Dernier message: 17/01/2008, 17h25
  3. Réponses: 25
    Dernier message: 27/07/2007, 14h46
  4. .net supporte bcps des langages, java est il compris?
    Par oumarou3 dans le forum Framework .NET
    Réponses: 3
    Dernier message: 07/02/2007, 00h19
  5. [SOAP] [java] Manipuler des réponses
    Par eXiaNazaire dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 06/12/2005, 14h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo