Issue with xmltooling and attribute namespace

Massimiliano Masi massimiliano.masi at gmail.com
Wed Feb 26 04:55:58 EST 2014


Hello,

Everything is handled using XMLTooling and DOM. In my marshaller, I have

public class ClaimTypeMarshaller extends AbstractWSTrustObjectMarshaller {

@Override

protected void marshallAttributes(XMLObject xmlObject, Element domElement)
throws MarshallingException {


 String out1 = XMLHelper.prettyPrintXML(domElement);

System.out.println(out1);

ClaimTypeImpl cvi = (ClaimTypeImpl)xmlObject;

// XMLHelper.marshallAttributeMap(cvi.getUnknownAttributes(), domElement);

AttributeMap attributeMap = cvi.getUnknownAttributes();

Document document = domElement.getOwnerDocument();

Attr attribute = null;

for (Entry<QName, String> entry : attributeMap.entrySet()) {

attribute = XMLHelper.constructAttribute(document, entry.getKey());

attribute.setValue(entry.getValue());

domElement.setAttributeNodeNS(attribute);

if (Configuration.isIDAttribute(entry.getKey()) ||
attributeMap.isIDAttribute(entry.getKey())) {

domElement.setIdAttributeNode(attribute, true);

}

}

String out = XMLHelper.prettyPrintXML(domElement);

System.out.println(out);


ᐧ
The first System.out gives the following:

<?xml version="1.0" encoding="UTF-8"?><ts:ClaimType
xmlns:ts="urn:tiani-spirit:ts" xmlns="urn:tiani-spirit:ts"/>


The second gives the following (correct):

<?xml version="1.0" encoding="UTF-8"?><ts:ClaimType
xmlns:ts="urn:tiani-spirit:ts" ts:DataType="
http://www.w3.org/2001/XMLSchema#dateTime"
ts:name="urn:tiani-spirit:bes:2013:claims:tr-date"
xmlns="urn:tiani-spirit:ts"/>

Unfortuntaly, the resulted XML is as follows:

   <ts:ClaimType xmlns:ts="urn:tiani-spirit:ts" xmlns="urn:tiani-spirit:ts"
DataType="http://www.w3.org/2001/XMLSchema#dateTime"
name="urn:tiani-spirit:bes:2013:claims:tr-date">

            <ts:ClaimValue>2014-02-26T09:45:58.430Z</ts:ClaimValue>

        </ts:ClaimType>



So, something must happen during marshalling of the ancestors, perhaps in
the marshallInto of AbstractWSTrustObjectMarshaller?
Moreover, who is qualifying such attributes? I created the schema with
qualified attributes because of the result of the marhsalling.

I can't access the source code now, the whole shibboleth.net is down.

Any other ideas?



On Tue, Feb 25, 2014 at 6:55 PM, Brent Putman <putmanb at georgetown.edu>wrote:

>
> On 2/25/14 9:13 AM, Massimiliano Masi wrote:
>
> Hi All,
>
>
>
>  In project A, my XMLObject is unmarshalled as:
>
>
> My question would be: Unmarshalled from where?  Coming in over the wire
> from a WS service or WS client of some kind (e.g. see below re: Apache
> Axis).  OpenSAML doesn't change a DOM when it unmarshalls an XMLObject tree
> around it, so my guess would be that the XML already looks that way before
> it gets to your OpenSAML.  Or else, it's being mutated in some way by
> whatever DOM serialization you are applying.  But either way I don't think
> OpenSAML is directly involved.
>
> If you're pulling this off the wire, I'd try serializing and logging it
> before you hand it to OpenSAML for unmarshalling, just to confirm exactly
> what you are receiving.
>
>
>
>
>  Project A is good, since it declares a namespace for the attributes
> DataType and Name, while in project B such attribtues are not set. This
> violates this schema definition:
>
>    <xs:element name="ClaimType" type="ts:ClaimTypeType"/>
>
>     <xs:complexType name="ClaimTypeType">
>
>         <xs:attribute name="DataType" type="xs:anyURI" use="required"  />
>
>         <xs:attribute name="name" type="xs:anyURI" use="required" />
>
>     </xs:complexType>
>
>
>
> Actually, that's not really clear just from that schema snippet.  Whether
> the attributes in an instance document are namespace-qualified or not
> depends (in part) on the <xs:schema> element's  ' attributeFormDefault'
> attribute. If it's absent, it defaults to 'unqualified'.  Unless the schema
> is explicitly setting 'attributeFormDefault=qualified', then based on that
> schema snippet, I believe the unqualified forms in your B example would be
> the correct schema-valid ones.   See also ' elementFormDefault' , which
> does the same for elements.
>
> Note that a lot of schemas, including SAML and WS-Trust, set (and/or
> effectively default) 'elementFormDefault=qualified' and
> 'attributeFormDefault=unqualified', meaning elements will be
> namespace-qualified, but attributes are not.
>
> (That doesn't really have anything to do with why you're seeing 2
> different outputs, though).
>
>
>
>
>
>  Since the code (from project A) is the same, it must be a problem of
> libraries. Do you have suggestions?
>
>
> Not specifically, but that ns0, ns1, etc stuff looks suspiciously like
> what Apache Axis does when it generates Java code to handle a particular
> schema (the "contract driven" way).  So perhaps that is relevant somewhere
> in what you are doing, or at least you are somehow using some of the same
> libraries that they do.
>
>
> --Brent
>
>
>
> --
> To unsubscribe from this list send an email to
> dev-unsubscribe at shibboleth.net
>



-- 
Massimiliano Masi

http://www.mascanc.net/~max
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://shibboleth.net/pipermail/dev/attachments/20140226/2cc7b376/attachment-0001.html 


More information about the dev mailing list