Hi all!

I'm writing a Web service proxy and I have a some trouble to publish
WSDL files that import other WSDL or XSD files. In my case I have a
WSDL file bis.wsdl (placed in the conf directory in the repository
directory) importing an XSD located in the same directory. The WSDL
file uses a relative URL for the schemaLocation attribute:

<xsd:import namespace="..." schemaLocation="bis.xsd"/>

When I try to use publishWSDL with
uri="file:repository/conf/bis.wsdl", I get the following error:

java.io.FileNotFoundException: This file was not found:
file:/Users/veithen/workspace/pim-ebxml/synapse/bis.xsd

Obviously Synapse (or Axis in this case) doesn't resolve bis.xsd
relative to the location of the WSDL, but relative to the working
directory. I get the same result when using
uri="file:///Users/veithen/workspace/pim-ebxml/synapse/repository/conf/bis.wsdl"
or key="conf/bis.wsdl". When I try with uri="repository/conf/bis.wsdl"
I get the following error:

java.lang.IllegalArgumentException: URI is not absolute

There seems to be no way to make this work.

One part of the problem is that the code in ProxyService only calls
WSDLToAxisServiceBuilder#setBaseUri for WSDL 2.0 documents (in my case
it's a WSDL 1.1 document). This is obviously a bug. After correcting
this (see attached patch), I can use
uri="file:///Users/veithen/workspace/pim-ebxml/synapse/repository/conf/bis.wsdl"
to get the expected result. However, using absolute filenames in
synapse.xml is not appropriate. When using
uri="file:repository/conf/bis.wsdl" I now get the following error:

org.apache.ws.commons.schema.XmlSchemaException:
/Users/veithen/workspace/pim-ebxml/synapse/bis.xsd (No such file or
directory)

This is not so surprising since "file:repository/conf/bis.wsdl" is
actually an invalid URL (even if Synapse seems to accept it in some
contexts): only "repository/conf/bis.wsdl" and
"file:///Users/veithen/workspace/pim-ebxml/synapse/repository/conf/bis.wsdl"
are strictly valid, one as relative URL, the other as absolute URL.

For the two other alternatives (uri="repository/conf/bis.wsdl" and
key="conf/bis.wsdl") I get, not surprisingly, the same error as
before.

Does anybody have a solution for this problem?

Regards,

Andreas

PS: I'm using the latest code from the Subversion repository.
Index: 
modules/core/src/main/java/org/apache/synapse/core/axis2/ProxyService.java
===================================================================
--- modules/core/src/main/java/org/apache/synapse/core/axis2/ProxyService.java  
(revision 605042)
+++ modules/core/src/main/java/org/apache/synapse/core/axis2/ProxyService.java  
(working copy)
@@ -248,8 +248,6 @@
                                 equals(wsdlNamespace.getNamespaceURI())) {
                             wsdlToAxisServiceBuilder =
                                     new 
WSDL20ToAxisServiceBuilder(wsdlInputStream, null, null);
-                            wsdlToAxisServiceBuilder.setBaseUri(
-                                wsdlURI != null ? wsdlURI.toString() : "");
 
                         } else if 
(org.apache.axis2.namespace.Constants.NS_URI_WSDL11.
                                 equals(wsdlNamespace.getNamespaceURI())) {
@@ -265,6 +263,9 @@
                                     "Could not get the WSDL to Axis Service 
Builder");
                         }
 
+                        wsdlToAxisServiceBuilder.setBaseUri(
+                                wsdlURI != null ? wsdlURI.toString() : "");
+                        
                         if (trace()) {
                             trace.info("Populating Axis2 service using WSDL");
                             if (trace.isTraceEnabled()) {
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to