You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cocoon.apache.org by Andre Juffer <aj...@sun3.oulu.fi> on 2007/09/30 15:28:47 UTC
Namespace, Custom Transformer
Hi All,
I have some trouble with a custom transformer that needs to create a DOM
document from SAX events. This transformer (XACMLTransformer) is used
to send a XACML request to a so-called Policy Decision Point PDP (see
http://www.oasis-open.org/committees/tc_home.php?wg_abbrev=xacml for for
background information).
A typical request with name spaces looks like:
<xacml:request xmlns:xacml="something-here">
<Request xmlns="urn:oasis:names:tc:xacml:2.0:context:schema:os"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:oasis:names:tc:xacml:2.0:context:schema:os
http://docs.oasis-open.org/xacml/access_control-xacml-2.0-context-schema-os.xsd">
......
</Request>
</xacml:request>
Everything from <Request> to </Request> is entirely valid XACML-XML
according to the schema located at
http://docs.oasis-open.org/xacml/access_control-xacml-2.0-context-schema-os.xsd
This Request is in fact send to the Policy Decision Point (PDP).
The element xacml:request element triggers the XACMLTransformer. The
transformer extends from the
org.apache.cocoon.transformation.AbstractSAXTransformer but only
implements the ContentHandler interface. All SAX events it receives are
forwarded to an org.apache.cocoon.xml.dom.DOMBuilder. As soon as
everything has been processes, the request Document is send to the PDP.
So far so good.
The problem now is that as soon as the Request element is processed, the
xmlns="urn:oasis:names:tc:xacml:2.0:context:schema:os" part results in
an exception of the form:
ERROR: NAMESPACE_ERR: An attempt is made to create or change an object
in a way which is incorrect with regard to name spaces.
at org.apache.xml.utils.DOMBuilder.startElement(DOMBuilder.java:354)
...
The referred line in DOMBuilder contains the following (from the xalan
source):
// In SAX, xmlns[:] attributes have an empty namespace, while in DOM
// they should have the xmlns namespace
if (attrQName.startsWith("xmlns:") || attrQName.equals("xmlns")) {
attrNS = "http://www.w3.org/2000/xmlns/";
}
(attrQName is a String).
I cannot see what the problem in fact is.
However, if all name spaces of the Request element above are placed in
the xacml:request element instead, everything is fine. In fact, as long
as there are no namespace in the Request, everything works. I can view
the request Document that is send to the PDP and it is an exact copy of
<Request> to </Request> as it should be. The PDP properly evaluates the
request and a response is accordingly generated. The response is
converted into DOM, which is subsequently inserted into the pipeline.
I need to be able to employ name spaces also within the Request part.
ANd this seems not possible. I am sure I do something wrong.
I have 3 questions:
1. Should all name spaces always be in the triggering element
(xacml:request)?
2. What could be the interpretation of the aforementioned NAMESPACE_ERR
exception? The W3C document is very unclear, to say the least.
3. Is there a thinking error on my part in the sense that I do things
incorrectly for the XACMLTransformer?
Thanks for your help,
--
Andre H. Juffer | Email: Andre.Juffer@oulu.fi
The Biocenter and | WWW: www.biochem.oulu.fi/Biocomputing/
the Dep. of Biochemistry | Fax: +358-8-553-1141
University of Oulu, Finland | Phone: +358-8-553 1161
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@cocoon.apache.org
For additional commands, e-mail: users-help@cocoon.apache.org