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

Portails Java Discussion :

Invocation d'un web service depuis une portlet [Liferay]


Sujet :

Portails Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 110
    Points : 67
    Points
    67
    Par défaut Invocation d'un web service depuis une portlet
    Bonjour,

    J'utilise Liferay, j'ai développé un petit web service (celui-ci fait une addition). Je génère le code a parti du wsdl gràce à cxf. Quand j'utilise le client lourd Java, mon web service fonctionne très bien. Quand je veux l'invoquer à partir d'une portlet, j'ai cette erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    17:03:32,976 ERROR [Jsr168Dispatcher:27] Could not execute action
    javax.xml.ws.WebServiceException: org.apache.cxf.service.factory.ServiceConstructionException: Failed to create service.
    	at org.apache.cxf.jaxws.ServiceImpl.<init>(ServiceImpl.java:150)
    	at org.apache.cxf.jaxws.spi.ProviderImpl.createServiceDelegate(ProviderImpl.java:65)
    	at javax.xml.ws.Service.<init>(Service.java:56)
    	at org.example.service.Service_Service.<init>(Service_Service.java:47)
    	at test.tuto.MavenStruts2Portlet.execute(MavenStruts2Portlet.java:31)
    et un peu plus bas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Caused by: org.apache.cxf.service.factory.ServiceConstructionException: Failed to create service.
    	at org.apache.cxf.wsdl11.WSDLServiceFactory.<init>(WSDLServiceFactory.java:93)
    	at org.apache.cxf.jaxws.ServiceImpl.initializePorts(ServiceImpl.java:205)
    	at org.apache.cxf.jaxws.ServiceImpl.<init>(ServiceImpl.java:148)
    	... 164 more
    Caused by: javax.wsdl.WSDLException: WSDLException: faultCode=PARSER_ERROR: java.lang.IllegalArgumentException: InputSource must have a ByteStream or CharacterStream
    	at org.apache.cxf.wsdl11.WSDLManagerImpl.loadDefinition(WSDLManagerImpl.java:226)
    	at org.apache.cxf.wsdl11.WSDLManagerImpl.getDefinition(WSDLManagerImpl.java:179)
    	at org.apache.cxf.wsdl11.WSDLServiceFactory.<init>(WSDLServiceFactory.java:91)
    	... 166 more
    Voici le code de ma portlet :

    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
     
    public MavenStruts2Portlet() {
    	URL wsdlURL = Service_Service.WSDL_LOCATION;
     
    	Service_Service ss = new Service_Service(wsdlURL, SERVICE_NAME);
    	this.port = ss.getAddService();  
    }
     
    public String execute() throws Exception {          
    	System.out.println("Invoking add...");
    	org.example.service.AddType _add_parameters = new AddType();
    	_add_parameters.setP1(number1);
    	_add_parameters.setP2(number2);
    	this.result = port.add(_add_parameters);
     
    	return ActionSupport.SUCCESS;		  
    }
    Faut-il configurer quelque chose? Ai-je louper un truc (surement)?

    Merci pour vos renseignements.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 110
    Points : 67
    Points
    67
    Par défaut
    Cette erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Caused by: javax.wsdl.WSDLException: WSDLException: faultCode=PARSER_ERROR: java.lang.IllegalArgumentException: InputSource must have a ByteStream or CharacterStream
    Me fait penser que l'application ne trouve pas le fichier wsdl.
    Mon projet étant un projet Maven, il se trouve dans src/java/resources mais je fais bien attention à modifier l'url de celui-ci dans mon service :

    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
     
    @WebServiceClient(name = "service", 
                      wsdlLocation = "file:WEB-INF/classes/service.wsdl",
                      targetNamespace = "http://www.example.org/service/") 
    public class Service_Service extends javax.xml.ws.Service {
     
        public final static URL WSDL_LOCATION;
        public final static QName SERVICE = new QName("http://www.example.org/service/", "service");
        public final static QName AddService = new QName("http://www.example.org/service/", "addService");
        static {
            URL url = null;
            try {
                url = new URL("file:WEB-INF/classes/service.wsdl");
            } catch (MalformedURLException e) {
                System.err.println("Can not initialize the default wsdl from file:WEB-INF/classes/service.wsdl");
                // e.printStackTrace();
            }
            WSDL_LOCATION = url;
        }
    Donc je ne vois toujours pas ...

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 110
    Points : 67
    Points
    67
    Par défaut
    Dernier post, ceci n'avait rien a voir avec Liferay et je m'en excuse (je suis un peu submergé par toute les nouvelles technos que je dois prendre en main).

    J'ai changé le chemin relatif pointant vers mon fichier wsdl par un chemin absolue et ça fonctionne (en local bien sur). Il n'y a plus qu'a trouver une solution pour pallier ce problème.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 03/07/2011, 14h56
  2. Client windows phone7 et web service depuis une application GWT
    Par malak.ensa dans le forum Windows Phone
    Réponses: 6
    Dernier message: 01/05/2011, 23h29
  3. [Portlet] invocation de service depuis une portlet
    Par asmoune dans le forum Portails
    Réponses: 0
    Dernier message: 05/09/2008, 11h15
  4. Réponses: 0
    Dernier message: 17/07/2008, 17h29
  5. Réponses: 7
    Dernier message: 17/10/2007, 18h06

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