Précédent   Forum des professionnels en informatique > Java > Serveurs, conteneurs, et Java EE > Java EE
Java EE Forum d'entraide sur la norme Java EE (EJB, JMS, etc.). Avant de poster -> FAQ Java EE
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/04/2005, 10h53   #1
Nouveau Membre du Club
 
Inscription : mars 2004
Messages : 92
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 92
Points : 29
Points : 29
Envoyer un message via MSN à Nycos62
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 ?
Nycos62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/04/2005, 11h17   #2
Membre régulier
 
Inscription : décembre 2002
Messages : 186
Détails du profil
Informations forums :
Inscription : décembre 2002
Messages : 186
Points : 91
Points : 91
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
mauvais_karma est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/04/2005, 12h06   #3
Nouveau Membre du Club
 
Inscription : mars 2004
Messages : 92
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 92
Points : 29
Points : 29
Envoyer un message via MSN à Nycos62
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 :
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 ?)
Nycos62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/04/2005, 13h54   #4
Membre régulier
 
Inscription : décembre 2002
Messages : 186
Détails du profil
Informations forums :
Inscription : décembre 2002
Messages : 186
Points : 91
Points : 91
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
mauvais_karma est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/04/2005, 15h07   #5
Nouveau Membre du Club
 
Inscription : mars 2004
Messages : 92
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 92
Points : 29
Points : 29
Envoyer un message via MSN à Nycos62
decidement, encore merci (je bosse sur JBossWS)
Nycos62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/04/2005, 15h11   #6
Membre régulier
 
Inscription : décembre 2002
Messages : 186
Détails du profil
Informations forums :
Inscription : décembre 2002
Messages : 186
Points : 91
Points : 91
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
mauvais_karma est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/04/2005, 16h12   #7
Nouveau Membre du Club
 
Inscription : mars 2004
Messages : 92
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 92
Points : 29
Points : 29
Envoyer un message via MSN à Nycos62
pas de problème

juste au cas ou il y a un pro du wscompile dans les parages:
voici ma ligne de commande :
Code :
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 :
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.
Nycos62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/04/2005, 17h24   #8
Membre régulier
 
Inscription : décembre 2002
Messages : 186
Détails du profil
Informations forums :
Inscription : décembre 2002
Messages : 186
Points : 91
Points : 91
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
mauvais_karma est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/04/2005, 17h52   #9
Nouveau Membre du Club
 
Inscription : mars 2004
Messages : 92
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 92
Points : 29
Points : 29
Envoyer un message via MSN à Nycos62
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 :
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 :
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 ???
Nycos62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/04/2005, 11h15   #10
Nouveau Membre du Club
 
Inscription : mars 2004
Messages : 92
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 92
Points : 29
Points : 29
Envoyer un message via MSN à Nycos62
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
Nycos62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/04/2005, 12h57   #11
Nouveau Membre du Club
 
Inscription : mars 2004
Messages : 92
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 92
Points : 29
Points : 29
Envoyer un message via MSN à Nycos62
Pour acceder a mon WebService, j'utilise ce code :
Code :
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 ?
Nycos62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/04/2005, 14h48   #12
Membre régulier
 
Inscription : décembre 2002
Messages : 186
Détails du profil
Informations forums :
Inscription : décembre 2002
Messages : 186
Points : 91
Points : 91
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
mauvais_karma est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/04/2005, 15h48   #13
Nouveau Membre du Club
 
Inscription : mars 2004
Messages : 92
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 92
Points : 29
Points : 29
Envoyer un message via MSN à Nycos62
j'utilise JWSDP et j'avais lu cet article. mais j'ai qd meme essayé l'option :
Code :
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.
Nycos62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/04/2005, 16h57   #14
Membre régulier
 
Inscription : décembre 2002
Messages : 186
Détails du profil
Informations forums :
Inscription : décembre 2002
Messages : 186
Points : 91
Points : 91
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?
mauvais_karma est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/04/2005, 17h20   #15
Nouveau Membre du Club
 
Inscription : mars 2004
Messages : 92
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 92
Points : 29
Points : 29
Envoyer un message via MSN à Nycos62
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
Nycos62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2005, 11h46   #16
Membre régulier
 
Inscription : décembre 2002
Messages : 186
Détails du profil
Informations forums :
Inscription : décembre 2002
Messages : 186
Points : 91
Points : 91
moi g un pb avec wscompile

je fais
Code :
1
2
 
wscompile -cp %CLASPPATH% -gen:server -f:documentliteral -mapping jaxrpc-mapping.xml -d wsdl.xml config.xml
avec le fichier de config:
Citation:
<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
Citation:
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 :
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?
mauvais_karma est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2005, 12h00   #17
Nouveau Membre du Club
 
Inscription : mars 2004
Messages : 92
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 92
Points : 29
Points : 29
Envoyer un message via MSN à Nycos62
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 :
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.
Nycos62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2005, 15h21   #18
Invité de passage
 
Inscription : 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"
nugget est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2005, 16h41   #19
Membre régulier
 
Inscription : décembre 2002
Messages : 186
Détails du profil
Informations forums :
Inscription : décembre 2002
Messages : 186
Points : 91
Points : 91
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
mauvais_karma est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h01.


 
 
 
 
Partenaires

Hébergement Web