Zschimmer GmbH Impressum und Kontakt

Job Scheduler     Erste Seite   –   Konfiguration in XML

  XML     API     Register


logo

XML-Element  <web_service>     (Konfiguration)

<web_service
debug  = "yes|no"
forward_xslt_stylesheet  = "path" Zur Weiterleitung am Ende des Auftrags bzw. der Task
job_chain  = "job_chain" Jobkette, die Web-Service-Operationen ausführt
name  = "name" Name des Dienstes im Scheduler
request_xslt_stylesheet  = "path" Transformiert die Anforderung in ein Scheduler-Kommando
response_xslt_stylesheet  = "path" Transformiert die Antwort des Kommandos in die Antwort des Web-Dienstes
timeout  = "seconds" Frist
url_path  = "url_path" URL-Pfad, unter dem der Web-Dienst ansprechbar ist
>
<params ...>
Parameter zur freien Verwendung

</web_service>

 

Web-Dienste lassen sich einrichten, um Aufträge oder Tasks zu erzeugen. Die angenommene Anforderung wird sofort beantwortet. Das Ergebnis des Auftrags oder der Task kann zu einem anderen Web-Dienst weitergeleitet werden.

Der TCP-Port des HTTP-Servers wird mit <config tcp_port="…"> festgelegt.

Zwei Arten von Web-Services werden unterschieden:

Web-Service mit job_chain

Beispiel  

<web_service 
   name      = "my_web_service" 
   url_path  = "/web_service"
   job_chain = "web_service" 
   timeout   = "900"
/>

Ein HTTP-POST auf den URL-Pfad des Web-Dienstes lässt den Scheduler einen Auftrag erzeugen und ihn in die angegebene Jobkette einreihen. Die Jobs haben Zugriff auf die HTTP-Daten über Order.web_service_operation. Die HTTP-Anfrage wird mit Web_service_response.send() beantwortet.

Web-Service mit request_xslt_stylesheet

Beispiel  

<web_service 
   name                     = "my_web_service" 
   url_path                 = "/web_service"
   request_xslt_stylesheet  = "$SCHEDULER_DIR/web_service_request.xsl"
   response_xslt_stylesheet = "$SCHEDULER_DIR/web_service_response.xsl"
   forward_xslt_stylesheet  = "$SCHEDULER_DIR/web_service_forward.xsl"
/>

Ein HTTP-POST auf den URL-Pfad des Web-Dienstes löst folgende Schritte aus.

  1. Das mit HTTP-POST übergebene XML-Dokument packt der Scheduler in ein <service_request>.
    <service_request>
        <web_service name="service_name" url_path="url_path"/>
        <content>…xmldata…</content>
    </service_request>
  2. Das <service_request> wird mit dem Stylesheet request_xslt_stylesheet in ein XML-Kommando transformiert, in der Regel <add_order> oder <start_job>.
  3. Der Scheduler führt das XML-Kommando aus.
  4. Die Antwort des XML-Kommandos (<spooler><answer>, die auch eine Fehlermeldung <ERROR> enthalten kann) wird mit dem response_xslt_stylesheet zu einem <service_response> transformiert. Der Scheduler liefert den Inhalt von <content> über die offene HTTP-Verbindung zurück.
    <service_response>
        <content>…xmldata…</content>
    </service_response>
  5. Um eine ungültige Anforderung zu beantworten, kann das Stylesheet request_xslt_stylesheet sofort ein <service_response> liefern.

Fehlerbehandlung

Wenn mit POST kein XML-Dokument übergeben worden ist, führt das zum HTTP-Fehlercode "404 Bad Request".
Ein Fehler in der Transformation führt zum HTTP-Fehlercode "500 Internal Server Error".

Ergebnis der Ausführung weiterleiten (Forwarding)

Aufträge und Tasks können einem Web-Dienst zugeordnet sein. Die Kommandos <add_order> und <start_job> erhalten dazu das neue Attribut web_service="service_name".

Solche Aufträge und Tasks werden, wenn sie enden und dem Web-Dienst ein forward_xslt_stylesheet zugeordnet ist, mit diesem als <order> bzw. <task> übergeben:

<order service="service_name" last_job="job_name" …>
    <payload>
        <params>
            …
        </params>
    </payload>
    <log last_error="…" last_warning="…"/>
    …
</order>

bzw.

<task job="…" …>
    <log last_error="…" last_warning="…"/>
    …
</task>

Ergebnis der Transformation ist ein <service_request>:

<service_request url="url">
    <content>…data…</content>
</service_request>

Jobkette scheduler_service_forwarding

Der Scheduler packt das <service_request> in die Payload eines neuen Auftrags und übergibt diesen der vordefinierten Jobkette scheduler_service_forwarding.

Job scheduler_service_forwarder

Der einzige Job der Jobkette, scheduler_service_forwarder, baut mit dem URL eine HTTP-Verbindung auf, überträgt mit POST die Daten, wartet die Antwort ab und protokolliert sie.

Eigenschaften des Jobs können in der Konfigurationsdatei eingestellt werden, wie wenn der Job mit <base> bekannt gemacht worden wäre. Ein Beispiel:

<job name="scheduler_service_forwarder">
    <delay_order_after_setback setback_count="1" delay="00:01"/>
    <delay_order_after_setback setback_count="2" delay="01:00"/>
    <delay_order_after_setback setback_count="3" delay="24:00"/>
    <run_time>
        <period begin="07:00" end="17:00"/>
    </run_time>
</job>

Implementiert ist der Job in Java (siehe auch <web_service forward_xslt_stylesheet="…">).

Verhalten mit <base>

Ergänzt ein Element <web_service> an der entsprechenden Stelle aus der Basiskonfiguration. In <web_service> angegebene Attribute überschreiben die aus der Basiskonfiguration.

Eltern-Elemente

<http_server>  

  – HTTP-Server

Attribute

name="name" Name des Dienstes im Scheduler

url_path="url_path" URL-Pfad, unter dem der Web-Dienst ansprechbar ist

Er soll mit einem Schrägstrich beginnen.

Umgebungsvariablen (z.B. $HOME) werden ersetzt (siehe hier).

job_chain="job_chain" Jobkette, die Web-Service-Operationen ausführt

Eine Web-Service-Anforderung erzeugt einen Auftrag, der in diese Jobkette eingereiht wird. Die Nutzdaten der Anforderung stehen in spooler_task.order.web_service_operation.request.binary_content.

Nicht zusammen mit den Attributen request_xslt_stylesheet und response_xslt_stylesheet verwendbar.

Für den Zugriff auf die Web-Anforderung siehe Order.web_service_operation.

timeout="seconds" Frist

Wenn innerhalb der Frist der Auftrag nicht dem ersten Job zur Ausführung übergeben wird, lehnt der Scheduler die HTTP-Anforderung mit "504 Gateway Timeout" ab und zieht den Auftrag mit der Meldung SCHEDULER-290 zurück.

request_xslt_stylesheet="path" Transformiert die Anforderung in ein Scheduler-Kommando

Pfad des XSLT-Stylesheets, das das mit HTTP-POST übergebene XML-Dokument in ein Scheduler-Kommando wandelt.

Nicht zusammen mit dem Attribut job_chain verwendbar.

Umgebungsvariablen (z.B. $HOME) werden ersetzt (siehe hier).

response_xslt_stylesheet="path" Transformiert die Antwort des Kommandos in die Antwort des Web-Dienstes

Pfad des XSLT-Stylesheets, das das XML-Ergebnis des Scheduler-Kommandos in ein XML-Dokument wandelt, mit der der Scheduler die Web-Dienst-Anfrage beantwortet.

Nicht zusammen mit dem Attribut job_chain verwendbar.

Umgebungsvariablen (z.B. $HOME) werden ersetzt (siehe hier).

forward_xslt_stylesheet="path" Zur Weiterleitung am Ende des Auftrags bzw. der Task

Wenn ein mit <add_order web_service="…"> gestarteter Auftrag oder eine mit <start_job web_service="…"> gestartete Task endet und ein forward_xslt_stylesheet angegeben ist, dann wird der Auftrag bzw. die Task mit dem Stylesheet zu einem <service_request> transformiert, das den Aufruf eines anderen Web-Dienstes auslöst.

Nicht zusammen mit dem Attribut job_chain verwendbar.

Benötigt Java und das Klassen-Archiv xercesImpl.jar im CLASS_PATH (s. <config java_class_path="…/xercesImpl.jar">).

Umgebungsvariablen (z.B. $HOME) werden ersetzt (siehe hier).

debug="yes|no" (Initialwert: no)    

Nur, wenn request_xslt_stylesheet angegeben ist:

debug="yes" lässt den Scheduler die intern erzeugten XML-Dokumente in Dateien im mit -log-dir festgelegten Verzeichnis ablegen:

service_name.transaction_number.raw_request.txt Der mit HTTP-POST übergebene Text
service_name.transaction_number.service_request.xml Das daraus erstellte <service_request>
service_name.transaction_number.command.xml Das mit request_xslt_stylesheet erstellte Kommando
service_name.transaction_number.service_response.xml Die mit response_xslt_stylesheet transformierte Antwort des Web-Dienstes
service_name.forward.xml Das mit forward_xslt_stylesheet erstellte <service_request> (ohne Transaktionsnummer, die ist hier nicht bekannt)

Der Scheduler räumt die Dateien nicht ab.

Kind-Elemente

<params>  

  – Parameter zur freien Verwendung

Die Parameter können mit Web_service.params ausgelesen werden.

Im XSLT-Stylesheet können die Parameter mit <xsl:param name="name"/> deklariert und mit $name abgerufen werden. Sie werden als Strings übergeben. Parameter, die Apostroph und Anführungszeichen zugleich enthalten, lassen sich nicht übergeben und werden mit Warnung abgewiesen.

Beispiel  

<web_service … request_xslt_stylesheet="…/web_service_request.xsl" …>
    <params>
        <param name="job_chain" value="my_job_chain"/>
    <params>
</web_service>
Das Stylesheet …/web_service_request.xsl benutzt den Parameter $job_chain:
<xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:param name="job_chain"/>

    <xsl:template match="/service_request">
        <xsl:element name="add_order">
            <xsl:attribute name="job_chain"><xsl:value-of select="$job_chain"/></xsl:attribute>
            <xsl:attribute name="web_service"><xsl:value-of select="web_service/@name"/></xsl:attribute>
            <params>…</params>
        </xsl:element>
    </xsl:template>
</xsl:stylesheet>

Meldungen

[ERROR] SCHEDULER-237 XSLT stylesheet "(1) " does not deliver a result 
[ERROR] SCHEDULER-244 Element <content> is missing or empty 
[ERROR] SCHEDULER-245 Element <content> has more than one child element 
[ERROR] SCHEDULER-248 web_service_operation has finished and is not longer valid 
[ERROR] SCHEDULER-252 Invalid url path - it has to begin with '/': (1)  
[ERROR] SCHEDULER-290 Timeout: No job started to execute (1) , cancelling order and HTTP operation 
[ERROR] SCHEDULER-297 Order has been carried out without web_service_operation.send(), operation cancelled 
[ERROR] SCHEDULER-316 <web_service name="(1) "/>: attributes job_chain=/timeout= and request/response/forward_xslt_stylesheet= cannot be combined 
[warn] SCHEDULER-308 Ignoring cancel() because response has already been sent 
[info] SCHEDULER-964 New (1)  
[debug3] SCHEDULER-954 XSLT stylesheet (1) ="(2) " returns: 

Software- und Organisations-Service GmbH

Zuletzt geändert von Joacim Zschimmer, 2007-02-19