Avatar billede decrypto Nybegynder
30. marts 2006 - 21:51 Der er 43 kommentarer

Jeg har fået en opgave om webservices i Java

Opgaven lyder:

Create a web service. The web service must take some kind of meaningful input, and return some meaningful result.
The deliverable must include design considerations, approach for creating the web service, and relevant thoughts interoperability.

Jeg har spekuleret meget over, hvilken slags webservice jeg skal lave, men jeg kan ikke komme på nogle gode ideer.

Det skal jo helst være noget simpelt og ikke alt for indviklet.

Er der nogen derude, der kan give et godt eksempel på en simpelt webservice. Der skal naturligvis ligeledes være et xsd på det.
Avatar billede jakoba Nybegynder
30. marts 2006 - 21:59 #1
Du kunne fx lave en 'oversætter' hvor folk kan indtaste temperaturen i Fahrenheit og få den tilbage i Celcius eller Kelvin. Det er en supersimpel service så du kan fokusere på det med web der ser ud til at være hovedvægten i opgaven. Hvis der så er tid til overs kan du evt udvide med andre konverteringer meter/yard/inch/foot/sømil, osv
Avatar billede decrypto Nybegynder
30. marts 2006 - 22:01 #2
Ok, lyder som en god og simpel webservice. Men der er også et krav om at der skal være et schema til webservicen. Hvordan kommer det ind i billedet?
Avatar billede arne_v Ekspert
30. marts 2006 - 22:02 #3
en web service er jo grundliggende bare en klasse med nogle metoder

i.s.f. at kalde de metoder inde i samme JVM kan du kalde de metoder
fra en computer paa de anden side af jorden

men hvad metoderne skal goere er jo det samme
Avatar billede decrypto Nybegynder
30. marts 2006 - 22:04 #4
Jeg har fundet en formel på en skummel side:

To convert Fahrenheit to Celsius, subtract 32 degrees and divide by 1.8. To convert Celsius to Fahrenheit, multiply by 1.8 and add 32 degrees.
Avatar billede decrypto Nybegynder
30. marts 2006 - 22:07 #5
Jeg ved hvordan man bruger webservices, og har kodet en ultra simpelt een. Jeg kunne bare ikke finde en god ide til en webservice, der kunne give mening.

Men jeg skal lave en webservice, hvortil der skal være et xsd. Er det noget NetBeans 5.0 selv kan finde ud af at generere?
Avatar billede arne_v Ekspert
30. marts 2006 - 22:07 #6
Avatar billede jakoba Nybegynder
30. marts 2006 - 22:08 #7
et 'schema'?  Nu snakker du vist om designmetodik. Det aner jeg intet om (det ændrer sig fra år til år), men er det ikke netop den slags du skal vise at du har lært på kurset.
Avatar billede arne_v Ekspert
30. marts 2006 - 22:12 #8
XSD ????

mener du WSDL ?
Avatar billede decrypto Nybegynder
30. marts 2006 - 22:31 #9
Yes WSDL, men det laver NetBeans vist selv bag om en ikk? Jeg prøver mig frem...
Avatar billede decrypto Nybegynder
30. marts 2006 - 22:39 #10
Anden del af opgaven er:
Implement a client of the web service created in 1a.

Det vel bare en anden application, invoker min webservice, ikk?
Avatar billede arne_v Ekspert
30. marts 2006 - 22:46 #11
dit web service toolkit (formentligt JWSDP eller Axis) kan generere en WSDL
udfra din kode

du kan uden tvivl se den og save den fra din browser
Avatar billede decrypto Nybegynder
30. marts 2006 - 22:48 #12
Jeg bruger Sun Java Application Server og NetBeans IDE 5.0.

Jeg har fået lavet en simpel webservice:


package org.me.ws;


/**
* This is the implementation bean class for the ConversionService web service.
* Created 2006-03-27 22:34:59
* @author dc
*/
public class ConversionServiceImpl implements ConversionServiceSEI {
   
    private double celcius;
    private double fahrenheit;
    private double result;
   
    // Enter web service operations here. (Popup menu: Web Service->Add Operation)
    /**
    * Web service operation
    */
    public double doConvertFahrenheitToCelcius(double Fahrenheit) throws java.rmi.RemoteException {
        // To convert Fahrenheit to Celsius, subtract 32 degrees and divide by 1.8.
       
        this.fahrenheit = fahrenheit;
        this.result = (this.fahrenheit-32)/1.8;
       
        return result;
    }

    /**
    * Web service operation
    */
    public java.lang.String doConvertCelciusToFahrenheit(double celcius) throws java.rmi.RemoteException {
        // To convert Celsius to Fahrenheit, multiply by 1.8 and add 32 degrees.
       
        this.celcius = celcius;
        this.result = (this.celcius * 1.8) + 32;
               
        return null;
    }
   
}
Avatar billede decrypto Nybegynder
30. marts 2006 - 22:50 #13
Jeg har builded mit projekt...

Skal jeg lave en klient applikation, der gør brug af min webservice? Er det først i den anledning en klient bruger webservicen, at en WSDL fil bliver genereret?
Avatar billede arne_v Ekspert
30. marts 2006 - 22:51 #14
ja

dit web service toolkit (som sikkert kan kaldes fra din IDE) kan generere
noget stub kode, saa det ligner et normalt metode kald
Avatar billede decrypto Nybegynder
30. marts 2006 - 22:54 #15
I VS .Net kan lave en reference til en webservice. Jeg må lige finde ud af, hvordan jeg gør det i NetBeans 5.0
Avatar billede decrypto Nybegynder
30. marts 2006 - 22:57 #16
Jeg har fundet ud af at man kan lave en Web Service Client, men her skal man udpege en WSDL fil lokalt, eller en URL. Jeg har ikke nogen WSDL fil endnu. Jeg kigger lige videre...
Avatar billede decrypto Nybegynder
30. marts 2006 - 23:02 #17
Yes efter deployment kan jeg se en wsdl fil genereret udfra min webservice.
<?xml version="1.0" encoding="UTF-8" ?>
- <definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="urn:ConversionService/wsdl" xmlns:ns2="urn:ConversionService/types" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" name="ConversionService" targetNamespace="urn:ConversionService/wsdl">
- <types>
- <schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:tns="urn:ConversionService/types" xmlns:soap11-enc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" targetNamespace="urn:ConversionService/types">
- <complexType name="doConvertCelciusToFahrenheit">
- <sequence>
  <element name="double_1" type="double" />
  </sequence>
  </complexType>
- <complexType name="doConvertCelciusToFahrenheitResponse">
- <sequence>
  <element name="result" type="string" nillable="true" />
  </sequence>
  </complexType>
- <complexType name="doConvertFahrenheitToCelcius">
- <sequence>
  <element name="double_1" type="double" />
  </sequence>
  </complexType>
- <complexType name="doConvertFahrenheitToCelciusResponse">
- <sequence>
  <element name="result" type="double" />
  </sequence>
  </complexType>
  <element name="doConvertCelciusToFahrenheit" type="tns:doConvertCelciusToFahrenheit" />
  <element name="doConvertCelciusToFahrenheitResponse" type="tns:doConvertCelciusToFahrenheitResponse" />
  <element name="doConvertFahrenheitToCelcius" type="tns:doConvertFahrenheitToCelcius" />
  <element name="doConvertFahrenheitToCelciusResponse" type="tns:doConvertFahrenheitToCelciusResponse" />
  </schema>
  </types>
- <message name="ConversionServiceSEI_doConvertCelciusToFahrenheit">
  <part name="parameters" element="ns2:doConvertCelciusToFahrenheit" />
  </message>
- <message name="ConversionServiceSEI_doConvertCelciusToFahrenheitResponse">
  <part name="result" element="ns2:doConvertCelciusToFahrenheitResponse" />
  </message>
- <message name="ConversionServiceSEI_doConvertFahrenheitToCelcius">
  <part name="parameters" element="ns2:doConvertFahrenheitToCelcius" />
  </message>
- <message name="ConversionServiceSEI_doConvertFahrenheitToCelciusResponse">
  <part name="result" element="ns2:doConvertFahrenheitToCelciusResponse" />
  </message>
- <portType name="ConversionServiceSEI">
- <operation name="doConvertCelciusToFahrenheit">
  <input message="tns:ConversionServiceSEI_doConvertCelciusToFahrenheit" />
  <output message="tns:ConversionServiceSEI_doConvertCelciusToFahrenheitResponse" />
  </operation>
- <operation name="doConvertFahrenheitToCelcius">
  <input message="tns:ConversionServiceSEI_doConvertFahrenheitToCelcius" />
  <output message="tns:ConversionServiceSEI_doConvertFahrenheitToCelciusResponse" />
  </operation>
  </portType>
- <binding name="ConversionServiceSEIBinding" type="tns:ConversionServiceSEI">
  <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" />
- <operation name="doConvertCelciusToFahrenheit">
  <soap:operation soapAction="" />
- <input>
  <soap:body use="literal" />
  </input>
- <output>
  <soap:body use="literal" />
  </output>
  </operation>
- <operation name="doConvertFahrenheitToCelcius">
  <soap:operation soapAction="" />
- <input>
  <soap:body use="literal" />
  </input>
- <output>
  <soap:body use="literal" />
  </output>
  </operation>
  </binding>
- <service name="ConversionService">
- <port name="ConversionServiceSEIPort" binding="tns:ConversionServiceSEIBinding">
  <soap:address location="http://client09.twins.local:8080/CourseworkII/ConversionService" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" />
  </port>
  </service>
  </definitions>
Avatar billede decrypto Nybegynder
30. marts 2006 - 23:04 #18
Nu skal jeg bare bruge den....i en klient....jeg behøver vel ikke at lave et nyt projekt...  jeg kan vel bare lave en klasse i det samme projekt, der kalder min webservice via http, selvom webservices ligger i samme projekt, ikk?
Avatar billede arne_v Ekspert
30. marts 2006 - 23:04 #19
jep - WSDL genereres paa server - og client stub genererers ydfra den

helt ligesom ASP.NET web services
Avatar billede arne_v Ekspert
30. marts 2006 - 23:17 #20
jeg ville lave client og server i 2 forskellige projekter

men jeg bruger ikke NetBeans
Avatar billede decrypto Nybegynder
30. marts 2006 - 23:28 #21
Okay laver to forsk. projekter.
Avatar billede decrypto Nybegynder
30. marts 2006 - 23:31 #22
Noget af min opgave går ud på at teste webservícen.

Robustly test the service implemented.

Har du forslag til hvordan man kunne gøre det. Jeg tænkte at køre en løkke  der kalder webservicen, og så måle performance på den fra en anden klient... eller hva?
Avatar billede decrypto Nybegynder
31. marts 2006 - 00:18 #23
Nu har jeg fået lavet et klient projekt, hvortil jeg har suuccesfuldt har fået referencen til min webservice.

Jeg har yderligere lavet en java klasse, hvori jeg vil bruge webservicen, men hvordan kan jeg få fat i den i min klasse. I hvilket namespace eller package ligger den i. Er der noget der ved lidt om det`?
Avatar billede arne_v Ekspert
31. marts 2006 - 00:22 #24
functional test via JUnit

og en performance test som jeg nok ville haandkode

men den skal naturligvis vaere multithreadet !
Avatar billede decrypto Nybegynder
31. marts 2006 - 00:24 #25
I hvilket namespace ligger min Webservice Client?
Avatar billede arne_v Ekspert
31. marts 2006 - 00:31 #26
kig i koden

man kan faktisk angive en mapning naar man genererer stubben

men start med at snyde og kig i den genererede kode
Avatar billede decrypto Nybegynder
02. april 2006 - 14:10 #27
Jeg fandt ud af det, og fik det til at virke....Jeg forsøger lige nu implementere doGoogleSearch funktionaliteten på en ny side.

Men jeg har problemer... jeg har uden prolemer kunne kalde webservicen, men hvordan looper jeg igennem resultatet af det jeg får tilbage????
Avatar billede arne_v Ekspert
02. april 2006 - 17:14 #28
hvad får du tilbage ? (data type)
Avatar billede decrypto Nybegynder
02. april 2006 - 20:23 #29
Jeg fik det til at virke....det var et array jeg fik tilbage...
Avatar billede decrypto Nybegynder
02. april 2006 - 20:24 #30
Hvordan laver jeg en functional test via JUnit???? Det er nemlig det eneste jeg mangler at foretage på mine egne webservices
Avatar billede decrypto Nybegynder
02. april 2006 - 20:34 #31
Og hvordan laver an en multithreaded test. Jeg har lavet en performance test vha. af en løkke der kalder min webservice 1000 gange, men det var i samme thread.
Avatar billede arne_v Ekspert
02. april 2006 - 21:38 #32
kender du JUnit ?

hvis nej så læs http://www.eksperten.dk/artikler/81
Avatar billede arne_v Ekspert
02. april 2006 - 21:38 #33
(web service kald kan testes ligesom almindelige kald)
Avatar billede arne_v Ekspert
02. april 2006 - 21:42 #34
du laver en klasse som extender Thread kalder din web service 1000 gange i run metoden

så laver du 25 eller 50 af de objekter og kalder start på dem

og joiner dem til sidste

se evt. http://www.eksperten.dk/artikler/27 T3 klassen main metoden
Avatar billede decrypto Nybegynder
02. april 2006 - 23:02 #35
Ok prøver mig frem i morgen eller Onsdag aften :o)
Avatar billede decrypto Nybegynder
02. april 2006 - 23:03 #36
Jeg skal nemlig aflevere opgaven på Torsdag :-)
Avatar billede decrypto Nybegynder
09. april 2006 - 22:07 #37
Jeg har læst din udemærkede artikel om JUnit, men jeg kan ikke finde ud af, hvordan jeg kan bruge assertEquals metode i min test klasse. Den siger 'Cannot finde symbol'...
Avatar billede decrypto Nybegynder
09. april 2006 - 22:10 #38
Er der noget yderligere jeg skal importere end import junit.framework.*;???
Avatar billede decrypto Nybegynder
09. april 2006 - 22:13 #39
Her lidt kode, hvad ser forkert ud???

    public void testDoConvertFahrenHeitToCelcius() throws Exception {
        ConversionServiceImpl a = new ConversionServiceImpl();
        double expectedResult = 104;
        assertEquals(result, a.doConvertFahrenHeitToCelcius(104.0));
    }
Avatar billede decrypto Nybegynder
09. april 2006 - 22:14 #40
Det var en forkert copy paste prøver igen....

Hvad ser forkert ud her???

    public void testDoConvertFahrenHeitToCelcius() throws Exception {
        ConversionServiceImpl a = new ConversionServiceImpl();
        double expectedResult = 104;
        assertEquals(expectedResult, a.doConvertFahrenHeitToCelcius(104.0));
    }
Avatar billede arne_v Ekspert
10. april 2006 - 00:14 #41
Jeg kan se at Erik har besvaret dit separate spørgsmål
Avatar billede arne_v Ekspert
22. april 2006 - 21:28 #42
hvordan gik det så med opgaven ?
Avatar billede arne_v Ekspert
19. juni 2006 - 01:55 #43
??
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