For binding.jms wireFormat.jmsdefault, consider smoothing over 
elementFormDefault differences
---------------------------------------------------------------------------------------------

                 Key: TUSCANY-2992
                 URL: https://issues.apache.org/jira/browse/TUSCANY-2992
             Project: Tuscany
          Issue Type: Improvement
          Components: Java SCA JMS Binding Extension
            Reporter: Scott Kurz
            Priority: Minor


So another area where this wF.jmsdefault behavior of unwrapping a single 
input/output gets tricky is with respect to elementFormDefault, and let me 
bring up another area to consider.

Consider the wrapped case, either top-down <interface.wsdl> or bottom-up 
<interface.java> - (the default in the absence of JAX-WS annotations being to 
treat Java as wrapped.)

While, (according to the JMS binding spec's description of the default WF), we 
have to read or write the wrapper's single child, the schema-defined element in 
play is actually the operation-level wrapper element.   The wrapper element's 
schema's elementFormDefault, then, will intersect with whether our child 
element is NS-qualified or not.

When serializing (request or response), the thing to do seems simple enough: 
use the elementFormDefault of the wrapper elem definition to decide whether to 
serialize the child element with a NS ("qualified") or without a NS 
("unqualified", the default).

So for:

    <wsdl:types>
        <schema elementFormDefault="qualified"  xmlns:tns="http://test"; 
targetNamespace="http://test"; ...>

            <element name="myOperation">
                <complexType>
                    <sequence>
                         <element name="arg1" type="xsd:int"/>
                    </sequence>
                </complexType>
            </element>

we serialize:
      <tns:arg1>4</tns:arg1>

whereas if we change the schema to elementFormDefault="unqualified" (note this 
is the default for bottom-up generated schemas as well)

we serialize:
       <arg1>4</arg1>

Seems simple enough, but what about deserialization?

One approach would be to require the "other side" to understand the viewpoint 
of the SCA runtime doing the deserialization and whether or not the SCA runtime 
expects qualified or unqualified child elements (this is how our code is 
implemented today).

According to this approach, receiving a JMS payload like:
             <tns:arg1>4</tns:arg1>

together with a service described by interface.java method such as:

        void myOperation(int x); 

would be a user error.    The Java, absent JAXB annotations, maps to a schema 
with elementFormDefault="unqualified", and so we can't handle such a payload.

An alternative approach would be to implement deserialization such that it 
could smooth over differences in elementFormDefault, i.e. handle either the 
unexpected presence or absence of a NS by ignoring or adding the NS as 
necessary. (Even then we could ask:  should a NS that's present but incorrect 
also be smoothed over (ignored)?)   

Do we agree this change would be desirable?     

I wish I had more sense of how useful in practice this change would be.   Not 
knowing that, at least opening the issue reminds us the issue exists, for later 
when someone asks why their data is null (as this is what happens in JAXB when 
you get the elemFormDefault incorrect).


-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to