Avatar billede dueholm Praktikant
25. juli 2007 - 21:40 Der er 9 kommentarer og
1 løsning

Hvordan opbygger jeg denne SOAP request?

Hej eksperter!

Jeg skal lave et java program der kan snakke med RKI's webservice. Jeg har aldrig programmeret op mod en webservice før og behøver noget hjælp.

På deres hjemmeside ( https://ws.rki.dk/person.asmx?op=SoegPersonRegistreringCpr ) har de skrevet hvordan SOAP request'en skal være udformet.
Det er også gengivet her:
**************************************
POST /person.asmx HTTP/1.1
Host: ws.rki.dk
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://webservices.rki.dk/SoegPersonRegistreringCpr"

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <SoegPersonRegistreringCpr xmlns="http://webservices.rki.dk/">
      <Brugernavn>string</Brugernavn>
      <Password>string</Password>
      <CPRnummer>string</CPRnummer>
    </SoegPersonRegistreringCpr>
  </soap:Body>
</soap:Envelope>
**************************************

Jeg har pt. et javaprogram der ser sådan ud:
**************************************
import javax.xml.soap.*;
import javax.xml.namespace.QName;
import javax.xml.soap.MimeHeaders;
import java.util.Iterator;
import java.net.URL;

public class RequestX {
    public static void main(String[] args) {
        try {
            SOAPConnectionFactory soapConnectionFactory = SOAPConnectionFactory.newInstance();
            SOAPConnection connection = soapConnectionFactory.createConnection();
   
            MessageFactory factory = MessageFactory.newInstance();
            SOAPMessage message = factory.createMessage();
           
            SOAPPart part = message.getSOAPPart();
            SOAPEnvelope env = part.getEnvelope();
            env.addNamespaceDeclaration("xsi","http://www.w3.org/2001/XMLSchema-instance");
            env.addNamespaceDeclaration("xsd","http://www.w3.org/2001/XMLSchema");
            env.addNamespaceDeclaration("soap","http://schemas.xmlsoap.org/soap/envelope/");
           
            MimeHeaders hd = message.getMimeHeaders();
              hd.addHeader("SOAPAction", "http://webservices.rki.dk/SoegPersonRegistreringCpr");       

            SOAPHeader header = message.getSOAPHeader();
            header.detachNode();
           
            SOAPBody body = message.getSOAPBody();
           
            QName bodyName = new QName("http://webservices.rki.dk", "SoegPersonRegistreringCpr");   
            SOAPBodyElement SoegPersonRegistreringCpr = body.addBodyElement(bodyName);                   
           
            QName childName = new QName("Brugernavn");           
            SOAPElement brugernavn = SoegPersonRegistreringCpr.addChildElement(childName);       
            brugernavn.addTextNode("Usertest");                                                                           
           
            childName = new QName("Password");                                                                       
            SOAPElement password = SoegPersonRegistreringCpr.addChildElement(childName);               
            password.addTextNode("passwordtest");                                                                       
           
            childName = new QName("CPRnummer");                                                                       
            SOAPElement cprnummer = SoegPersonRegistreringCpr.addChildElement(childName);               
            cprnummer.addTextNode("0123456789");                                                                   
           
            URL endpoint = new URL("https://ws.rki.dk/Person.asmx");                                           
           
            SOAPMessage response = connection.call(message, endpoint);
           
            connection.close();
           
            SOAPBody soapBody = response.getSOAPBody();

        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}
**************************************

Jeg ved at der er hul igennem - men jeg får at vide at brugeren ikke er godkendt. Og nej! Jeg har tjekket mit brugernavn og password - det virker både på hjemmesiden og i programmet soapUI.

Så for mig at se må problemet være at jeg ikke får bygget request'en ordentligt op.
Jeg synes ikke der er meget hjælp at hente på nettet så der er rimelig gode point at hente her... Kan I hjælpe mig?

/Kasper
Avatar billede arne_v Ekspert
25. juli 2007 - 22:08 #1
1)  Skal password evt. MD5 eller SHA1 hashes ?

2)  Var det ikke nemmere at bruge et web service toolkit og faa genereret en
    stub klasse ?
Avatar billede dueholm Praktikant
26. juli 2007 - 08:43 #2
Hej arne_v

Tak for din kommentar.
Ang. pkt. 1) Jeg har kopieret requesten ind som den står ovenfor og det virker fint. Jeg tror derfor ikke at kryptering er nødvendig - og gør den egentlig ikke det af sig selv i form af https-protokollen?

Ang. pkt. 2) Jeg tror ikke helt jeg er med på hvad du mener. Men web service toolkit lyder fancy. Hvor finder jeg evt. dette?
Avatar billede dueholm Praktikant
26. juli 2007 - 08:44 #3
Hej igen arne_v.

Tilføjelse til pkt. 1: Når jeg siger jeg har kopieret det ind så mener jeg i soapUI.
Avatar billede arne_v Ekspert
26. juli 2007 - 13:47 #4
Et meget brugt toolkit er Apache Axis (of efterfølgeren Axis2).
Avatar billede arne_v Ekspert
26. juli 2007 - 15:26 #5
HTTPS krypterer paa transport niveau.
Avatar billede arne_v Ekspert
26. juli 2007 - 15:31 #6
En maade at troubleshoote paa var at saette en sniffer mellem din PC og web servicen. Saa
checker du hvad der bliver sendt baade med det hvor det virker og med dit program.

Forskellen er jo saa interessant !
Avatar billede arne_v Ekspert
22. september 2007 - 21:42 #7
dueholm ??
Avatar billede dueholm Praktikant
18. august 2010 - 13:09 #8
Hej arne_v - jeg ved helt ærligt ikke hvorfor jeg ikke har gjort mere med denne tråd. Det er også så lang tid siden at jeg ikke kan huske hvordan og hvorledes det blev løst.
Hvis du poster et svar så giver jeg dig gerne point for dine kommentarer (og tålmodighed).
Avatar billede arne_v Ekspert
18. august 2010 - 18:59 #9
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

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