Domino 9 und frühere Versionen > ND8: Entwicklung

Fehler "White spaces are required between publicId and systemId"

(1/2) > >>

Ruedi:
Ich bin Web Service Anfänger und habe eben mit LS meinen ersten einfachen Web Service Provider erstellt. So einfach, dass er nur gerade "Hello World" + den effektiven Usernamen zurückgibt. Im Service habe ich "Run as web user" selektiert. Rufe ich den Service im Web Services Explorer von Eclipse auf, entspricht das Ergebnis durchaus meinen Vorstellungen (vgl. Screenshot).

Allerdings nur dann, wenn Anonymous Lesezugriff auf den Web Service hat. Ohne Zugriff erhalte ich die Fehlermeldung "White spaces are required between publicId and systemId". Die gleiche Meldung, wenn die DB auf einem Server liegt, der SSL-Verschlüsselung verlangt.

Was kann/muss ich vorkehren, damit ich mit gegenüber dem Web Service authentifizieren kann (ich nehme mal an, dass dies der Grund des Fehlers ist)? Oder ganz allgemein gefragt: wie müsste mein LS-Code aussehen, damit ich meinen Web Service konsumieren kann?

Vielen Dank für alle wohlwollenden und nachsichtigen Antworten
Ruedi

Tim Pistor:
Hallo Ruedi,

Dim ws As New exampleOne
Call ws.Setcredentials("user", "password")
Call ws.machWas()

Gruß Tim

Ruedi:
Hallo Tim

Danke für deine Antwort. Für mich Web Service Anfänger ist sie allerdings etwas gar kurz ausgefallen. Deshalb ein paar Rückfragen:

- Ist "exampleOne" der Name eines Web Service Consumer, der auf dem WSDL-File des Web Service Providers basiert?
- "machWas()" wäre dann folglich eine Methode dieses Services?

Entweder sind diese Annahmen nicht ganz richtig oder ich mache sonst Fehler. Ich habe aus dem Web Service Provider die WSDL-Datei exportiert und diese in einen neuen Web Service Consumer importiert:

%INCLUDE "lsxsd.lss"
Class HelloClass As PortTypeBase
   
   Sub NEW
      Call Service.Initialize ("UrnDefaultNamespaceHelloClassService", _
      "HelloClassService.Domino", "http://localhost", _
      "HelloClass")
      
   End Sub
   
   Function HELLOFUNCTION() As String
      Let HELLOFUNCTION = Service.Invoke("HELLOFUNCTION")
   End Function
   
End Class

Dann habe ich den folgenden LS-Agenten erstellt.

Option Public
Option Declare

Use "HelloServiceConsumer"

Sub Initialize
   Dim ws As New HelloClass
   Call ws.Hellofunction()
End Sub

Das Ergebnis des Aufrufs ist allerdings ernüchternd: "Web Service HelloClass method HELLOFUNCTION error (404) Not found". Bin ich meilenweit oder nur ein paar Meter vom Ziel weg?

Gruss
Ruedi

Mitch:
Hey Ruedi,

Achtung, ganz unqualifiziert, da ich auch gerade erstmalig mit Webservices experimentiere.

Ich habe in meinem Test-Skript noch das hier stehen, um den Pfad zum Webservice zu setzen:

--- Code: ---ws.SetEndPoint("http://subdomain.example.com/Path/database.nsf/WebService")

--- Ende Code ---

Vielleicht hilft das ja schon.

Gruß,

Mitch

Edit: Ich habe dieses schöne PDF zum Thema Webservices von WernerMo und Tim Pistor verwendet, sehr hilfreich: http://www.entwicklercamp.de/konferenz/ent2010.nsf/bc36cf8d512621e0c1256f870073e627/ab8fbbcda27d61b9c1257662004cf93f/$FILE/T2S8-Webservices.pdf

Ruedi:
Hallo Mitch

Bingo! So funktionierts. Vielen Dank.

Ich muss also entwder im Web Service Consumer den Paramter "http://localhost" durch die URL des Web Services ersetzen oder eben - viel besser - die URL mit ws.SetEndPoint setzen.

Also einen Schritt weiter. Das nächste Problem lauert sicher schon ...

Gruss
Ruedi

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln