Re: WSIF bug reporting.
Shantanu Sen <ssen-yBeKhBN/[email protected]> Fri, 23 Sep 2005 16:39:00 -0700 (PDT)
| Newsgroups | gmane.comp.apache.webservices.wsif.user |
|---|---|
| Message-ID | <[email protected]> |
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 { .... }