[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