--- Aleksander Slominski <[EMAIL PROTECTED]> wrote:

> Shantanu Sen wrote:
> 
> >Sorry, I sent out the previou mail without finishing
> >it...here is the complete one..
> >
> >--- Shantanu Sen <[EMAIL PROTECTED]> wrote:
> >
> >  
> >
> >>Please see below for my response
> >>
> >>--- Aleksander Slominski <[EMAIL PROTECTED]>
> >>wrote:
> >>
> >>    
> >>
> >>>Shantanu Sen wrote:
> >>>
> >>>      
> >>>
> >>>>What is the version of the wsdl4j.jar that is
> >>>>        
> >>>>
> >>>present
> >>>      
> >>>
> >>>>in the current CVS repo of WSIF? It says
> >>>>wsdl4j-20030807.jar
> >>>>
> >>>>I tried to run with the wsdl4j-1.5.1 - but it
> >>>>        
> >>>>
> >>fails
> >>    
> >>
> >>>at
> >>>      
> >>>
> >>>>runtime although the WSIF build is fine. 
> >>>>
> >>>>The error is that when parsing a WSDL with the
> >>>>        
> >>>>
> >>>1.5.1
> >>>      
> >>>
> >>>>version the
> >>>>Definition.getTypes().getExtensibilityElements()
> >>>>returns a list of objects of type 
> >>>>com.ibm.wsdl.extensions.schema.SchemaImpl.
> >>>>
> >>>>But when I invoke the
> >>>>org.apache.wsif.schema.Parser.getAllSchemaTypes,
> >>>>        
> >>>>
> >>it
> >>    
> >>
> >>>>invokes the Parser.getTypesSchemas method, which
> >>>>expects the list of extensibility elements
> >>>>        
> >>>>
> >>returned
> >>    
> >>
> >>>by
> >>>      
> >>>
> >>>>the above call to be of type
> >>>>UnknownExtensibilityElement.
> >>>>
> >>>>Hence a ClassCastException is thrown.
> >>>>
> >>>>So, is there any plan to upgrade to the latest
> >>>>        
> >>>>
> >>>wsdl4j?
> >>>      
> >>>
> >>>>Does the latest wsdl4j give us any added benefit?
> >>>>
> >>>>I am curious - is the latest version correct in
> >>>>        
> >>>>
> >>>using
> >>>      
> >>>
> >>>>SchemaImpl as the type of the extensibility
> >>>>        
> >>>>
> >>>elements
> >>>      
> >>>
> >>>>rather than the UnknownExtensibilityElement?
> >>>> 
> >>>>
> >>>>        
> >>>>
> >>>hi,
> >>>
> >>>i have  added a check to Parser.getTypesSchemas to
> >>>skip non 
> >>>UnknownExtensibilityElement and i have also
> >>>      
> >>>
> >>upgraded
> >>    
> >>
> >>>the WSIF in CVS to 
> >>>use the 1.5.1 WSDL4J and i have updated AXIS to
> >>>1.2.1 - that should help 
> >>>to avoid jar linking problems.
> >>>
> >>>please try the version from CVS or nightly build
> >>>      
> >>>
> >>(in
> >>    
> >>
> >>>few hours) and send 
> >>>email if you find other problems.
> >>>
> >>>thanks,
> >>>
> >>>alek
> >>>      
> >>>
> >>Alek,
> >>
> >>This will not work. The def.getTypes() returns the
> >>types section of the document and that has typically
> >>one child element - the schema. The code that you
> >>added is skipping over that element since it is no
> >>longer an UnknownExtensibilityElement, but a
> >>com.ibm.wsdl.extensions.schema.SchemaImpl which is
> >>an
> >>ExtensibilityElement.
> >>
> >>Here is the part of the code that you added
> >>===============================
> >>Types types = def.getTypes();
> >>if (types != null) {
> >>  Iterator extEleIt =
> >>types.getExtensibilityElements().iterator();
> >>  while (extEleIt.hasNext()) {
> >>    Object nextEl = extEleIt.next();
> >>
> >>    
> >>
> >>>>>--- added by you in the current CVS tree
> >>>>>          
> >>>>>
> >>    if(!(nextEl instanceof
> >>UnknownExtensibilityElement)) {
> >>      continue;
> >>    }
> >>    
> >>
> >>>>>-------------------
> >>>>>          
> >>>>>
> >>  UnknownExtensibilityElement typesElement =
> >>     (UnknownExtensibilityElement) nextEl;
> >>
> >>   Element schemaEl = typesElement.getElement();
> >>....
> >>=============
> >>
> >>I think it should test for an ExtensibilityElement
> >>rather than UnkownExtensibilityElement since both
> >>SchemaImpl and UnknownExtensibilityElement are a
> >>type
> >>of ExtensibilityElement.
> >>
> >>I thought that we could check for
> >>ExtensibilityElement, but unfortunately it does not
> >>have a getElement API.
> >>
> >>The other option is to check if the element (the
> >>object nextEl above) is of type
> >>javax.wsdl.extensions.schema.Schema and cast it to
> >>that:
> >>------------
> >>Element schemaEl = null;
> >>if(nextEl instanceof
> >>javax.wsdl.extensions.schema.Schema) {
> >>  javax.wsdl.extensions.schema.Schema typesElement =
> >>      (javax.wsdl.extensions.schema.Schema)nextEl;
> >>   schemaEl = typesElement.getElement();
> >>} else if (nextEl instanceof
> >>UnknownExtensibilityElement)) {
> >>    UnknownExtensibilityElement typesElement =
> >>        (UnknownExtensibilityElement) nextEl;
> >>   schemaEl = typesElement.getElement();
> >>} else {
> >>    
> >>
> >   continue;
> >}
> >------------
> >
> >The issue is that once you add
> >javax.wsdl.extensions.schema.Schema reference in the
> >code, you can no longer build with the previous
> >version of wsdl4j since I think this type was added
> >later in WSDL4J.
> >
> >Please let me know what you think.
> >  
> >
> it starts to look really complicated - what do you think would eb the 
> best solution that works for you assuming we do depend on the latest WSDL4J?
> 
> thanks,
> 
> alek
> 
> -- 
> The best way to predict the future is to invent it - Alan Kay
> 
> 

I think the code that I supplied should satsify all of us. 

=====
if(nextEl instanceof javax.wsdl.extensions.schema.Schema) {
     javax.wsdl.extensions.schema.Schema typesElement =
                          (javax.wsdl.extensions.schema.Schema)nextEl;
      schemaEl = typesElement.getElement();
} else if (nextEl instanceof UnknownExtensibilityElement)) {
    UnknownExtensibilityElement typesElement = (UnknownExtensibilityElement) 
nextEl;
    schemaEl = typesElement.getElement();
} else {
    continue;
}
============

Note the following about this code:

1. It takes care of the possibility of a child element of types to be of type
UnknownExtensibilityElement
2. It takes care of the current scenario with WSDL4J1.5 - where the type is of
javax.wsdl.extensions.schema.Schema.
3. It ignores any other type - so if the WSDL contains other types in the types 
section
then there will not be any classcastexception.

This satisfies all the cases that I can think of. If you think of anything that 
I am
missing please let me know. Else, I feel this should work.

The only drawback is that we cannot compile against a previous version of 
WSDL4J. But I
think that should be acceptable - there is no requirement for it to be backward
compatible right?

Thanks,
Shantanu


Reply via email to