java web service in web archive?

Pagina: 1
Acties:

  • Krooswijk.com
  • Registratie: Mei 2000
  • Laatst online: 17-08-2024
Hallo, ik had de volgende vraag: bij het maken van een web applicatie in java onder tomcat creeer ik doorgaans een .war file die door de applicatie manager van tomcat automatisch gedeployed kan worden. Echter heb ik ook in mijn /webapps/axis/classes dir een paar losse web services draaien. Nu wilde ik weten of ik deze ook ieder apart in een web-archive kan plaatsen en of tomcat deze dan ook automatisch oppikt. Hoe werkt dit?

  • Nick_S
  • Registratie: Juni 2003
  • Laatst online: 15-02 15:52

Nick_S

++?????++ Out of Cheese Error

Bedoel je op deze manier: http://ws.apache.org/axis/java/install.html?

Eerste hit bij google: webservices in war tomcat

[ Voor 6% gewijzigd door Nick_S op 23-06-2006 10:57 ]

'Nae King! Nae quin! Nae Laird! Nae master! We willna' be fooled agin!'


  • Krooswijk.com
  • Registratie: Mei 2000
  • Laatst online: 17-08-2024
Nee dat bedoel ik inderdaad niet. Ik heb m'n web services al prima draaien in m'n axis dir.

Stel ik maak een een simpele website op basis van jsp's. De directories en files hiervan stop ik dan in b.v. client.war, zodat ik deze op een andere server direct in de webroot kan zetten en apache 'm direct deployed en de site beschikbaar is.

Dit zou ik ook graag voor mijn web services doen, welke in de webapps/axis/classes staan.
Dat ik b.v. mijn web service dir structuurt in een service.war zet en deze elders weer gewoon in root van axis zet en dat de app manager deze dan weer direct deployed.

Met alle geprobeerde trefwoorden kom ik alleen irrelevante links tegen, waardoor ik me afvraag of het wel mogelijk is.

[ Voor 3% gewijzigd door Krooswijk.com op 23-06-2006 14:17 ]


  • Krooswijk.com
  • Registratie: Mei 2000
  • Laatst online: 17-08-2024
Weet iemand dit toevallig? Ik kan er nog steeds niks goeds over vinden...

  • matthijsln
  • Registratie: Augustus 2002
  • Laatst online: 15:48
Ja het is mogelijk, op de manier die in de link van Nick_S beschreven staat...

  • Krooswijk.com
  • Registratie: Mei 2000
  • Laatst online: 17-08-2024
Ok dus jullie zeggen dat als ik een service heb als volgt:

In axis\WEB-INF\classes heb ik: myService.class
In axis\WEB-INF\classes\package heb ik: usedClass1.class en usedClass2.class
In axis\WEB-INF\lib heb ik: alle benodigde .jar files
En ik heb een wsdd file aangemaakt.

Dat ik dan deze structuur in een .war kan file stoppen en in axis\WEB-INF kan droppen en dat deze compleet auto-gedeployed kan worden zonder te hoeven registreren met de AdminClient?

Ik kan het in ieder geval niet terugvinden via die link. Deze link had ik trouwens al in eerste instantie gebruikt om mijn web service werkend te krijgen...

  • matthijsln
  • Registratie: Augustus 2002
  • Laatst online: 15:48
Krooswijk.com schreef op maandag 26 juni 2006 @ 14:59:
Ok dus jullie zeggen dat als ik een service heb als volgt:

In axis\WEB-INF\classes heb ik: myService.class
In axis\WEB-INF\classes\package heb ik: usedClass1.class en usedClass2.class
In axis\WEB-INF\lib heb ik: alle benodigde .jar files
En ik heb een wsdd file aangemaakt.

Dat ik dan deze structuur in een .war kan file stoppen en in axis\WEB-INF kan droppen en dat deze compleet auto-gedeployed kan worden zonder te hoeven registreren met de AdminClient?

Ik kan het in ieder geval niet terugvinden via die link. Deze link had ik trouwens al in eerste instantie gebruikt om mijn web service werkend te krijgen...
Bijna, je moet ook nog een web.xml toevoegen met de axis servlet erin. En je maakt geen "axis" subdir in de war, dus je hebt in de war direct WEB-INF als subdir.

De war gooi je niet in een al gedeployde webapp maar (voor Tomcat met extract wars instelling op true) in de webapps dir zelf of je deployt hem met de manager. Dan heb je de AdminClient inderdaad niet meer nodig.

  • Krooswijk.com
  • Registratie: Mei 2000
  • Laatst online: 17-08-2024
matthijsln schreef op maandag 26 juni 2006 @ 19:03:
Bijna, je moet ook nog een web.xml toevoegen met de axis servlet erin. En je maakt geen "axis" subdir in de war, dus je hebt in de war direct WEB-INF als subdir.

De war gooi je niet in een al gedeployde webapp maar (voor Tomcat met extract wars instelling op true) in de webapps dir zelf of je deployt hem met de manager. Dan heb je de AdminClient inderdaad niet meer nodig.
Ok dan heb ik het bijna door, maar ik vind de informatie hier redelijk verwarrend over.

Dus direct vanuit de axis map uit WEB INF map de juiste bestanden (classes en lib dir) in de war plaatsen met WEB INF als root map in de war. Tot zover duidelijk. Deze war gooi dan gewoon in de webapps map van tomcat (dus naast de al bestaande axis map) en in de web.xml geef je dan deze moet worden opgepikt door de axis/servlet. Zie ik het zo goed? Ik heb gelezen over het genereren van de web.xml emt ant, maar ik wil eigenlijk weten of het makkelijker kan zonder dingen extra te hoeven installeren...

  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

Misschien ontstaat de verwarring doordat je Axis op 2 manieren kunt gebruiken? Je kan
1) Axis als webapp in je servlet container deployen en allerlei webservices 'aan' die webapp hangen, maar je kan ook
2) Stand alone webapps deployen die zelf de benodigde Axis jars in hun WEB-INF/lib hebben.

In dat tweede heval hoef je helemaal geen directory webapps/axis(/WEB-INF) te hebben om Axis te kunnen gebruiken.

Wie trösten wir uns, die Mörder aller Mörder?


  • matthijsln
  • Registratie: Augustus 2002
  • Laatst online: 15:48
Krooswijk.com schreef op maandag 26 juni 2006 @ 23:23:
[...]

Ok dan heb ik het bijna door, maar ik vind de informatie hier redelijk verwarrend over.

Dus direct vanuit de axis map uit WEB INF map de juiste bestanden (classes en lib dir) in de war plaatsen met WEB INF als root map in de war. Tot zover duidelijk. Deze war gooi dan gewoon in de webapps map van tomcat (dus naast de al bestaande axis map) en in de web.xml geef je dan deze moet worden opgepikt door de axis/servlet. Zie ik het zo goed? Ik heb gelezen over het genereren van de web.xml emt ant, maar ik wil eigenlijk weten of het makkelijker kan zonder dingen extra te hoeven installeren...
Indien de op deze manier een war maakt (zoals Confusion aangeeft via manier 2) is deze war helemaal onafhankelijk van de axis webapp. Je moet de war dus ook anders noemen dan axis.war, bijvoorbeeld mijn-webservice.war. De web.xml is er voor om naast de normale jsp's in de war ervoor te zorgen dat ook *.jws bestanden door Axis worden afgehandeld en dat het services/ pad werkt.

  • Krooswijk.com
  • Registratie: Mei 2000
  • Laatst online: 17-08-2024
matthijsln schreef op dinsdag 27 juni 2006 @ 09:23:
Indien de op deze manier een war maakt (zoals Confusion aangeeft via manier 2) is deze war helemaal onafhankelijk van de axis webapp. Je moet de war dus ook anders noemen dan axis.war, bijvoorbeeld mijn-webservice.war. De web.xml is er voor om naast de normale jsp's in de war ervoor te zorgen dat ook *.jws bestanden door Axis worden afgehandeld en dat het services/ pad werkt.
Ahhh ok, dat maakt wel een en ander duidelijk ja. Dus ik kan m dan als gewone webapp deployen, maar hij werkt op deze manier dan wel gewoon als web service. Dat is ook een nette oplossing. Ik zal dit eens gaan testen en gaan zoeken hoe ik die web.xml in elkaar zet. Alvast bedankt.

  • Krooswijk.com
  • Registratie: Mei 2000
  • Laatst online: 17-08-2024
Ok ik heb dus een .war file gecreeerd die ik in de %TOMCAT%\webapps map (dus naast axis) wil zetten, om hem vervolgens volledig automatisch te laten deployen.
De inhoud van MijnService.war is als volgt:
  • deploy.wsdd
  • META-INF
    • manifest.mf
  • WEB-INF
    • web.xml
    • classes
      • service.properties
      • MijnService.class
      • MijnPackage
    • libs
      • alle benodigde .jar files
De inhoud van de deployment descriptor is als volgt:

code:
1
2
3
4
5
6
7
8
<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
  <service name="MijnService" provider="java:RPC">
    <parameter name="className" value="MijnService" />
    <parameter name="allowedMethods" value="*" />
    <parameter name="scope" value="application" />
    <parameter name="enableRemoteAdmin" value="true" />
  </service>
</deployment>


De web.xml file heb ik overgenomen van de standaard file van axis met de volgende toevoeging:
code:
1
2
3
4
<servlet-mapping>
  <servlet-name>MijnService</servlet-name>
  <url-pattern>/services/MijnService</url-pattern>
</servlet-mapping>


MijnService.war wordt netjes gedeployed in de webapps map.
Echter als mijn client hem probeert aan te roepen via http://localhost/axis/services/MijnService dan krijg ik de volgende melding:
code:
1
org.apache.jasper.JasperException: The AXIS engine could not find a target service to invoke!  targetService is MijnService

En als mijn client 'm op http://localhost/services/MijnService aanroept dan krijg ik:
code:
1
org.apache.jasper.JasperException: (404)/services/MijnService


Dit laatste geldt ook als ik in web.xml de url-mapping naar /MijnService laat verwijzen.

Ik gebruik dus duidelijk geen .jws files...

Iemand een idee wat ik nog fout doe?

[ Voor 17% gewijzigd door Krooswijk.com op 27-06-2006 14:38 ]


  • matthijsln
  • Registratie: Augustus 2002
  • Laatst online: 15:48
Ik zie dat het stukje "Advanced Installation: adding Axis to your own Webapp" uit de installatieinstructies inderdaad nogal summier is. Hopelijk lukt het met de volgende aanwijzingen:

Je moet geen deploy.wsdd in de root plaatsen, maar een server-config.wsdd in de WEB-INF (haal deze uit de axis webapp). Hierin kan je het <service> element uit je deploy.wsdd invoegen (hierdoor zal axis je service meteen deployen zodat geen AdminClient meer nodig is).

Met /services/AxisServlet kan je kijken welke services gedeployed zijn en er WSDL voor genereren.

De index.jsp/happyaxis.jsp/i18nLib.jsp pagina's zijn ook wel even handig om aan de webapp toe te voegen.

  • Krooswijk.com
  • Registratie: Mei 2000
  • Laatst online: 17-08-2024
Wat je dus eigenlijk gewoon doet is een duplicaat maken van de axis-container met alleen je eigen service erin en de daarop aangepaste config bestanden...

Ok ik heb nu (voordat ik er een war van maak) de map MijnService in de webapps dir staan van tomcat. Dit is een kopie van de axis dir, met daarin alleen voor deze service de relevante bestanden en de config files aangepast. Mijn directory structuur binnen de map MijnService ziet er als volgt uit:
  • EchoHeaders.jws
  • fingerprint.jsp
  • happyaxis.jsp
  • i18nLib.jsp
  • index.html
  • index.jsp
  • SOAPMonitorApplet.java
  • WEB-INF
    • server-config.wsdd
    • users.lst
    • web.xml
    • classes
      • i18n.properties
      • i18n_ja.properties
      • service.properties
      • MijnService.class
      • MijnPackage
    • libs
      • alle benodigde .jar files
    • jwsClasses
      • EchoHeaders.class
Als ik nu via de tomcat manager naar MijnService ga dan kan ik netjes zien (bij list services) dat er maar 1 service draait, met de bijbehorende functies die aangeboden worden. Dit klopt dus. Echter bij het opvragen van de wsdl geeft hij de volgende melding:
code:
1
javax.servlet.ServletException: Class MijnService is not a Servlet

Ik vermoed dat er nog ergens een instelling fout is in een van de twee config files:
web.xml of server-config.wsdd

Ziet iemand wat er misgaat, ik zie het inmiddels echt niet meer...

[ Voor 85% gewijzigd door Krooswijk.com op 28-06-2006 14:34 ]


  • matthijsln
  • Registratie: Augustus 2002
  • Laatst online: 15:48
Krooswijk.com schreef op woensdag 28 juni 2006 @ 12:26:
Wat je dus eigenlijk gewoon doet is een duplicaat maken van de axis-container met alleen je eigen service erin en de daarop aangepaste config bestanden...
Eigenlijk wel ja, het was misschien wat helderder geweest had ik dit meteen gezegd :)
...
Als ik nu via de tomcat manager naar MijnService ga dan kan ik netjes zien (bij list services) dat er maar 1 service draait, met de bijbehorende functies die aangeboden worden. Dit klopt dus. Echter bij het opvragen van de wsdl geeft hij de volgende melding:
code:
1
javax.servlet.ServletException: Class MijnService is not a Servlet
Probeer het eens zonder je MijnService servlet en servlet-mapping. Je schrijft een webservice, niet een servlet :)

  • Krooswijk.com
  • Registratie: Mei 2000
  • Laatst online: 17-08-2024
ik had 'm inderdaad door, in ieder geval superbedankt _/-\o_
zou jij deze files laten staan in de productie omgeving:
  • i18nLib.jsp
  • index.html
  • index.jsp
    ...
  • en alles andere class files die met de soapmonitor te maken hebben
of zijn deze alleen bij development handig
Pagina: 1