Driver health configuration disturbing SOAP driver

407 views Asked by At

I have implemented a solution based on Novell/NetIQs Identity Manager's SOAP driver. There is a driver health job too and a driver health configuration on my SOAP driver.

There is a query query-driver-ident at driver startup and regulary when the driver is running. The question is: why is the query answered by the system when the driver starts and why is it passed through when the driver is running? When the query is passed through: what is the connected system expected to reply?

Details follow:

When the driver starts I see the following trace which is quite ok:

[12/11/13 13:13:18.558]:Codex-KMS ST:Received state change event.
[12/11/13 13:13:18.559]:Codex-KMS ST:Transitioned from state '%+C%14CStopped%-C' to state '%+C%14CStarting%-C'.
[12/11/13 13:13:18.566]:Codex-KMS ST:Successfully processed state change event.
[12/11/13 13:13:18.568]:Codex-KMS ST:Submitting identification query to subscriber shim:
[12/11/13 13:13:18.568]:Codex-KMS ST:
<nds dtdversion="4.0" ndsversion="8.x">
  <source>
    <product edition="Advanced" version="4.0.1.0">DirXML</product>
    <contact>Novell, Inc.</contact>
  </source>
  <input>
    <query event-id="query-driver-ident" scope="entry">
      <search-class class-name="__driver_identification_class__"/>
      <read-attr/>
    </query>
  </input>
</nds>
[12/11/13 13:13:18.572]:Codex-KMS ST:SubscriptionShim.execute() returned:
[12/11/13 13:13:18.587]:Codex-KMS ST:
<nds dtdversion="2.0">
  <source>
    <product build="20110402_112430" instance="Codex-KMS" version="3.5.6">Identity Manager Driver for SOAP</product>
    <contact>Novell, Inc.</contact>
  </source>
  <output>
    <instance class-name="__driver_identification_class__">
      <attr attr-name="driver-id">
        <value type="string">SOAP</value>
      </attr>
      <attr attr-name="driver-version">
        <value type="string">3.5.6</value>
      </attr>
      <attr attr-name="min-activation-version">
        <value type="int">3</value>
      </attr>
    </instance>
  </output>
</nds>

However, when the driver is running and the driver health job checks the trace is as follows:

[12/11/13 13:15:01.461]:Codex-KMS ST:Injecting User Agent XDS command document into Subscriber channel.
[12/11/13 13:15:01.462]:Codex-KMS ST:Applying command transformation policies.
[12/11/13 13:15:01.463]:Codex-KMS ST:Applying policy: ...
[12/11/13 13:15:01.485]:Codex-KMS ST:Policy returned:
[12/11/13 13:15:01.487]:Codex-KMS ST:
<nds dtdversion="4.0" ndsversion="8.x">
    <source>
        <product edition="Advanced" version="4.0.1.0">DirXML</product>
        <contact>Novell, Inc.</contact>
    </source>
    <input>
        <query event-id="query-driver-ident" scope="entry">
            <search-class class-name="__driver_identification_class__"/>
            <read-attr/>
        </query>
    </input>
</nds>
[12/11/13 13:15:01.494]:Codex-KMS ST:Filtering out notification-only attributes.
[12/11/13 13:15:01.496]:Codex-KMS ST:Fixing up association references.
[12/11/13 13:15:01.498]:Codex-KMS ST:Applying schema mapping policies to output.
[12/11/13 13:15:01.500]:Codex-KMS ST:Applying policy: %+C%14CKMS-Mapping%-C.
[12/11/13 13:15:01.502]:Codex-KMS ST:  No mapping for class-name '__driver_identification_class__'.
[12/11/13 13:15:01.504]:Codex-KMS ST:Applying output transformation policies.
[12/11/13 13:15:01.509]:Codex-KMS ST:Applying XSLT policy: %+C%14CSOAP+Output+Transform%-C.
[12/11/13 13:15:01.513]:Codex-KMS ST:  %13Cxsl:message -> Output: Add SOAP Headers
[12/11/13 13:15:01.516]:Codex-KMS ST:Policy returned:
[12/11/13 13:15:01.518]:Codex-KMS ST:
<nds dtdversion="4.0" ndsversion="8.x">
  <source>
    <product edition="Advanced" version="4.0.1.0">DirXML</product>
    <contact>Novell, Inc.</contact>
  </source>
  <input>
    <soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:spml="urn:oasis:names:tc:SPML:1:0">
      <soap-env:Body>
        <query event-id="query-driver-ident" scope="entry">
          <search-class class-name="__driver_identification_class__"/>
          <read-attr/>
        </query>
      </soap-env:Body>
    </soap-env:Envelope>
  </input>
</nds>
[12/11/13 13:15:01.525]:Codex-KMS ST:Applying XSLT policy: %+C%14CSPML+Output+Transform%-C.
[12/11/13 13:15:01.528]:Codex-KMS ST:  %13Cxsl:message -> Output: Convert XDS to SPML
[12/11/13 13:15:01.532]:Codex-KMS ST:Policy returned:
[12/11/13 13:15:01.533]:Codex-KMS ST:
<nds dtdversion="4.0" ndsversion="8.x">
  <source>
    <product edition="Advanced" version="4.0.1.0">DirXML</product>
    <contact>Novell, Inc.</contact>
  </source>
  <input>
    <soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:spml="urn:oasis:names:tc:SPML:1:0">
      <soap-env:Body>
        <searchRequest derefAliases="neverDerefAliases" sizeLimit="1000">
          <filter>
            <and>
              <equalityMatch name="objectclass">
                <value>__driver_identification_class__</value>
              </equalityMatch>
            </and>
          </filter>
          <attributes>
            <attribute name="1.1"/>
          </attributes>
          <operation-data parent-node-1="searchResponse">
            <return-to-me command="query" event-id="query-driver-ident" scope="entry"/>
          </operation-data>
        </searchRequest>
      </soap-env:Body>
    </soap-env:Envelope>
  </input>
</nds>
[12/11/13 13:15:01.543]:Codex-KMS ST:Submitting document to subscriber shim:
[12/11/13 13:15:01.545]:Codex-KMS ST:
<nds dtdversion="4.0" ndsversion="8.x">
  <source>
    <product edition="Advanced" version="4.0.1.0">DirXML</product>
    <contact>Novell, Inc.</contact>
  </source>
  <input>
    <soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:spml="urn:oasis:names:tc:SPML:1:0">
      <soap-env:Body>
        <searchRequest derefAliases="neverDerefAliases" sizeLimit="1000">
          <filter>
            <and>
              <equalityMatch name="objectclass">
                <value>__driver_identification_class__</value>
              </equalityMatch>
            </and>
          </filter>
          <attributes>
            <attribute name="1.1"/>
          </attributes>
          <operation-data parent-node-1="searchResponse">
            <return-to-me command="query" event-id="query-driver-ident" scope="entry"/>
          </operation-data>
        </searchRequest>
      </soap-env:Body>
    </soap-env:Envelope>
  </input>
</nds>
[12/11/13 13:15:01.556]:Codex-KMS ST:Codex-KMS: Value of boolean flag 'remove-existing' is : false
[12/11/13 13:15:01.560]:Codex-KMS ST:Codex-KMS: HTTPSubscriberTransport.send()
[12/11/13 13:15:01.561]:Codex-KMS ST:Codex-KMS: Preparing HTTP POST connection to ...
[12/11/13 13:15:01.563]:Codex-KMS ST:Codex-KMS: Setting the following HTTP request properties:
[12/11/13 13:15:01.565]:Codex-KMS ST:Codex-KMS:   Authorization: <credentials suppressed>
[12/11/13 13:15:01.567]:Codex-KMS ST:Codex-KMS:   SOAPAction: #batchRequest
[12/11/13 13:15:01.569]:Codex-KMS ST:Codex-KMS:   Content-Type: text/xml; charset=utf-8
[12/11/13 13:15:01.573]:Codex-KMS ST:Codex-KMS: Did HTTP POST with 423 bytes of data to ...
[12/11/13 13:15:01.600]:Codex-KMS ST:Codex-KMS: Response code and message: 200 OK
[12/11/13 13:15:01.603]:Codex-KMS ST:SubscriptionShim.execute() returned:
[12/11/13 13:15:01.604]:Codex-KMS ST:
<nds dtdversion="2.0">
  <source>
    <product build="20110402_112430" instance="Codex-KMS" version="3.5.6">Identity Manager Driver for SOAP</product>
    <contact>Novell, Inc.</contact>
  </source>
  <output>
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
<spml:searchResponse error="urn:oasis:names:tc:SPML:1:0#unsupportedOperation" requestID="rid-2abd6523-d4c6-45c2-9d54-3448bb10aeb7" result="urn:oasis:names:tc:SPML:1:0#failure" xmlns:dsml="urn:oasis:names:tc:DSML:2:0:core" xmlns:spml="urn:oasis:names:tc:SPML:1:0">
  <spml:errorMessage>UNSPECIFIED_ERROR</spml:errorMessage>
</spml:searchResponse>
</SOAP-ENV:Body>
<operation-data parent-node-1="searchResponse" xmlns="urn:oasis:names:tc:SPML:1:0">
        <return-to-me command="query" event-id="query-driver-ident" scope="entry"/>
      </operation-data>
    </SOAP-ENV:Envelope>
  </output>
</nds>

The error UNSPECIFIED_ERROR is generated by my application on the web service end point which is not prepared for this query.

1

There are 1 answers

1
Andriy Trotsenko On

The answer to Your first question, IMHO, is 'cause there is driver shim written so to answer ident query only first time after start.

There is at least two ways You can use to overcome this error: 1. Configure driver health job (located under Driver Set) to not use "subscriber heartbeat". This setting affects all drivers. 2. Veto such query in sub-ctp: if (operation="query" and @event-id="query-driver-ident") then veto();