[
https://issues.apache.org/jira/browse/CXF-1798?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12644376#action_12644376
]
Peter Connolly commented on CXF-1798:
-------------------------------------
The root issue is that DynamicClientFactory is dependent on consumers using a
URLClassLoader. As you mentioned, the original notes for this JIRA describe
two bugs that stem from this root issue: 1. An empty classpath results in an
invalid system call to javac and 2. Using any classloader that doesn't extend
URLClassLoader will result in an empty classpath. I'm not asking that Sun does
a better job at arranging their classloaders, I'm suggesting that
DynamicClientFactory could make use of the way Sun prescribes doing parent
classloader delegation. One way to accomplish all of these goals, as well as
improve the security and maintainability of DynamicClientFactory, could be to
use the Compiler or ToolProvider classes.
> DynamicClientFactory does not work when called through Ant
> ----------------------------------------------------------
>
> Key: CXF-1798
> URL: https://issues.apache.org/jira/browse/CXF-1798
> Project: CXF
> Issue Type: Bug
> Affects Versions: 2.0.5
> Environment: I am using Groovy 1.5.6 with GroovyWS 0.3.1 on Windows
> XP. I am calling Groovy via Ant 1.7.0.
> Reporter: Peter Connolly
> Priority: Minor
> Attachments: build.xml, GroovyWSTest.java, output.log
>
>
> I've created GroovyWS code to talk to a web service. GroovyWS uses ApacheCXF
> 2.0.5 to dynamically create classes for the web services objects. When this
> code is run via a batch script, it runs correctly. When this code is run via
> Ant, I get this error:
> [java] javac: invalid flag:
> C:/DOCUME~1/PCONNO~1/LOCALS~1/Temp/org.apache.
> [EMAIL PROTECTED]
> I think there are a couple of defects in the class DynamicClientFactory.
> First, in the compileJavaSrc method, the call to javac is constructed without
> checking if the classpath is populated. The code could be modified to
> conditionally append the classpath similar to this:
> static boolean compileJavaSrc(Path classPath, Path srcPath, String dest) {
> String[] srcList = srcPath.list();
> List<String> javacCommand = new ArrayList<String>();
> javacCommand.add("javac");
> if(classPath != null && classPath.size() > 0){
> javacCommand.add("-classpath");
> javacCommand.add(classPath.toString());
> }
> javacCommand.add("-d");
> javacCommand.add(dest.toString());
> javacCommand.add("-target");
> javacCommand.add("1.5");
> for (int i = 0; i < srcList.length; i++) {
> javacCommand.add(srcList[i]);
> }
> org.apache.cxf.tools.util.Compiler javaCompiler
> = new org.apache.cxf.tools.util.Compiler();
> return javaCompiler.internalCompile(javacCommand.toArray(new
> String[javacCommand.size()]), javacCommand.size());
> }
> The next issue with DynamicClientFactory is the setupClasspath method. This
> method explicitly tests if the ClassLoader inherits from URLClassLoader and
> then appends the URLs from that URLClassloader to its own classpath. The
> AntClassLoader, unfortunately, does not extend from the URLClassLoader. When
> the classpath is constructed it is empty. If the compileJavaSrc method is
> fixed as above many calls will still fail because there is a dependency on
> classes that are not present during compilation (i.e. GroovyWS classes).
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.