Paul,

I created a new issue for that (SYNAPSE-200). However as I said in my initial mail, the patch only solves a small part of the problem by making this work for absolute URLs (which I don't want). I think a better and more general solution is needed. Ideally, Synapse should also be able to load imported artifacts from its registry. What I would like to have is something like this:

<publishWSDL key="conf/bis.wsdl">
  <resource location="bis.xsd" key="conf/bis.xsd"/>
</publishWSDL>

Technically this can be implemented by setting a custom URIResolver on the WSDLToAxisServiceBuilder.

If I provide a patch that implements this, would you (or somebody else) agree to review it and to commit it?

Andreas


On 18 Dec 2007, at 15:28, Paul Fremantle wrote:

Andreas

Thanks for reporting the bug. Please can you raise a JIRA and attach your patch - clicking on the box granting the ASF a license to use your patch.

We will try to get this into the next release.

Paul

On Dec 18, 2007 11:35 AM, Andreas Veithen <[EMAIL PROTECTED]> wrote:
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.

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



--
Paul Fremantle
Co-Founder and VP of Technical Sales, WSO2
OASIS WS-RX TC Co-chair

blog: http://pzf.fremantle.org
[EMAIL PROTECTED]

"Oxygenating the Web Service Platform", www.wso2.com

Reply via email to