dev@jax-rpc.java.net

QNames in default namespace

From: Jerry Pisk <jerry.pisk_at_gmail.com>
Date: Mon, 12 Dec 2005 09:25:51 -0800

Hello,

I have been trying to use jax-rpc based web service from a .Net client
and I've ran into an issue regarding default namespaces. The .Net
framework puts its SOAP message into the default namespace, which is
causing derived types not to be recognized because xsi:type value that
specifies the actual element type is being decoded using
com.sun.xml.rpc.streaming.XMLReaderUtil.decodeQName() which includes
the following comment (and behaves as stated):

        // NOTE: Here it is assumed that we do not want to use default namespace
        // declarations and therefore a null prefix means "no namespace" and
        // not "default namespace"

I think this is incorrect and that no prefix should mean the default
namespace. I looked up the W3C's XML Schema technical report and at
http://www.w3.org/TR/2004/REC-xmlschema-1-20041028/structures.html#src-qname
it states:

Schema Representation Constraint: QName Interpretation

Where the type of an attribute information item in a document involved
in ·validation· is identified as ·QName·, its ·actual value· is
composed of a [Definition:] local name and a [Definition:] namespace
name. Its ·actual value· is determined based on its ·normalized value·
and the containing element information item's [in-scope namespaces]
following [XML-Namespaces]:
The appropriate case among the following must be true:

1 If its ·normalized value· is prefixed, then all of the following must be true:
1.1 There must be a namespace in the [in-scope namespaces] whose
[prefix] matches the prefix.
1.2 its ·namespace name· is the [namespace name] of that namespace.
1.3 Its ·local name· is the portion of its ·normalized value· after
the colon (':').
2 otherwise (its ·normalized value· is unprefixed) all of the
following must be true:
2.1 its ·local name· is its ·normalized value·.
2.2 The appropriate case among the following must be true:
2.2.1 If there is a namespace in the [in-scope namespaces] whose
[prefix] has no value, then its ·namespace name· is the [namespace
name] of that namespace.
2.2.2 otherwise its ·namespace name· is ·absent·.
In the absence of the [in-scope namespaces] property in the infoset
for the schema document in question, processors must reconstruct
equivalent information as necessary, using the [ namespace attributes]
of the containing element information item and its ancestors.

To me 2.2.1 means that no prefix should be interpreted as the default
namespace in the node's context (a namespace whose prefix has no value
is the default namespace). Any thoughts? This change will make jax-rpc
interoperable with .Net framework's web services client code so I
personally do not have an option but to make the change but I would
like to get comments on what the proper implementation is, get it
implemented in jax-rpc (or jax-ws, I have not checked that code yet)
and solicit comments on what might be affected by this change other
than the xsi:type's decoding.

Jerry Pisk