Avatar billede kasper28 Nybegynder
29. august 2003 - 11:02 Der er 42 kommentarer og
1 løsning

Webservice J2EE

Hej

jeg har pt. lavet en webservice på en J2ee server og vil gerne have en anden J2ee server til at tilgå denne webservice.

jeg anvender

Jbuilder 8
Jboss 3.0.8
og tomcat

Webservicen virker ok med en testklient i en almindelig java klasse .....

Hvordan kontakter man en webservice fra en sessionBean ????


Hilsen
Kasper Johansen
Avatar billede arne_v Ekspert
29. august 2003 - 11:07 #1
Copy paster koden fra din test client ind i din session bean.

[der er noget smart i J2EE 1.4, men jeg formoder at du bruger 1.3]
Avatar billede kasper28 Nybegynder
29. august 2003 - 11:10 #2
Jbuilder laver 4 hjælpe klasser som den ligger ned med den session bean den automatisk laver, disse bliver også deployet på Jboss uden problemer. Men på runtime klager den over at den ikke kan finde en af de autogenerede filer.
Avatar billede arne_v Ekspert
29. august 2003 - 11:16 #3
Hvilken klasse ? Hvad indeholder EJB jar filen ? Har du deployet de nødvendige
Axis libs ?

[ja - mange spørgsmål - men det er umuligt at sige hvad der går galt uden
flere detaljer]
Avatar billede kasper28 Nybegynder
29. august 2003 - 11:19 #4
vi har deployet Axis.war under jboss server/default/deploy og ser ud til at virke. I selve Jar filen som er deployet på jboss er selve sessionbean + hjælpe filerne incl. den fil som den siger den ikke kan finde.

Den klager over Servicelocator not found
Avatar billede arne_v Ekspert
29. august 2003 - 11:31 #5
Din session bean kan ikke bruge Axis klasser fra Axis.war og din session bean
client skal bruge nogle Axis klasser.

Men kan du ikke poste output fra jar tvf på din ejb jar fil og hele
fejl-beskeden ?
Avatar billede kasper28 Nybegynder
29. august 2003 - 11:38 #6
Fejlen ser sådan ud:

11:36:42,617 ERROR [LogInterceptor] Unexpected Error:
java.lang.NoClassDefFoundError: kasper/WebserviceFacadeServiceLocator
    at kasper.WebserviceFacadeSessionBean.findKunde(WebserviceFacadeSessionBean.java:21)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl
Avatar billede kasper28 Nybegynder
29. august 2003 - 11:39 #7
her er koden i sessionBeanen:

kasper.WebserviceFacade binding;
    String a="";
    try {
      binding = new kasper.WebserviceFacadeServiceLocator().getWebserviceFacade();
      a = binding.findKunde(kundenummer);
    }
    catch (Exception ex) {
    }

    return a;
  }
Avatar billede arne_v Ekspert
29. august 2003 - 11:49 #8
Og indhold af ejb jar filen ?
Avatar billede kasper28 Nybegynder
29. august 2003 - 11:57 #9
C:\jboss\server\default\deploy>jar tvf ordrebestilling.jar
  1070 Fri Aug 29 11:21:06 CEST 2003 META-INF/MANIFEST.MF
10229 Fri Aug 29 11:21:06 CEST 2003 META-INF/ejb-jar.xml
  1460 Fri Aug 29 11:21:06 CEST 2003 META-INF/jboss.xml
  3554 Fri Aug 29 11:21:06 CEST 2003 META-INF/jbosscmp-jdbc.xml
  257 Fri Aug 29 11:21:06 CEST 2003 kasper/WebserviceFacade.class
  404 Fri Aug 29 11:21:06 CEST 2003 kasper/WebserviceFacadeService.class
  3849 Fri Aug 29 11:21:06 CEST 2003 kasper/WebserviceFacadeServiceLocator.class
  275 Fri Aug 29 11:21:06 CEST 2003 kasper/WebserviceFacadeSession.class
  1403 Fri Aug 29 11:21:06 CEST 2003 kasper/WebserviceFacadeSessionBean.class
  307 Fri Aug 29 11:21:06 CEST 2003 kasper/WebserviceFacadeSessionHome.class
  4814 Fri Aug 29 11:21:06 CEST 2003 kasper/WebserviceFacadeSoapBindingStub.class
  4227 Fri Aug 29 11:21:06 CEST 2003 test/EJBGetter.class
  445 Fri Aug 29 11:21:06 CEST 2003 test/Kunde.class
  2591 Fri Aug 29 11:21:06 CEST 2003 test/KundeBean.class
  454 Fri Aug 29 11:21:06 CEST 2003 test/KundeController.class
  2468 Fri Aug 29 11:21:06 CEST 2003 test/KundeControllerBean.class
  279 Fri Aug 29 11:21:06 CEST 2003 test/KundeControllerHome.class
  398 Fri Aug 29 11:21:06 CEST 2003 test/KundeHome.class
  1671 Fri Aug 29 11:21:06 CEST 2003 test/KundeOplysninger.class
  309 Fri Aug 29 11:21:06 CEST 2003 test/Ordre.class
  1892 Fri Aug 29 11:21:06 CEST 2003 test/OrdreBean.class
  407 Fri Aug 29 11:21:06 CEST 2003 test/OrdreController.class
  2803 Fri Aug 29 11:21:06 CEST 2003 test/OrdreControllerBean.class
  279 Fri Aug 29 11:21:06 CEST 2003 test/OrdreControllerHome.class
  452 Fri Aug 29 11:21:06 CEST 2003 test/OrdreHome.class
  1594 Fri Aug 29 11:21:06 CEST 2003 test/OrdreOplysninger.class
  311 Fri Aug 29 11:21:06 CEST 2003 test/Ordrelinier.class
  1489 Fri Aug 29 11:21:06 CEST 2003 test/OrdrelinierBean.class
  399 Fri Aug 29 11:21:06 CEST 2003 test/OrdrelinierHome.class
  249 Fri Aug 29 11:21:06 CEST 2003 test/Postnummer.class
  1424 Fri Aug 29 11:21:06 CEST 2003 test/PostnummerBean.class
  323 Fri Aug 29 11:21:06 CEST 2003 test/PostnummerHome.class
  411 Fri Aug 29 11:21:06 CEST 2003 test/Vare.class
  2226 Fri Aug 29 11:21:06 CEST 2003 test/VareBean.class
  500 Fri Aug 29 11:21:06 CEST 2003 test/VareController.class
  3017 Fri Aug 29 11:21:06 CEST 2003 test/VareControllerBean.class
  276 Fri Aug 29 11:21:06 CEST 2003 test/VareControllerHome.class
  431 Fri Aug 29 11:21:06 CEST 2003 test/VareHome.class
  1460 Fri Aug 29 11:21:06 CEST 2003 test/VareOplysninger.class
Avatar billede arne_v Ekspert
29. august 2003 - 12:04 #10
Så kan jeg godt forstå at du undrer dig.

Den er der men kan ikke findes !?!?
Avatar billede arne_v Ekspert
29. august 2003 - 12:06 #11
Har du prøvet at genstarte JBoss ?

Det burde naturligvis være autoredeployet, men måske er der gået noget galt
i den process.
Avatar billede kasper28 Nybegynder
29. august 2003 - 12:10 #12
har vi lagt axis rigtigt ind i jboss ?? - den ligger som axis.war.
Avatar billede arne_v Ekspert
29. august 2003 - 12:12 #13
axis.war bruge stil web service server delen - har ikke noget med client
delen at gøre.
Avatar billede arne_v Ekspert
29. august 2003 - 12:12 #14
Men du har accepteret mit svar - betyder det at det virker nu ?
Avatar billede kasper28 Nybegynder
29. august 2003 - 12:15 #15
nej - men hvis vi ikke ligger axis.war ind får vi en fejl:

org.apache.service.client not found
Avatar billede kasper28 Nybegynder
29. august 2003 - 12:17 #16
selve websevicen er deployet via en javaBean på en tomcat server der kontakter en J2EE container - er det en forkert indgangsvinkel ??
Avatar billede arne_v Ekspert
29. august 2003 - 12:18 #17
Lyder som JBoss er konfiguereret til at bruge en classloader for
det hele både axis.war og ejb jar.

Men helt fint - det gør mange ting nemmere.
Avatar billede arne_v Ekspert
29. august 2003 - 12:20 #18
Jeg er ikke sikker på at jeg har forstået steup'et.

Men det betyder ikke noget for troubleshoot af fejlen.
Avatar billede kasper28 Nybegynder
29. august 2003 - 12:22 #19
bruger du selv jbuilder ????

vi har gjort følgende:
hentet wsdl-filen fra serveren
valgt import as webservice
valgt EJB
ud fra wsdl-filen genererer jbuilder så en testcase samt 4 eller 5 andre filer som sørger for pasing af SOAP.
Vi har derefter taget den relevate koden i testcase og lagt den ned i sessionbeanen. samt kodet en client som laver lookup til denne sessionbean.


Derefter deployer vi J2ee applikationen på jboss og får den struktur vi sendte til dig.
Avatar billede arne_v Ekspert
29. august 2003 - 12:27 #20
Ja. Og har også arbejdet en del med WS.

Dog jeg har aldrig kaldt en WS fra en EJB (altid en WS som kalder en EJB).

Men det lyder rigtigt.

Måske skulle jeg lige prøve med et lille eksempel ...
Avatar billede kasper28 Nybegynder
29. august 2003 - 12:29 #21
ja det ville være dejligt - vi har rodet med problemet i flere dage nu.

og det er ret frusterende at testklienten virker uden problemer - det er først når vi deployer på jboss at vi får fejl
Avatar billede kasper28 Nybegynder
29. august 2003 - 15:59 #22
har du glemt mig Arne :|
Avatar billede arne_v Ekspert
29. august 2003 - 16:42 #23
Nix.

Men konen sendte mig lige i Silvan.
Avatar billede kasper28 Nybegynder
29. august 2003 - 17:06 #24
Godt. :)

håber du kan hjælpe os - er ved at løbe tør for ideer.
Avatar billede arne_v Ekspert
29. august 2003 - 17:30 #25
Jeg er igang.
Avatar billede arne_v Ekspert
29. august 2003 - 18:00 #26
Hm.

Nu har jeg et setup hvor både:

web service client / app <----> web service / web app

og:

ejb client / app <----> web service client / ejb <----> web service / web app

virker !

Så hvordan finder vi forskellen på mit der virker og jeres der ikke gør ??
Avatar billede kasper28 Nybegynder
29. august 2003 - 18:16 #27
jeg kan evt. sende mit projekt til dig eller omvendt.
Avatar billede kasper28 Nybegynder
29. august 2003 - 18:21 #28
lige et spørgsmål - anvender du også de filer Jbuilder laver automatisk når du importer som webservice i session Beanen eller hvad ??
Avatar billede kasper28 Nybegynder
29. august 2003 - 18:22 #29
min mailadresse er kasper@aab-net.dk

har også en ftp - får du nærmere info omkring hvis det er lettere
Avatar billede kasper28 Nybegynder
29. august 2003 - 18:23 #30
hvilken J2ee server anvender du ??? Jboss 3.2.1 og bruger du Jbuilder ??? hehe er helt vild lige nu - fatter ikke mit ikk virker
Avatar billede arne_v Ekspert
29. august 2003 - 18:28 #31
JBuilder 9 (som har Axis 1.1 RC3) og JBoss 3.0.7+Tomcat 4.1.24
Avatar billede arne_v Ekspert
29. august 2003 - 18:29 #32
Client app:

package wstest.wsclient;

import localhost.test.services.Test.*;

public class WsClient {
    public static void main(String[] args) throws Exception {
        TestServiceLocator loc = new TestServiceLocator();
        Test tst = loc.getTest();
        System.out.println(tst.dup("abc"));
    }
}
Avatar billede arne_v Ekspert
29. august 2003 - 18:29 #33
EJB:

package wstest.ejb;

import javax.ejb.*;

import localhost.test.services.Test.*;
import java.rmi.*;
import javax.xml.rpc.*;

public class TestEJBBean implements SessionBean {
    SessionContext sessionContext;
    public void ejbCreate() throws CreateException {
        /**@todo Complete this method*/
    }
    public void ejbRemove() {
        /**@todo Complete this method*/
    }
    public void ejbActivate() {
        /**@todo Complete this method*/
    }
    public void ejbPassivate() {
        /**@todo Complete this method*/
    }
    public void setSessionContext(SessionContext sessionContext) {
        this.sessionContext = sessionContext;
    }
    public String dup(String s) {
        try {
            TestServiceLocator loc = new TestServiceLocator();
            Test tst = loc.getTest();
            return tst.dup("abc");
        } catch (RemoteException ex) {
            return null;
        } catch (ServiceException ex) {
            return null;
        }
    }
}
Avatar billede arne_v Ekspert
29. august 2003 - 18:30 #34
localhost.test.services.Test.* er den genererede client stub kode.
Avatar billede arne_v Ekspert
29. august 2003 - 18:30 #35
Skal jeg pakke "das ganze molevitten" og sende per email ?
Avatar billede kasper28 Nybegynder
29. august 2003 - 18:32 #36
ftp://62.61.150.102:21
login arne
pass arne
Avatar billede kasper28 Nybegynder
29. august 2003 - 18:33 #37
eller mail'en bestemmer du selv
Avatar billede kasper28 Nybegynder
29. august 2003 - 18:34 #38
har du sat noget specielt op i jboss - f.eks. axis
Avatar billede arne_v Ekspert
29. august 2003 - 18:59 #39
JBuilder har selv pakket min war fil med de nødvendige Axis stumper.

For at få ejb jar'en til at køre måtte jeg bede den pakke hele Axis
med ned i den.
Avatar billede kasper28 Nybegynder
29. august 2003 - 19:05 #40
k - kigger lige på din jar fil.....
Avatar billede arne_v Ekspert
29. august 2003 - 19:09 #41
test.war og test-ejb.jar er uploadet via FTP.

Jeg sender source per email.
Avatar billede kasper28 Nybegynder
29. august 2003 - 19:24 #42
du er sgu en guttermand - håber ikke det er et jboss problem jeg har her !!!!.
Avatar billede kasper28 Nybegynder
29. august 2003 - 20:12 #43
MANGE TAK FOR HJÆLPEN ARNE!!!!!!!

Det viste sig at være Jboss og Axis der ikke kunne sammen - men nu kører det....


Tak du har reddet min dag
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester