Use wsdl1.4 and not wsdl1.5
Shrinivas 

-----Original Message-----
From: Aleksander Slominski [mailto:[EMAIL PROTECTED] 
Sent: Sunday, September 25, 2005 2:16 AM
To: [email protected]
Cc: [email protected]
Subject: Re: WSIF bug reporting.

Shantanu Sen wrote:

>--- 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?
>
>  
>
Shantanu,

i will try to apply this patch to SVN and see what happens. could you open
JIRA issue for it?

thanks,

alek


--
The best way to predict the future is to invent it - Alan Kay


Reply via email to