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 :

Cannot find dispatch method for {}


Sujet :

Services Web Java

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Etudiante
    Inscrit en
    Janvier 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiante

    Informations forums :
    Inscription : Janvier 2013
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Cannot find dispatch method for {}
    Bonjour,

    Cela fait quelques jours que je suis bloquée et que je ne comprends pas mon problème. Globalement, j'ai une application JAVA qui génère un fichier WSDL. Lorsque je teste le service via SOAPUI tout fonctionne, seulement mon but est d'utiliser WSO2, lorsque je créer un ProxyService basé sur le WSDL je me retrouve avec cette erreur lorsque je le teste : Cannot find dispatch method for {} J'ai beau essayé d'ajouter des namespace rien a faire.

    Je suis pas très sure de ce que dois contenir mon WSDL, je vous le met en dessous:
    Code xml : 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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    <definitions xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp="http://www.w3.org/ns/ws-policy" xmlns:wsp1_2="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://esbConnexion/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://esbConnexion/" name="IncidentService">
    <types>
    <xsd:schema>
    <xsd:import namespace="http://esbConnexion/" schemaLocation="http://192.168.43.23:8899/ws?xsd=1"/>
    </xsd:schema>
    </types>
    <message name="GetListe"/>
    <message name="GetListeResponse">
    <part name="return" type="tns:incidentArray"/>
    </message>
    <message name="FindIncident">
    <part name="arg0" type="xsd:int"/>
    </message>
    <message name="FindIncidentResponse">
    <part name="return" type="tns:incident"/>
    </message>
    <portType name="FonctionUsed">
    <operation name="GetListe">
    <input wsam:Action="GetListe" message="tns:GetListe"/>
    <output wsam:Action="http://esbConnexion/FonctionUsed/GetListeResponse" message="tns:GetListeResponse"/>
    </operation>
    <operation name="FindIncident">
    <input wsam:Action="FindIncident" message="tns:FindIncident"/>
    <output wsam:Action="http://esbConnexion/FonctionUsed/FindIncidentResponse" message="tns:FindIncidentResponse"/>
    </operation>
    </portType>
    <binding name="IncidentServicePortBinding" type="tns:FonctionUsed">
    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="rpc"/>
    <operation name="GetListe">
    <soap:operation soapAction="GetListe"/>
    <input>
    <soap:body use="literal" namespace="http://esbConnexion/"/>
    </input>
    <output>
    <soap:body use="literal" namespace="http://esbConnexion/"/>
    </output>
    </operation>
    <operation name="FindIncident">
    <soap:operation soapAction="FindIncident"/>
    <input>
    <soap:body use="literal" namespace="http://esbConnexion/"/>
    </input>
    <output>
    <soap:body use="literal" namespace="http://esbConnexion/"/>
    </output>
    </operation>
    </binding>
    <service name="IncidentService">
    <port name="IncidentServicePort" binding="tns:IncidentServicePortBinding">
    <soap:address location="http://192.168.43.23:8899/ws"/>
    </port>
    </service>
    </definitions>

    Au niveau de mon application Java j'ai une interface et une classe qui l'implémente, puis une autre classe qui publie mon webService et génère mon WSDL

    edit: Sous WSO2 seule ma fonction FindIncident fonctionne, je n'ai l'erreur que pour la deuxieme :/

    @WebMethod(action="GetListe", operationName="GetListe")
    public Incident[] GetListe();

    Avez-vous une idée ?

    Merci beaucoup !

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    si tu nous montrait ton code et la stacktrace complète?

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Etudiante
    Inscrit en
    Janvier 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiante

    Informations forums :
    Inscription : Janvier 2013
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Voici mon interface: et ma classe:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    @WebService
    @SOAPBinding(style=SOAPBinding.Style.RPC)
    public interface FonctionUsed {
     
    	@WebMethod(action="FindIncident", operationName="FindIncident")
    	public Incident FindIncient(int numero);
    	@WebMethod(action="GetListeIncident", operationName="GetListeIncident")
    	public Incident[] GetListe();
    	//public ArrayList<Incident> GetListeIncident();
    }
    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
     
    @WebService(endpointInterface="esbConnexion.FonctionUsed", serviceName="IncidentService", portName="IncidentServicePort", targetNamespace="http://esbConnexion/")
    public class Requests implements FonctionUsed{
     
    	public Incident[] GetListe(){
    		ArrayList<Incident> GetListeG2R = GetListeIncident();
    		return GetListeG2R.toArray(new Incident[GetListeG2R.size()]);
    	}
     
    	public ArrayList<Incident> GetListeIncident() {
     
    		ConnectBase connexion = ConnectBase.getInstance();
    		Requests r = new Requests();
    		ResultSet rs = null;
    		rs = r.SelectIncident(connexion);
    		try {
    			while (rs.next()) {
     
    				listeIncident.add(new Incident(rs.getInt("numero"), rs.getInt("g2r_impacte"), 
    				rs.getString("detail"), rs.getDate("date_debut"), rs.getBoolean("impact_client"),
    				rs.getString("etat_antenne")));
     
    			}
     
     
    		} catch (SQLException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
     
    		CloseConnect.closeConnection(connexion.getConnection());
     
    		return listeIncident;
     
    	}
     
    	public Incident FindIncient(int numero){
     
    		ConnectBase connexion = ConnectBase.getInstance();
    		ResultSet rs = null;
    		try {
    			PreparedStatement ps = connexion.getConnection().prepareStatement(FOUNDINCIDENT);
    			ps.setInt(1, numero);
    			rs = ps.executeQuery();
    			System.out.println(rs);
    			while (rs.next()) {
    			I = new Incident(rs.getInt("numero"), rs.getInt("g2r_impacte"), 
    					rs.getString("detail"), rs.getDate("date_debut"), rs.getBoolean("impact_client"),
    					rs.getString("etat_antenne"));
    			}
    			return I;
    		} catch (SQLException ex) {
    			System.out.println("Connexion à la base de données impossible");
    		}
     
     
    		CloseConnect.closeConnection(connexion.getConnection());
    		return null;
    	}
     
    }
    Et l'erreur s'affiche directement dans WSO2 (Je n'ai pas d'erreur ailleurs) quand je teste la fonction GetListe (J'ai bien un resultat avec FindIncident):


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <S:Fault xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
    <faultcode>S:Client</faultcode>
    <faultstring>Méthode de répartition introuvable pour {} </faultstring>
     
    </S:Fault>


    EDIT: En fait quand je teste ma fonction GetListeIncident, le body qui devrai contenir <p Getliste Incident .... est vide :/ Du coup je ne comprends pas comment je pourrais modifier ce body pour y rentrer ce dont j'ai besoin

  4. #4
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    J'ai l'impression que vous voulez dire que le côté serveur est bien en place et que le problème vient de celui de côté client. SOAPUI est bien un outil côté client. Je veux bien. Par conséquence, ce qu'il faut montrer c'est le code java côté client: en principe, le client ne peut pas et ne veux rien savoir comment le serveur implémente le service, non? et c'est bien l'interopérabilité et l'encapsulation du service web...

    Or, comme vous montrez le code côté serveur, je y jets un coup d'oeil et voilà quelque chose qui n'est pas cohérente. Le wsdl montre le nom d'opération GetListe, mais, la classe est annoté avec l'attribut operationName="GetListeIncident". Ce genre d'incohérence réconcilie mal tous les deux façons de faire à la fois, soit code d'abord, soit contrat d'abord. La seule possibilité est que le wsdl et le code sont écrits indépendamment sans faire un vérification préalable leur rapport de cohérence de l'un à l'autre en tout temps. Je dirais, il faut corriger l'annotation de GetListeIncident à GetListe, et puis re-déployer et refaire le test.

Discussions similaires

  1. Message d'erreur : Cannot find source for binding
    Par takinelinfo dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 04/07/2011, 20h29
  2. Erreur de compilation (Cannot find sympbol method writeObject)
    Par popy67 dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 07/01/2011, 18h51
  3. Réponses: 1
    Dernier message: 09/04/2010, 12h06
  4. Cannot find global ActionForward for name initAction
    Par mahmoud_mahmoud dans le forum Struts 1
    Réponses: 4
    Dernier message: 23/05/2008, 04h05
  5. [JSTL] Cannot find the tag library descriptor for functions
    Par thierryler dans le forum Taglibs
    Réponses: 1
    Dernier message: 01/12/2007, 12h44

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