Re: WSIF bug reporting.

Aleksander Slominski <[email protected]> Fri, 23 Sep 2005 20:31:04 -0500
Newsgroups gmane.comp.apache.webservices.wsif.user
Message-ID <[email protected]>
Shantanu Sen wrote:

>Sorry, I sent out the previou mail without finishing
>it...here is the complete one..
>
>--- Shantanu Sen <ssen-yBeKhBN/[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