[
https://issues.apache.org/jira/browse/AXIS2-4353?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12713568#action_12713568
]
Ben Reif commented on AXIS2-4353:
---------------------------------
I've attached an Eclipse project with a simple test case. Inside the project
there is a Jar file called core-webservices-consumer.jar that is in the
Classpath. This is where the wfxml-bpm.wsdl file is, which imports some *.xsd
files and those also import other *.xsd files.
I've seen other defects related to this. I think the root of the issue is in
the DefaultURIResolver class from the ws-commons project, where it does this:
String ref = new URI(baseUri).resolve(new URI(schemaLocation)).toString();
In the test case the baseUri is
'jar:file:/C:/eclipseWorkspace/ResolveXSDTestCase/lib/core-webservices-consumer.jar!/assignmentEngine/wsdl/'
and the schemaLocation is 'wfxml20-bpm.xsd'.
Since the baseUri starts with 'jar:file:', it's opaque, so the call to the
resolve method just returns the original value of schemaLocation, which is the
incorrect value of 'ref'. This causes it to create the InputSource with a
system ID of 'wfxml20-bpm.xsd' instead of the fully qualified path.
Ideally, the best solution would be to fix the DefaultURIResolver, but another
short term option might be to expose a URIResolver argument on the
ServiceClient constructors and the AxisService.createClientSideAxisService()
methods, which could then call
WSDL11ToAxisServiceBuilder.setCustomResolver(URIResolver customResolver) . That
way I could implement my own URIResolver and pass it in.
> ServiceClient can not resolve WSDL with imported schemas
> --------------------------------------------------------
>
> Key: AXIS2-4353
> URL: https://issues.apache.org/jira/browse/AXIS2-4353
> Project: Axis 2.0 (Axis2)
> Issue Type: Bug
> Components: client-api
> Affects Versions: 1.4.1, 1.4
> Environment: all
> Reporter: Ben Reif
> Priority: Blocker
>
> I am using the ServiceClient to invoke a Web Service, but the WSDL file and
> imported schema files are located within a jar file that is in the Classpth.
> I can get the Definition object, and I set the DocumentBaseURI to the proper
> URL pointing inside the jar file, but when I pass it to the ServiceClient I
> get an error saying that it can't resolve the imported schema files. This
> happens when it calls AxisService.createClientSideAxisService().
> It looks like a fix was put in the WSDLToAxisServiceBuilder class (the
> addition of the setCustomResolver() method) so that you can set a custom
> URIResolver to resolve imported schema files. This gets inherited by the
> WSDL11ToAxisServiceBuilder, however the problem is that this setter is not
> exposed to the ServiceClient, so I can never use it. The ServiceClient
> constructors and the AxisService.createClientSideAxisService() methods should
> take in an additional argument so that calling code can pass in the right
> URIResolver instance which would get set on the WSDL11ToAxisServiceBuilder
> instance.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.