Aaron Evans <aaronmevans <at> yahoo.ca> writes:

> 
> I generated a client stub based on some wsdl using the eclipse plugin.
> 
> In my stub, it created a static String for axis home and set it to null.
> It also had a comment that suggested this was ok:
> 
> //default axis home being null forces the system to pick up the 
> //mars from the axis2 library
> public static final String AXIS2_HOME = null;
> 
> However, when I run my client from windows, I get the stack trace given below.
> 
> If I set this value to a path that points to a directory with axis2.xml and
> the modules directory in it, then it works fine.
> 
> However, since I am just using axis in a client capacity and I didn't change
> the default axis2.xml or modules, I really think I should be able to run it
> without having to specify any "AXIS2_HOME" configuration.
> 
> I have tried a few workarounds, but haven't been successful yet.  
> 

As an update to this, I did manage to patch this and I explain how to do
it here if anyone else is interested.  

If axis home is null, then it attempts to use the user's home
directory and I believe that is what was causing the "java.io.IOException: 
Access is denied" exception.  

To fix this this first problem, I forced it to use null for the repo location 
by implementing a simple AxisConfigurator that extends FileSystemConfigurator:

public class MyClientAxisConfigurator extends FileSystemConfigurator
{
        public MyClientAxisConfigurator()
        {
                //Use null for axis home
                //Use false for isServer
                super(null,false);
        }
        
        public AxisConfiguration getAxisConfiguration() throws AxisFault
        {
                //pass null for repo location
                return new DeploymentEngine().loadClient(null);
        }
}

Then it is just a matter of modifying the generated Client stub constructor
that takes an endpoint as an argument like so:


public WebServiceClientStub(String targetEndpoint) throws java.lang.Exception
{
    //comment out this line
    //this(
new ConfigurationContextFactory().createConfigurationContextFromFileSystem(
AXIS2_HOME), targetEndpoint);

    //add this line
    this(new ConfigurationContextFactory().createConfigurationContext(
new MyClientAxisConfigurator()),targetEndpoint);
}


Finally, the "addressing" module is required, so I simply copied addressing.mar
from the axis binary distribution to my lib directory and renamed it to 
addressing.jar and added to the class path of my eclipse project.

hope this is helpful to someone.  I will update the JIRA issue as well.

aaron


Reply via email to