[prev in list] [next in list] [prev in thread] [next in thread] 

List:       wsif-dev
Subject:    [jira] Created: (WSIF-75) The current version of org.apache.wsif.schema.Parser does not work with WS
From:       "Shantanu Sen (JIRA)" <wsif-dev () ws ! apache ! org>
Date:       2005-09-26 18:49:48
Message-ID: 519236247.1127760588039.JavaMail.jira () ajax ! apache ! org
[Download RAW message or body]

The current version of org.apache.wsif.schema.Parser does not work with WSDL4J1.5.1
-----------------------------------------------------------------------------------

         Key: WSIF-75
         URL: http://issues.apache.org/jira/browse/WSIF-75
     Project: Axis-WSIF
        Type: Bug
  Components: Basic Architecture  
    Versions: current (nightly), 2.0    
 Environment: Windows XP
    Reporter: Shantanu Sen


The current version of Parser does not work with WSDL4J1.5.1 since the child element \
of the types section of WSDL is  of type javax.wsdl.extensions.schema.Schema - not \
the javax.wsdl.extensions.UnknownExtensibilityElement as it was in the previous \
versions of WSDL4J.

The issue is in the getTypesSchemas method in the following line:

UnknownExtensibilityElement typesElement =     (UnknownExtensibilityElement) nextEl;

Since the typesElement is not an UnknownExtensibilityElement, it throws a \
ClassCastException at runtime.

The following code should fix this issue:

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;
}

Here is the email trail that further describes the issue.

=========================
Shantanu Sen wrote:

> --- Aleksander Slominski <aslom@cs.indiana.edu> wrote:
> 
> 
> 
> > Shantanu Sen wrote:
> > 
> > 
> > 
> > > Sorry, I sent out the previou mail without finishing
> > > it...here is the complete one..
> > > 
> > > --- Shantanu Sen <ssen@pacbell.net> wrote:
> > > 
> > > 
> > > 
> > > 
> > > 
> > > > Please see below for my response
> > > > 
> > > > --- Aleksander Slominski <aslom@cs.indiana.edu>
> > > > 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
============

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic