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

Java EE Discussion :

Exposer en tant que Web Service ? [EJB]


Sujet :

Java EE

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2004
    Messages : 93
    Points : 61
    Points
    61
    Par défaut Exposer en tant que Web Service ?
    Bonjour,
    - Est-il possible d'ajouter les fichier necessaire à l'exposition d'un EJB en tant que service Web et de continuer à se servir de l'EJB normalement et en même temps de s'en servir en tant que Web Service ?

    - La méthode pour exposer un EJB en tant que Service Web :
    1) créer fichier config.xml (contenant la config du service)
    2) utiliser wscompile -define config.xml
    3) mettre les fichiers générés (.wsdl,webservice.xml, mapping.xml) dans le jar
    4) déployer l'EJB

    Est ce une bonne méthode ?

  2. #2
    Membre habitué
    Inscrit en
    Décembre 2002
    Messages
    186
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 186
    Points : 130
    Points
    130
    Par défaut
    oui tu peux utiliser ton EJB en passant à la fois par le WS ou par les interfaces locale ou remote directment

    tu peux utiliser wscompile

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2004
    Messages : 93
    Points : 61
    Points
    61
    Par défaut
    je me suis fait un petit EJB helloWorld qui se contente d'envoyer une string "salut"

    mes classes sont les suivantes :
    helloworld/ejb/HelloWorld.java
    helloworld/ejb/HelloWorldBean.java
    helloworld/ejb/HelloWorldHome.java
    helloworld/ejb/HelloWorldLocal.java
    helloworld/ejb/HelloWorldLocalHome.java

    les fichiers de config :
    META-INF/ejb-jax.xml
    META-INF/jboss.xml

    que dois je mettre en argument de wscompile pour qu'il me génére le wsdl qui me premettra de transformer l'EJB en WS ? (le endpoint étant en fait l'interface HelloWorld.java de l'EJB ?)

    (un fichier config.xml comme celui-ci ?
    wscompile -define config.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <?xml version="1.0" encoding="UTF-8"?>
    <configuration xmlns="http://java.sun.com/xml/ns/jax-rpc/ri/config">
      <service
         name="HelloWorld"
         targetNamespace="http://generated.helloworld/wsdl"
         typeNamespace="http://generated.helloworld/types"
         packageName="helloworld.ejb">
         <interface name="helloworld.ejb.HelloWorld">
      </service>
    </configuration>
    ce code lit la HelloWorld.java interface et génére le fameu fichier WSDL,
    ou j'ai tout faux, ou il y a de bien meilleurs outils de génération ?)

  4. #4
    Membre habitué
    Inscrit en
    Décembre 2002
    Messages
    186
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 186
    Points : 130
    Points
    130
    Par défaut
    regarde du coté de xdoclet et @jboss-net:XXX

    sinon ya un article sur jvaworld
    http://www.javaworld.com/javaworld/jw-08-2004/jw-0802-ejbws.html

    mais il ne parle pas de jboss et axis

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2004
    Messages : 93
    Points : 61
    Points
    61
    Par défaut
    decidement, encore merci (je bosse sur JBossWS)

  6. #6
    Membre habitué
    Inscrit en
    Décembre 2002
    Messages
    186
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 186
    Points : 130
    Points
    130
    Par défaut
    g trouvé d'autres tuto mais ya 36 facons de faire:

    http://www.oracle.com/technology/pub/articles/davydov_ejb.html
    http://www.csd.abdn.ac.uk/~bscharla/teaching/mtp_software/jboss/jboss-net-EJB-example.shtml
    http://www.huihoo.com/jboss/online_manual/3.2.3/Chap12.html

    sur jboss3.2.x tu peux copier l'archive jboss-net.sar dans ta configuration serveur (JBOSS/server/default/deploy/ par ex.) pour avoir acces à la servlet soap Axis


    j'en suis au meme point que toi

    j'essaie aussi avec Jonas, ca parrait + facile...

    préviens moi si tu avances, ca m'interesse aussi

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2004
    Messages : 93
    Points : 61
    Points
    61
    Par défaut
    pas de problème

    juste au cas ou il y a un pro du wscompile dans les parages:
    voici ma ligne de commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    c:\applis\jwsdp\jaxrpx\bin\wscompile -define c:\data\eclipse\mywebservices\com\config.xml -classpath c:\data\eclipse\mywebservices\com -d c:\applis\jwsdp\jaxrpc\bin\result\
    voici mon config.xml pour wscompile
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <?xml version="1.0" encoding="UTF-8"?> 
    <configuration 
        xmlns="http://java.sun.com/xml/ns/jax-rpc/ri/config"> 
            <service name="HelloWorld"  
    	targetNamespace="http://ejb.helloworld/wsdl"  
    	typeNamespace="http://ejb.helloworld/types"  
          	packageName="helloworld.ejb">  
        	<interface name="helloworld.ejb.HelloWorld"
        	servantName="helloworld.ejb.HelloWorldBean"/>  
    </service> 
    </configuration>
    en sortie, wscompile me renvoie :
    erreur : Le type ne peut pas implémenter à distance : javax.ejb.EJBHome
    ce qui pour l'instant ne me dit pas grand chose.

  8. #8
    Membre habitué
    Inscrit en
    Décembre 2002
    Messages
    186
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 186
    Points : 130
    Points
    130
    Par défaut
    tu as surement regardé par la:
    http://www.jboss.org/wiki/Wiki.jsp?page=WSServerEJB

    JBossWS est dispo uniquement sur JBoss4ou est ce que c'est compatible avec Jboss3.2.x (en remplacement deJboss-net)???

    Par contre tu as demandé si le Bean pouvait être utilisé sans passer par le WS: je ne suis pas sur qu'avec la méthode du lien cité + haut ce soit possible. En effet, l'interf&ce n'implemente ni EJBObject ni EJBHome, mais seulement Remote

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2004
    Messages : 93
    Points : 61
    Points
    61
    Par défaut
    je pense que jbossWS ne fonctionne qu'avec JBoss 4.X et est dispo a partir de la version 1.4 de J2ee
    pour Jboss 3.X => JBoss.Net

    pour la question de l'utilisation du Bean en tant que SW et EJB simultanement, j'ai l'impression que c'est réglé :

    Je me suis créé une interface HelloWorldService extends Remote {} en plus identique à HelloWorld.java (par convention cette classe devrait plutot s'appeler HelloWorldEndpoint)

    qui est prise en compte uniquement par wscompile.

    re fichier config.xml modifié :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <?xml version="1.0" encoding="UTF-8"?> 
    <configuration 
        xmlns="http://java.sun.com/xml/ns/jax-rpc/ri/config"> 
            <service name="HelloWorldService"  
    			targetNamespace="helloworld.ejb.wsdl"  
    	      		typeNamespace="helloworld.ejb.types"  
          			packageName="helloworld.ejb">  
        			<interface name="helloworld.ejb.HelloWorldService"
        			servantName="helloworld.ejb.HelloWorldBean"/>  
    </service> 
    </configuration>
    ce qui m'a généré un fichier HelloWorldService.wsdl
    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
     
    <?xml version="1.0" encoding="UTF-8"?>
     
    <definitions name="HelloWorldService" targetNamespace="helloworld.ejb.wsdl" xmlns:tns="helloworld.ejb.wsdl" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
      <types/>
      <message name="HelloWorldService_getHello"/>
      <message name="HelloWorldService_getHelloResponse">
        <part name="result" type="xsd:string"/></message>
      <portType name="HelloWorldService">
        <operation name="getHello">
          <input message="tns:HelloWorldService_getHello"/>
          <output message="tns:HelloWorldService_getHelloResponse"/></operation></portType>
      <binding name="HelloWorldServiceBinding" type="tns:HelloWorldService">
        <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="rpc"/>
        <operation name="getHello">
          <soap:operation soapAction=""/>
          <input>
            <soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" use="encoded" namespace="helloworld.ejb.wsdl"/></input>
          <output>
            <soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" use="encoded" namespace="helloworld.ejb.wsdl"/></output></operation></binding>
      <service name="HelloWorldService">
        <port name="HelloWorldServicePort" binding="tns:HelloWorldServiceBinding">
          <soap:address location="REPLACE_WITH_ACTUAL_URL"/></port></service></definitions>
    ou sont mes webservices.xml et jaxrpc-mapping.xml ???

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2004
    Messages : 93
    Points : 61
    Points
    61
    Par défaut
    J'ai finalement écrit les webservices.xml et jaxr-mapping.xml à la main. Bizarrement wscompile ne génére que le fichier WSDL.

    Pour un début de réponse quand à l'utilisation de ce EJB-WebService, j'ai déployé mon jar dans le serveur Jboss et qd je vais dans la console Web, je retrouve bien un EJB helloworld et un WS helloworld.

    Maintenant il ne reste plus qu'à y accéder par un code java

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2004
    Messages : 93
    Points : 61
    Points
    61
    Par défaut
    Pour acceder a mon WebService, j'utilise ce code :
    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
     
    String urlstr="http://localhost:9001/myserviceweb/HelloWorldService?wsdl";
     
    		System.out.println("Contacting webservice at " + urlstr);
     
            URL url =  new URL(urlstr);
     
            QName qname = new QName("helloworld.ejb.wsdl","HelloWorldService");
     
            ServiceFactory factory = javax.xml.rpc.ServiceFactory.newInstance();
            Service        service = factory.createService(url, qname);
     
            HelloWorld          hello   = (HelloWorld) service.getPort(HelloWorld.class);
     
            System.out.println("hello.getHello(" + "truc" + ")");
            System.out.println("output:" + hello.getHello("truc"));
    qui me retourne l'erreur suivante :
    Contacting webservice at http://localhost:9001/myserviceweb/HelloWorldService?wsdl
    hello.getHello(truc)
    java.lang.NullPointerException
    at org.apache.axis.client.Call.getTypeMapping(Call.java:2402)
    at org.apache.axis.client.Call.setReturnType(Call.java:1230)
    at org.apache.axis.client.Call.setOperation(Call.java:1412)
    at org.apache.axis.client.AxisClientProxy.invoke(AxisClientProxy.java:369)
    at $Proxy0.getHello(Unknown Source)
    at utils.locator.WSLocator.main(WSLocator.java:62)
    Exception in thread "main"

    l'erreur provient-elle de mon jaxrpc-mapping.xml ou mon WSDL ?

  12. #12
    Membre habitué
    Inscrit en
    Décembre 2002
    Messages
    186
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 186
    Points : 130
    Points
    130
    Par défaut
    je ne pense pas que cela vienne du wsdl, puisque le proxy est correctement généré coté client, de plus, le cast vers HelloWorld passe.

    visiblement, l'erreur semble venir du mapping

    sinon tu as essayé les option wscompile -mapping mapping.xml ?

    edit: d'apres le lien suivant, l'option -mapping n'est pas présente dans le JWSDP
    http://java.sun.com/webservices/docs/1.5/jaxrpc/jaxrpc-tools.html

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2004
    Messages : 93
    Points : 61
    Points
    61
    Par défaut
    j'utilise JWSDP et j'avais lu cet article. mais j'ai qd meme essayé l'option :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    C:\applis\jwsdp\jaxrpc\bin>wscompile -define -mapping c:\data\eclipse\mywebservices\com\META-INF\jaxrpc-mapping.xml c:\data\eclipse\mywebservices\com\wscompile-config.xml -classpath c:\data\eclipse\mywebservices\com -d c:\data\eclipse\mywebservices\com\META-INF\wsdl
    il génére effectivement un bon gros fichier de mapping (que j'ai inclu dans le jar...) mais mon code client retourne toujours la même exception que précedemment.

  14. #14
    Membre habitué
    Inscrit en
    Décembre 2002
    Messages
    186
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 186
    Points : 130
    Points
    130
    Par défaut
    une question:
    tu codes tes EJB a la main ou tu utilises un plugin genre lomboz, ou un autre?

    parce que perso je suis sur lomboz, le systeme est sympa mais par contre il ne prend pas les tag xdoclet que je rajoute moi meme dans les anotations.

    qq sait comment utiliser l'extension jboss-net pour xdoclet et l'ajouter dans lomboz?

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2004
    Messages : 93
    Points : 61
    Points
    61
    Par défaut
    perso, je les code à la main. Mais tu devrai plutot poser cette question dans la partie du forum dédiée à eclipse :
    http://www.developpez.net/forums/viewforum.php?f=97

  16. #16
    Membre habitué
    Inscrit en
    Décembre 2002
    Messages
    186
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 186
    Points : 130
    Points
    130
    Par défaut
    moi g un pb avec wscompile

    je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    wscompile -cp %CLASPPATH% -gen:server -f:documentliteral -mapping jaxrpc-mapping.xml -d wsdl.xml config.xml
    avec le fichier de config:
    <configuration xmlns="http://java.sun.com/xml/ns/jax-rpc/ri/config">
    <service name="OrganizationService"
    targetNamespace="http://XXX"
    typeNamespace="http://XXX/types"
    packageName="beans">
    <interface name="beans.HelloWSE" servantName="beans.HelloBean"/>
    </service>
    </configuration>
    L'erreur suivante
    erreur : Interface distante non valide ; la classe beans.HelloWSE n'est pas une interface.
    Donc il trouve bien l'interface, et c bien une interface distante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    package beans;
     
    import java.rmi.Remote;
    import java.rmi.RemoteException;
     
     
    public interface HelloWSE extends Remote{
     
        public String sayHello() throws RemoteException;
     
        public String sayHelloRemote() throws RemoteException;
     
    }
    où peut etre le probleme?

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2004
    Messages : 93
    Points : 61
    Points
    61
    Par défaut
    ton interface est correcte et ton fichier de config aussi (sauf que ton service s'appelera OrganizationService)

    essaye plutot une ligne de commande dans ce style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    wscompile -define -mapping c:\...\META-INF\jaxrpc-mapping.xml c:\...\config.xml -classpath c:\...\beans -d c:\...\wsdl
    c:\...\META-INF\jaxrpc-mapping.xml => ton chemin et le nom du fichier de mapping que wscompile va créer

    c:\...\config.xml => le chemin de ton fichier config.xml que tu as créé

    c:\...\beans => le chemin du package de ton ejb

    c:\...\wsdl => le chemin ou wscompile va mettre le fichier wsdl (le nom de ce fichier est généré automatiquement "nom service".wsdl.

  18. #18
    Nouveau Candidat au Club
    Inscrit en
    Mai 2005
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 1
    Points : 1
    Points
    1
    Par défaut NullPointerException lors d'un acces client
    Salut Nycos62, j'ai exactement le meme probleme que toi. Si tu as trouve la solution, je serai tres ravi de la connaitre. Merci.

    java.lang.NullPointerException
    at org.apache.axis.client.Call.getTypeMapping(Call.java:2402)
    at org.apache.axis.client.Call.setReturnType(Call.java:1230)
    at org.apache.axis.client.Call.setOperation(Call.java:1412)
    at org.apache.axis.client.AxisClientProxy.invoke(AxisClientProxy.java:369)
    at $Proxy0.getHello(Unknown Source)
    at utils.locator.WSLocator.main(WSLocator.java:62)
    Exception in thread "main"

  19. #19
    Membre habitué
    Inscrit en
    Décembre 2002
    Messages
    186
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 186
    Points : 130
    Points
    130
    Par défaut
    salut
    pour moi ca marche a condition d'utiliser un encodage rpcliteral
    si je reste en documentliteral, bizarement, il ne voit plus les wrapers au moment du déploiement (mais ca passe): l'erreur à l'exécution est reportée à la fin de ce post:
    http://www.developpez.net/forums/viewtopic.php?t=333278


    Sinon, j'en profite pour faire le lien avec un post ou la question est "quel interet d'utiliser les EJB endpoint à la place d'un JaxrpcWS qui appele l'EJB?"
    http://www.developpez.net/forums/viewtopic.php?t=325138

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

Discussions similaires

  1. lancer un script en tant que services windows
    Par fredo2009 dans le forum Langage
    Réponses: 5
    Dernier message: 09/02/2006, 16h03
  2. [Windows] [Zope] Zope en tant que service
    Par santhony dans le forum Zope
    Réponses: 3
    Dernier message: 09/11/2004, 19h48
  3. Postmaster en tant que service NT
    Par krimson dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 16/04/2004, 09h08
  4. Licence MySql en tant que BD dans une application web
    Par Volta dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 26/02/2004, 14h38

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