Article

geoffc's picture
article
Reads:

4154

Score:
3.666665
3.7
3
 
Comments:

1

Designer and XML Validation

(View Disclaimer)

Problem

An interesting bug/feature to watch out for in Designer revolves around XML Validation. One of the really nice features in Designer (and iManager as well) is that when you to see a rule you need to use, you can look at the XML view, copy it, and paste it where you need it.

Normally the XML validator is excellent and catches any mistakes, such as missing a closing tag. You know, you copied from <rule> to the end, but forgot to copy the closing </rule> element. (This happens to me a lot!)

What you should be aware of is that the validator is mostly looking for valid XML. You can still paste in 'stupid' XML that will break things. Here is an example:

Stupid XML Trick

I was copying the contents of an entire rule set, but I did not want the <policy> tag with the XML DTD definition at the top. I foolishly copied from the <description> tag to the very end. I pasted that into the middle of an existing Policy object.

So I did not copy the tag to start with, since it already was a policy. But I did grab the <definition> tag.

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE policy PUBLIC
"policy-builder-dtd"
"/data/programs/designer.201/designer/eclipse/plugins/com.novell.designer.idm.policybuilder_2.0.0.200705161501/DTD/dirxmlscript.dtd"><policy>
	<description>Transform NMAS attribute to password elements</description>
	<rule disabled="true">
		<description>Convert adds of the nspmDistributionPassword attribute
to password elements</description>
		<conditions>
			<and>
				<if-operation op="equal">add</if-operation>
				<if-op-attr name="nspmDistributionPassword" op="available"/>
			</and>
		</conditions>
		<actions>
			<!-- Change all add-attr elements for the nspmDistributionPassword
attribute to password elements-->
			<do-set-dest-password>
				<arg-string>
					<token-xpath
expression="add-attr[@attr-name='nspmDistributionPassword']//value"/>
				</arg-string>
			</do-set-dest-password>
			<!-- Remove all add-attr elements for the nspmDistributionPassword
attribute -->
			<do-strip-op-attr name="nspmDistributionPassword"/>
		</actions>
	</rule>
</policy>

I got this error message in trace, a new one to me! Too many descriptions - what?

DirXML Log Event -------------------
Driver: \TIDM\US\NYC\idm\treelink\Notes
Channel: Subscriber
Status: Error
Message: Code(-9126) Error in
vnd.nds.stream://TIDM/US/NYC/idm/treelink/Notes/Subscriber/Password%28Sub%29-Transform+Distribution+Password#XmlData:61
: Too many 'description' elements specified.

Well, my rule had a bit that looked like this, due to my poor copy:

&l<policy yada...>
<rule>
yada yada yada
</rule>
<description>Transform NMAS attribute to password elements</description>
<rule disabled="true">
<description>Convert adds of the nspmDistributionPassword attribute
to password elements</description>

Solution

You cannot have a <description> element between </rule> and the next <rule>, according to the DirXML engine.

But because it had the </description> closing tag, it was valid XML, and the validator was OK with it.

Thus, you need to watch out for "stupid" mistakes where the problem exists between keyboard and chair (PEBKAC)!


Disclaimer: As with everything else at Cool Solutions, this content is definitely not supported by Novell (so don't even think of calling Support if you try something and it blows up).

It was contributed by a community member and is published "as is." It seems to have worked for at least one person, and might work for you. But please be sure to test, test, test before you do anything drastic with it.




User Comments

aanthonisse's picture

You had me...

Submitted by aanthonisse on 11 March 2010 - 7:06am.

Just found out that defining rules with two elements get validated as well, but that does not mean that they work :)

© 2013 Novell