[Java] Opzetten Webservice

Pagina: 1
Acties:
  • 194 views sinds 30-01-2008
  • Reageer

  • Krooswijk.com
  • Registratie: Mei 2000
  • Laatst online: 17-08-2024
Hallo, ik wil een webservice opzetten die als zoekmachine moet dienen. Als front-end wil ik een JSP pagina hebben die de query van de gebruiker opvangt en als soap bericht naar de webservice stuurt. deze leest dit bericht, gaat resultaten zoeken en stuurt een soap bericht terug met resultaten.

Ik ben aan de frontend kant begonnen en heb tomcat 5.5 geinstalleerd en een zoekpagina in JSP gemaakt. Voordat ik aan communicatieberichten kan beginnen moet ik natuurlijk eerst de webservice opzetten. Hiervoor heb ik de Java Web Services Developer Pack (JWSDP) gedownload. Echter via de site van Sun kom ik ook op een aparte tomcat versie hiervoor: "tomcat50-jwsdp"

Nu wil ik weten. Kan de nieuwste 5.5 ook gewoon hiervoor dienst doen? Of is "tomcat50-jwsdp" hiervoor speciaal gemaakt?

Ik heb al veel gelezen over wat ik wil, en dat is inmiddels wel duidelijk. Maar over de opzet van alle vereiste software vind ik niet echt iets overzichtelijks. Heeft iemand hier nog tips voor of een link. Mijns inziens heb ik alleen tomcat (JSP) en JWSDP nodig om het werkende te krijgen. Zijn er misschien hele duidelijke tutorials te vinden die aan de hand van deze specifieke (geen .net ofzo) software een voorbeeld geven. Bvd.

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

Confusion

Fallen from grace

http://www.coreservlets.com/
Te lelijk voor woorden die site, maar wel wat je zoekt. Overigens kan je ook naar Eclipse met de Webtools plugins kijken: http://www.coreservlets.com/. Er is een all-in-one package te downloaden.

[ Voor 78% gewijzigd door Confusion op 20-02-2006 21:33 ]

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


  • -FoX-
  • Registratie: Januari 2002
  • Niet online

-FoX-

Carpe Diem!

Kijk eens naar de SOAP implementatie van Apache Axis.
Hiermee kan je snel en gemakkelijk webservice opzetten in samenwerking met Tomcat.

Je plaatst de axis-library dan gewoon in je lib folder van je applicatie en je neemt volgende op in je web.xml
XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<!-- AXIS SERVLET SPECIFICATION -->
    <servlet>
        <servlet-name>AxisServlet</servlet-name>
        <display-name>Apache-Axis Servlet</display-name>
        <servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class>
    </servlet>

    <servlet>
        <servlet-name>AdminServlet</servlet-name>
        <display-name>Axis Admin Servlet</display-name>
        <servlet-class>org.apache.axis.transport.http.AdminServlet</servlet-class>
        <load-on-startup>100</load-on-startup>
    </servlet>
    <!-- END: AXIS SERVLET SPECIFICATION -->

    <!-- AXIS SERVLET MAPPINGS -->
    <servlet-mapping>
        <servlet-name>AxisServlet</servlet-name>
        <url-pattern>/servlet/AxisServlet</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>AxisServlet</servlet-name>
        <url-pattern>*.jws</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>AxisServlet</servlet-name>
        <url-pattern>/services/*</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>AdminServlet</servlet-name>
        <url-pattern>/servlet/AdminServlet</url-pattern>
    </servlet-mapping>
    <!-- END: AXIS SERVLET MAPPINGS -->


Verder creëer je gewoon een plain java class, maar deze geef je de .jws als extentie (ipv .java):
Java:
1
2
3
4
public class Hello{
  public String sayHello(String name) {
    return "Hello " + name + ", how are you doing?";
  }

Deze kopieer je dan simpelweg naar je webapp directory. Axis zal deze file herkennen, deze compileren en converteren naar SOAP zodat je java class de webservice representeert.

Klaar ;)

  • Stephan Oudmaijer
  • Registratie: Oktober 2000
  • Laatst online: 16-08-2023
Apache Axis(2) is erg rolex...

http://ws.apache.org/axis2

zoek eens op javaworld.com voor tutorials over axis... staat zat.

Spring WS support is nog niet echt af...

Verwijderd

CK schreef op dinsdag 21 februari 2006 @ 10:44:
Apache Axis(2) is erg rolex...

http://ws.apache.org/axis2

zoek eens op javaworld.com voor tutorials over axis... staat zat.

Spring WS support is nog niet echt af...
maar die van xfire heeft zijn eerste RC uitgebracht. En werkt samen met Spring..
Als je reeds Spring gebruikt loont het de moeite daar even naar te kijken lijkt me. Er staat een tutorial op de wiki van appfuse.

  • jAnO!
  • Registratie: Januari 2002
  • Laatst online: 18-03 09:04

jAnO!

lalalavanillevla

When some people work at a place for ten years they get ten years of experience, other people work at a place for ten years and get one year of experience ten times.


  • Krooswijk.com
  • Registratie: Mei 2000
  • Laatst online: 17-08-2024
Een update:

Ik heb gekozen om vooralsnog met Axis 1.3 te beginnen. Het gaat om een windows xp machine met java jdk1.5.0_06. Ik heb de instructies van http://ws.apache.org/axis/java/install.html gevolgd. Tomcat draait in c:\tomcat\. In c:\tomcat\webapps heb ik de axis map uit de distributie neergezet en in c:\tomcat\webapps\axis\WEB-INF\lib alle benodigde libraries. Alles werkt naar behoren, de startpagina wordt weergeven en de Axis Happiness Page geeft geen foutmeldingen.

Nu wil ik zelf een eigen voorbeeld class testen. B.v deze van JavaBoutique:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import java.util.*;

public class NHLService
{
    HashMap standings = new HashMap( );

    public NHLService( )
    {
        standings.put( "atlantic/philadelphia", "1" );
        standings.put( "atlantic/ny islanders", "2" );
        standings.put( "atlantic/new jersey",   "3" );
        standings.put( "central/detroit",       "1" );
        standings.put( "central/st.louis",      "2" );
        standings.put( "central/chicago",       "3" );
    }

    public String getCurrentPosition( String division, String team )
    {
        String p = (String)standings.get( division + '/' + team );
        return ( p == null ) ? "Team not found" : p;
    }
}
}

Deze staat als "NHLService.jws in mijn axis root en hiervan kan netjes de wsdl file worden bekeken via de internet browser.

Nu heb ik in een eclipse een eenvoudig programmaatje gemaakt die de webservice aanroept:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import javax.xml.namespace.QName;

import java.net.*;

public class NHLServiceClient
{
    public static void main(String [] args) throws Exception
    {
        Service service = new Service( );
        Call call = (Call)service.createCall( );

        String endpoint = "http://localhost:8080/axis/NHLService.jws";
        call.setTargetEndpointAddress( new URL( endpoint ) );
        call.setOperationName( new QName( "getCurrentPosition" ) );

        String division = args[0];
        String team = args[1];
        String position = (String)call.invoke( new Object [] {new String( division ), new String( team ) } );

        System.out.println( "Position of " + team + " in " + division + " division: " + position );
    }
}


Output:

Alles werkt nu, als ik in Eclipse de client run met parameters (central en chicago), dan komt er in het output scherm netje de output (Position of chicago in central division: 3) te staan. Echter heb ik het dan wel gerunt als SWT application en niet als Java Application. Anders krijg ik de volgende error, welke ik ook krijg ik als ik vanaf de commandline 'java NHLServiceClient' aanroep:
code:
1
2
java.lang.NoClassDefFoundError: NHLServiceClient
Exception in thread "main"


Weet iemand waar dit aankan liggen?

Andere vragen:
  • Ik lijk op de goeie weg te zijn nu, maar ik heb de deployment stap nog niet gedaan in axis. Is deze echt nodig?
  • Daarnaast wilde ik nog vragen of iemand mij de volgende verschillen eens uit kan leggen:
    Wat is JWSDK tov Axis? Wat is het verschil tussen WSDL en WSDD? Wat houdt Ant in en heb ik dit nodig? Zoals jullie wel zien raak ik door de vele termen het overzicht een beetje kwijt.

[ Voor 89% gewijzigd door Krooswijk.com op 22-02-2006 16:14 ]


  • bloody
  • Registratie: Juni 1999
  • Laatst online: 22:56

bloody

0.000 KB!!

Anders krijg ik de volgende error, welke ik ook krijg ik als ik vanaf de commandline 'java NHLServiceClient' aanroep:
code:
1
2
java.lang.NoClassDefFoundError: NHLServiceClient
Exception in thread "main"
Ziet er uit als een simpel classpath probleem. Bekijk je packagestructuur in eclipse even en check of deze overeenkomen met je java programmaatje.
Ik lijk op de goeie weg te zijn nu, maar ik heb de deployment stap nog niet gedaan in axis. Is deze echt nodig?
Wat is JWSDK tov Axis? Wat is het verschil tussen WSDL en WSDD? Wat houdt Ant in en heb ik dit nodig?
Er zijn verschillende manieren om een webservice te deployen:
  • Jij hebt het op de jws manier gedaan (gewoon een java file die je renamed naar jws). Axis pikt deze file op en maakt daar direct een WSDL van zodat clients direct een kloppende wsdl file kunnen downloaden (wsdl -> xml document die je webservice exact beschrijft, zie http://www.w3.org/TR/wsdl
  • Een wat gevorderdere manier is het deployen via een WSDD (deployment descriptor). Deze beschrijft hoe je webservice gedeployed dient te worden (welke provider, welke methoden zijn beschikbaar enz). Het is het handigst om deze via ANT te deployen (ANT is een buildtool). Je kunt deze ook via de axisClient deployen; zie hiervoor ook http://ws.apache.org/axis...DeploymentIntroducingWSDD <br/>Uiteraard maakt axis na het deployen op deze manier ook een wsdl aan.

nope


  • Krooswijk.com
  • Registratie: Mei 2000
  • Laatst online: 17-08-2024
Ok bedankt voor de uitleg: WSDD en WSDL zijn niet vergelijkbaar dus qua functionaliteit. Helder.
Verder is het classpath probleem ook verholpen, echter nu het volgende:

De volgende deployment descriptor heb ik aangemaakt; soccer-deploy.wsdd:
code:
1
2
3
4
5
6
7
<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
  <service name="SoccerService" provider="java:RPC">
    <parameter name="className" value="soccer.SoccerService" />
    <parameter name="allowedMethods" value="*" />
    <parameter name="scope" value="session" />
  </service>
</deployment>


Na uitvoering van
code:
1
2
3
4
5
6
C:\Program Files\Java\jdk1.5.0_06\bin>java org.apache.axis.client.AdminClient %AXIS_HOME%/soccer-deploy.wsdd

output:

Processing file C:\tomcat\webapps\axis/soccer-deploy.wsdd
<Admin>Done processing</Admin>


Waardoor dus
code:
1
2
3
4
5
<service name="SoccerService" provider="java:RPC">
  <parameter name="className" value="soccer.SoccerService"/>
  <parameter name="allowedMethods" value="*"/>
  <parameter name="scope" value="session"/>
</service>
aan de server-config.wsdd file is toegevoegd.

Dit lijkt goed te gaan, alleen als ik nu in mijn client niet:
http://localhost:8080/axis/SoccerService/jws
maar:
http://localhost:8080/axis/services/SoccerService
als end-point gebruik om gegevens op te vragen werkt dit niet:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
Exception in thread "main" AxisFault
 faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.generalException
 faultSubcode: 
 faultString: java.lang.NoClassDefFoundError: soccer/SoccerService (wrong name: SoccerService); nested exception is: 
    java.lang.NoClassDefFoundError: soccer/SoccerService (wrong name: SoccerService)
 faultActor: 
 faultNode: 
 faultDetail: 
    {http://xml.apache.org/axis/}hostname:CMP-309

java.lang.NoClassDefFoundError: soccer/SoccerService (wrong name: SoccerService); nested exception is: 
    java.lang.NoClassDefFoundError: soccer/SoccerService (wrong name: SoccerService)
 ...


SoccerService.class staat in de map /axis/WEB-INF/classes/soccer
SoccerService.jws staat in de map /axis

Ook als http://127.0.0.1:8080/axis/servlet/AxisServlet bekijk, zie ik hier helemaal geen services meer staan, terwijl daar eerst sowieso wel de AdminService en Version service stonden.

Weet iemand waar dit aan kan liggen?

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


  • bloody
  • Registratie: Juni 1999
  • Laatst online: 22:56

bloody

0.000 KB!!

Gooi wel je soccerservice.jws eruit! Anders heb je 2 webservices met dezelfde naam.

nope


  • Krooswijk.com
  • Registratie: Mei 2000
  • Laatst online: 17-08-2024
Wat ik als laatste hierbboven zei is bij mij nog het probleem.
[quote]Krooswijk.com schreef op donderdag 23 februari 2006 @ 14:12:
Ook als http://127.0.0.1:8080/axis/servlet/AxisServlet bekijk, zie ik hier helemaal geen services meer staan, terwijl daar eerst sowieso wel de AdminService en Version service stonden.
Weet iemand waar dit aan kan liggen?[/quote]
Hij draait verder prima nu aanroepbaar vanuit een jsp pagina. Echter hij is undeployable. Weet iemand waar dit aan kan liggen? Ik had de SoccerService.jws inderdaad verwijderd, maar dus geen resultaat.


Blijkbaar als ik de SoccerService.class niet in de submap Soccer zette, maar gewoon in Classes plaatste, en dit ook aanpaste in de server-config.wsdd, doet ie het wel gewoon...

Mocht nog iemand weten waar dit aan kan liggen ben ik wel benieuwd...

[ Voor 19% gewijzigd door Krooswijk.com op 24-02-2006 16:45 ]


Verwijderd

Voor een project op de uni heb ik iets soortgelijks gedaan, hierbij dan gebruikmakend van het creeëren van de web service dmv twee WSDL-bestanden (voor twee web services). Deze environment moesten we gebruiken, en het werkte ook :) :


Step 1 - Install Java Development Kit
If you don’t have Java installed, download and install JDK 5.0 from the link below.
http://java.sun.com/j2se/1.5.0/download.jsp


Step 2 - Install Eclipse + Web tools plugin
Download the all-in-one WTP ZIP package from the link below (around 187 MB). Unzip the contents of the file to the directory in which you want to install Eclipse. This distribution includes the Eclipse IDE and the Web tools plugin (WTP).
http://www.eclipse.org/do...-in-one-sdk-1.0-win32.zip


Step 3 - Install the Tomcat 5.5 webserver
We use the Tomcat web server for hosting the web services. Download and unzip the tomcat core zip package (around 7MB) from the link below.
http://tomcat.apache.org/download-55.cgi#5.5.15


Step 4 - Configure the Tomcat webserver in Eclipse
Start Eclipse. Go to Windows --> Preferences --> Server --> Installed runtimes. Add a runtime, select Apache and Tomcat 5.5. Browse for the root of the unzipped Tomcat directory. After finishing this dialog, check the checkbox before the new runtime (to make it the default server on which our webservice will be deployed). Eclipse will create a ‘Servers’ project on the first execution of Tomcat. Do NOT delete this project, it contains configuration information of the Tomcat server. Go to Windows --> View --> Other --> Servers and add the 'Servers view'. It will pop-up on the lower dock and you can use it to start and stop the web server and publish projects.
Optional: On the Servers view double-click the Tomcat server, which opens a server configuration page. Uncheck “Run modules directly from workspace”. This enables the management pages of tomcat at http://localhost:8080. However, this disables the option to generate JSP client pages from Eclipse.


Step 5 - Try some of the web services tutorials
Tutorials can be found by following the link below.
http://www.eclipse.org/we...yresources.html#tutorials



Via tutorial "Creating a Top-Down Java Web Service Skeleton from a WSDL Document" maak je de meeste klassen aan, en via "Creating a Java Web Service Client" wordt er een proxy-klasse aangemaakt die ik zelf aangemaakt heb in de clientGUI.
Pagina: 1