Avatar billede skovborg Nybegynder
21. oktober 2004 - 14:48 Der er 20 kommentarer og
1 løsning

webservice der modtager et xml

Hej alle
Jeg skal til at lave en webservice der står og venter på at der postes et xml dokument til den.
Jeg har ikke prøvet det før... derfor ved jeg ikke hvad de smarte ord er for sådan en service :)
Er der en af jer der har et eks. på hvordan jeg laver det eller en henvisning til et sted hvor jeg kan se hvordan jeg gør det??

Altså mit problem er at server 1 kaldet sender (poster) et xml dokument til server 2.

Med venlig hilsen
Morten Skovborg
Avatar billede arne_v Ekspert
21. oktober 2004 - 15:02 #1
Vil du lave en HTTP POST med en streng som indeholder XML og lade
din kode fortolke selve XML'en ?

Eller vil du lave en server med et API som kaldes og du udfører noget kode
(ligesom en RMI server) og hvor al XML håndteres af et web service toolkit
og din kode er helt normal kode ?
Avatar billede arne_v Ekspert
21. oktober 2004 - 15:03 #2
Med det sidste vil jeg anbefale dig at kigge på Apache Axis.

Læs eventuelt: http://www.eksperten.dk/artikler/159
Avatar billede skovborg Nybegynder
21. oktober 2004 - 15:59 #3
Jeg vil meget gerne lave den første

MVH
Morten
Avatar billede skovborg Nybegynder
21. oktober 2004 - 16:09 #4
Ups jeg skal naturligvis også kunne poste et xml dokument tilbage

Mvh
Morten Skovborg
Avatar billede arne_v Ekspert
21. oktober 2004 - 16:22 #5
Ganske almindelig servlet som bruger en XML parser på InputStreamen'en burde
kune gøre det.
Avatar billede arne_v Ekspert
21. oktober 2004 - 16:22 #6
Jeg kan godt prøve at bixe et eksempel.
Avatar billede skovborg Nybegynder
21. oktober 2004 - 16:23 #7
det ville gøre mig meget glad
Mvh Morten skovborg
Avatar billede skovborg Nybegynder
21. oktober 2004 - 16:24 #8
husk at lave det meget simpelt ;)
Ikke noget fancy
Mvh
Morten Skovborg
Avatar billede arne_v Ekspert
21. oktober 2004 - 17:45 #9
servlet:

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class VectorAddServlet extends HttpServlet {
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        PrintWriter pw = response.getWriter();
        pw.println("<elements>");
        try {
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            DocumentBuilder db = dbf.newDocumentBuilder();
            Document doc = db.parse(request.getInputStream());
            NodeList elements = doc.getElementsByTagName("element");
            for (int i = 0; i < elements.getLength(); i++) {
              Node element = elements.item(i);
              int val = Integer.parseInt(element.getFirstChild().getNodeValue());
              pw.println("  <element>" + Integer.toString(val + 1) + "</element>");
            }
        } catch (ParserConfigurationException e) {
        } catch (SAXException e) {
        }
        pw.println("</elements>");
    }
}
Avatar billede arne_v Ekspert
21. oktober 2004 - 17:45 #10
test program:


import java.net.*;
import java.io.*;

public class Test {
    public static void main(String[] args) {
        String input = "<elements>\n" +
                      "  <element>1</element>\n" +
                      "  <element>2</element>\n" +
                      "  <element>3</element>\n" +
                      "</elements>\n";
        String output = execute(input);
        System.out.println("Input:\n" + input);
        System.out.println("Output:\n" + output);
    }
    private static String execute(String input) {
        StringBuffer sb = new StringBuffer();
        try {
            URL url = new URL("http://localhost:8080/test/VectorAddServlet");
            HttpURLConnection con = (HttpURLConnection) url.openConnection();
            con.setRequestMethod("POST");
            con.setDoOutput(true);
            con.getOutputStream().write(input.getBytes());
            con.connect();
            if (con.getResponseCode() == HttpURLConnection.HTTP_OK) {
                InputStream is = con.getInputStream();
                byte[] b = new byte[1000];
                int n;
                while ((n = is.read(b)) >= 0) {
                    sb.append(new String(b, 0, n));
                }
                is.close();
            }
            con.disconnect();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return sb.toString();
    }
}
Avatar billede arne_v Ekspert
21. oktober 2004 - 17:45 #11
output:

Input:
<elements>
  <element>1</element>
  <element>2</element>
  <element>3</element>
</elements>

Output:
<elements>
  <element>2</element>
  <element>3</element>
  <element>4</element>
</elements>
Avatar billede arne_v Ekspert
21. oktober 2004 - 17:46 #12
Men jeg ved ikke rigtigt om jeg vil kalde det en web service.

Men der ryger et XML dokument frem og tilbage !
Avatar billede skovborg Nybegynder
21. oktober 2004 - 20:18 #13
Ok hvis jeg så skal bygge hele servlet'en ind i en html side der skal kaldes hvordan gør jeg så det??
Jeg må indrømme at jeg er ret doven, men jeg har ret travlt med at få det lavet.
Jeg skal benytte en micro$ server til at kører servlet'en fra er det muligt??

Mvh
Morten skovborg
Avatar billede Slettet bruger
21. oktober 2004 - 23:34 #14
"...Ok hvis jeg så skal bygge hele servlet'en ind i en html side der skal kaldes hvordan gør jeg så det??..."

Du skal ikke ha' integreret en servlet i en HTML-side, men ha' mappet en url til din Servlet, der er flere forskellige måder at gøre dette på, efter hvilken Servlet-container du vælger (dokumentationen til din Servlet-container vil være et godt sted at begynde at læse) - Hvis du bruger Apache Tomcat til at hoste Servletter i skal du rette i din web.xml konfigurationsfil... Igen, det varierer fra container til container.

"...Jeg skal benytte en micro$ server til at kører servlet'en fra er det muligt??..."

Det kommer an på hvad du mener med en micro$ server, hvis du mener en Server-udgave and Windows, så kan du sagtens installere en Tomcat herpå, som er fremragende til at hoste Servlets på (link til Apache Tomcat: http://jakarta.apache.org/tomcat/)

Ellers er der en artikel her der beskriver hvordan du hoster Servletter i IIS: http://www.javaworld.com/javaworld/jw-06-2000/jw-0616-iis.html

Håber du kan bruge det til noget.
Avatar billede arne_v Ekspert
22. oktober 2004 - 07:39 #15
HTML side ????

En Web Service er noget hvor et program kalder et program.

Man bruger ikke Web Services til browser og dermed ikke i HTML !

Du kan sagtens lave en HTML form med et text area som submitter
via POST action til ovenstående servlet.

Så kan brugeren paste noget XML ind og få noget XML tilbage.

Det har bare intet med web service at gøre.

Vær opmærksom på at rå XML ser "sjovt" ud i en browser. Du skal
bruge CSS eller XSLT for at gøre det "pænt".
Avatar billede skovborg Nybegynder
22. oktober 2004 - 12:58 #16
Ja, jeg kan godt se at jeg sluderede en del da jeg skrev det med html....
linket til javaworld virker ikke.
Kunne man ikke forestille sig at man kan sige at:
En webservice er en service (et program) der benytter http/https som socket lag og derfor faktisk kun er et program der lytter på port 8080

MVH
Morten skovborg
Avatar billede arne_v Ekspert
22. oktober 2004 - 13:07 #17
Web Services er det samme som Java RMI og .NET remoting (hvis du kender dem),
bare standardiseret (ved hjælp af XML) således at en Java client kan kalde
en .NET web service og omvendt
Avatar billede arne_v Ekspert
22. oktober 2004 - 13:09 #18
Normalt bruger web services HTTP eller HTTPS som transport og den XML man
sender mellem client og web service følger SOAP standarden og den XML som beskriver
web servicen følger WSDL standarden
Avatar billede skovborg Nybegynder
22. oktober 2004 - 14:12 #19
Jeg ved nok at jeg skal have skrevet det ud i pap ;( men er vi enige om at jeg faktisk kan lave et program der ikke benytter servlet, men blot sendet og modtager ved hjælp af HTTPS/HTTP?
Jeg er på vej hen for at købe en god bog om emnet, jeg tror jeg har brug for det :.)

Hvorfor kommer der ikke nogen svar her på siden... arne kom nu med et.

Vi ses
Morten skovborg
Avatar billede arne_v Ekspert
22. oktober 2004 - 14:52 #20
Nej - en web service laver i Java vil normnalt være en servlet.
Avatar billede arne_v Ekspert
22. oktober 2004 - 14:52 #21
svar
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