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?
Bedoel je op deze manier: http://ws.apache.org/axis/java/install.html?
Eerste hit bij google: webservices in war tomcat
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!'
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.
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 ]
Weet iemand dit toevallig? Ik kan er nog steeds niks goeds over vinden...
Ja het is mogelijk, op de manier die in de link van Nick_S beschreven staat...
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...
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.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...
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.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.
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...
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.
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?
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 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...
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.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.
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:
De web.xml file heb ik overgenomen van de standaard file van axis met de volgende toevoeging:
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:
En als mijn client 'm op http://localhost/services/MijnService aanroept dan krijg ik:
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?
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
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 ]
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.
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.
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:
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...
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
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 ]
Eigenlijk wel ja, het was misschien wat helderder geweest had ik dit meteen gezegdKrooswijk.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...
Probeer het eens zonder je MijnService servlet en servlet-mapping. Je schrijft een webservice, niet een servlet...
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 had 'm inderdaad door, in ieder geval superbedankt 
zou jij deze files laten staan in de productie omgeving:
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
Pagina: 1