Thanks Dennis.

We thought about providing a xs:any element for extensibility. However, this
poses a few other problems as you mentioned below. I wonder whether it's
possible to do xs:any with maxOccurs="unbounded" as a way of providing
multiple arbirerary elements without violating XML schema.

*<quote>*

*"So there's no easy way to get the kind of flexibility you want
whilestaying compatible with XML schema. JAXB will give you the
client-sideflexibility, but it does this by basically ignoring the schema
and onlyprocessing the elements it understands. Clients using tools which
takethe schema more seriously will fail with your added data."*

*</quote>*

Very true. This is why we started investigating whether all mainstream
stacks have an option to do lax versioning.

Cheers,

-Buddhike
On Wed, Mar 2, 2011 at 10:20 AM, Dennis Sosnoski <d...@sosnoski.com> wrote:

>  Hi Buddhike,
>
> As I mentioned in my reply to a separate email on a similar issue, it's
> possible to design your schemas with extension points for adding more data
> in the future by using the xs:any element. The big limitation is that if you
> want to use the same namespace for your extension elements, the xs:any must
> be the last item in an xs:sequence and must follow a required element (this
> is a somewhat stupid limitation of XML schema). That's not so bad if you're
> only adding a few extensions, but it causes problems when you want to
> provide an updated schema that includes the extension elements.
>
> One way around this limitation is to use a new namespace for each set of
> added elements, but this leads to namespace proliferation and a lot of
> confusion. Another is to use an optional wrapper element around the added
> content, but that also leads to ugliness since a new wrapper element would
> be required for each set of extensions.
>
> So there's no easy way to get the kind of flexibility you want while
> staying compatible with XML schema. JAXB will give you the client-side
> flexibility, but it does this by basically ignoring the schema and only
> processing the elements it understands. Clients using tools which take the
> schema more seriously will fail with your added data.
>
>   - Dennis
>
>
>
> On 03/02/2011 12:09 PM, Buddhike de Silva wrote:
>
> Thanks Josef. I like your idea. But this would be a little complicated in
> terms of what we are trying to achieve. To put more context around... We are
> building a public Web Service. And we want to be interoperable with main
> stream Java stacks. When it comes to releasing the next version of the
> product, we want to ensure that our clients don't break regardless of the
> stack they are using. We also want to ensure we have the fastest upgrade
> path for certain things we consider as non breaking changes.
>
> One of them is adding a new optional member to type. We could consider that
> as a breaking change and version our endpoints accordingly but given the
> number of small changes we could anticipate, we'd rather avoid going down
> that path. However, we could only do that, if our clients using Java had
> the option to do lax visioning :-).
>
> We could use the dictionary based solution you mentioned. However, this
> would hide the strongly typed/hierarchical view of our data from our clients
> using the subsequent versions.
>
> Cheers,
>
> -Buddhike
>
>  On Tue, Mar 1, 2011 at 6:21 PM, Stadelmann Josef <
> josef.stadelm...@axa-winterthur.ch> wrote:
>
>>  Hi Buddhike
>>
>>
>>
>> Denis é all is right, breaking the contract is bad. But you can also think
>> about how a collection would be serialized, given a collection of strings
>> can be seen as a type. While this collection is i.e. a collection of
>> elements and each element has name value pairs of type string. If you can
>> serialize and de-serialize a collection then you can add as many elements as
>> you like. This is our approach to exchange unforeseen amounts of screen data
>> from transaction masks with our server up to the database tables. The axis2
>> client is very well in receiving and responding with AXIOM OMElement. And an
>> OMElement can consist any series of nodes parent with child's and child's
>> with siblings.
>>
>>
>>
>> The axis2 examples shows a service, guess one of the echo examples, how an
>> OMElement is exchanged from an axis2 client with the axis2 server.
>>
>> Now it is up to you to add more nodes to this OMElement and send it to the
>> server, and receive one from the server. If that works record what is
>> exchanged an make the same between a WCF Client and a WCF Server. Then take
>> a look at the difference using a SOAP Monitor or a TCPMONITOR.
>>
>>
>>
>> It’s a hard way but it works.
>>
>>
>>
>> Cheers
>>
>>
>>
>> *Von:* Buddhike de Silva [mailto:buddhike.desi...@geeksdiary.com]
>> *Gesendet:* Dienstag, 1. März 2011 08:33
>> *An:* Dennis Sosnoski
>> *Cc:* java-user@axis.apache.org
>> *Betreff:* Re: Axis Serialization Behavior
>>
>>
>>
>> Thanks a lot Dennis.
>>
>> Cheers,
>>
>> -Buddhike
>>
>> On Tue, Mar 1, 2011 at 5:30 PM, Dennis Sosnoski <d...@sosnoski.com> wrote:
>>
>> Ah, I hadn't realized you were using Axis(1). With Axis2 you can select
>> the data binding using a parameter to Wsdl2Java. You should be able to see
>> examples included in the Axis2 download, or you can try my code from this
>> article: http://www.ibm.com/developerworks/java/library/j-jws8.html I
>> haven't tried the code from the article with the latest Axis2 releases, but
>> hopefully it'll still work correctly.
>>
>>   - Dennis
>>
>>
>>
>>
>> On 03/01/2011 07:58 PM, Buddhike de Silva wrote:
>>
>> Thanks Dennis. Do you know of a link with some sample code on how to do
>> this? Sorry, I'm not really familier with Axis2. Thanks again.
>>
>> Cheers,
>>
>> -Buddhike
>>
>> On Tue, Mar 1, 2011 at 4:46 PM, Dennis Sosnoski <d...@sosnoski.com> wrote:
>>
>> Hi Buddhike,
>>
>> The handling of unexpected XML elements is determined by the data binding
>> technique used. JAXB is the sloppiest data binding supported by Axis2 (on a
>> par with WCF), and if you change to that you should be ok.
>>
>>   - Dennis
>>
>> Dennis M. Sosnoski
>> Java SOA and Web Services Consulting<http://www.sosnoski.com/consult.html>
>> Axis2/CXF/Metro SOA and Web Services 
>> Training<http://www.sosnoski.com/training.html>
>> Web Services Jump-Start <http://www.sosnoski.com/jumpstart.html>
>>
>>
>> On 02/28/2011 10:17 PM, Buddhike de Silva wrote:
>>
>> Anyone? (please... :-))
>>
>> On Sun, Feb 27, 2011 at 4:28 PM, Buddhike de Silva <
>> buddhike.desi...@geeksdiary.com> wrote:
>>
>> Hi All,
>>
>> We are doing some interop tests between Axis and WCF. In our WCF service
>> we have a type like this.
>>
>> [DataContract]
>>
>> public class CompositeType
>>
>> {
>>
>>   [DataMemeber]
>>
>>   public bool BoolValue {get; set;}
>>
>> }
>>
>> That results in a schema similar to the following.
>>
>> <xs:complexType name="CompositeType">
>>   <xs:sequence>
>>     <xs:element name="BoolValue" type="xs:boolean" minOccurs="0"/>
>>   </xs:sequence>
>> </xs:complexType>
>> <xs:element name="CompositeType" type="tns:CompositeType"
>> nillable="true"/>
>>
>>
>> We can generate Axis code with the WSDL/Schema generated by WCF service
>> and communicate with the service. However, if we add another property to
>> CompositeType class on the WCF server side, it breaks the Axis client. It
>> throws an exception saying it's reading an element that was unexpected. Our
>> understanding Axis is capable of lax processing of XML (that is, if it
>> encounters anything that's not recognized, serializer simply discards them).
>> Could someone pleasae let us know which settings we should use to enable lax
>> processing of messages? Many thanks in advance.
>>
>> Cheers,
>>
>> -Buddhike
>>
>>
>>
>>
>>
>>
>>
>
>

Reply via email to