Freeman, I think the Compiler object will need to hold the temp file in and instance variable and delete it in a finally after the javac call completes. Right now, it won't delete till the end. Thus, if you end up create thousands of DynamicClients, you end up with 1000s of these until the vm exits.
Dan On Wednesday, June 20, 2012 11:34:21 PM [email protected] wrote: > Author: ffang > Date: Wed Jun 20 23:34:21 2012 > New Revision: 1352369 > > URL: http://svn.apache.org/viewvc?rev=1352369&view=rev > Log: > [CXF-4387]put long classpath in @argfiles to avoid javac command too > long(windows has limitation for command length) > > Modified: > cxf/trunk/api/src/main/java/org/apache/cxf/common/util/Compiler.java > > cxf/trunk/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/JaxWs > DynamicClientTest.java > > Modified: > cxf/trunk/api/src/main/java/org/apache/cxf/common/util/Compiler.java URL: > http://svn.apache.org/viewvc/cxf/trunk/api/src/main/java/org/apache/cxf/c > ommon/util/Compiler.java?rev=1352369&r1=1352368&r2=1352369&view=diff > ========================================================================= > ===== --- > cxf/trunk/api/src/main/java/org/apache/cxf/common/util/Compiler.java > (original) +++ > cxf/trunk/api/src/main/java/org/apache/cxf/common/util/Compiler.java Wed > Jun 20 23:34:21 2012 @@ -150,7 +150,6 @@ public class Compiler { > javacstr = SystemPropertyAction.getProperty("java.home") + > fsep + ".." + fsep + "bin" + fsep + platformjavacname; > } > - > list.add(javacstr); > // End of honoring java.home for used javac > > @@ -163,7 +162,9 @@ public class Compiler { > list.add("-J-Xmx" + maxMemory); > > addArgs(list); > - > + int classpathIdx = list.indexOf("-classpath"); > + String classpath = list.get(classpathIdx + 1); > + checkLongClasspath(classpath, list, classpathIdx); > int idx = list.size(); > list.addAll(Arrays.asList(files)); > > @@ -273,6 +274,27 @@ public class Compiler { > } > return strBuffer.toString().length() > 4096 ? true : false; > } > + > + private boolean isLongClasspath(String classpath) { > + return classpath.length() > 2048 ? true : false; > + } > + > + private void checkLongClasspath(String classpath, List<String> list, > int classpathIdx) { + if (isLongClasspath(classpath)) { > + PrintWriter out = null; > + File tmpFile; > + try { > + tmpFile = > FileUtils.createTempFile("cxf-compiler-classpath", null); + > out = new PrintWriter(new FileWriter(tmpFile)); + > out.println(classpath); > + out.flush(); > + out.close(); > + list.set(classpathIdx + 1, "@" + tmpFile); > + } catch (IOException e) { > + System.err.print("[ERROR] can't write long classpath to > @argfile"); + } > + } > + } > > public void setEncoding(String string) { > encoding = string; > > Modified: > cxf/trunk/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/JaxWs > DynamicClientTest.java URL: > http://svn.apache.org/viewvc/cxf/trunk/systests/jaxws/src/test/java/org/a > pache/cxf/systest/jaxws/JaxWsDynamicClientTest.java?rev=1352369&r1=1352368 > &r2=1352369&view=diff > ========================================================================= > ===== --- > cxf/trunk/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/JaxWs > DynamicClientTest.java (original) +++ > cxf/trunk/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/JaxWs > DynamicClientTest.java Wed Jun 20 23:34:21 2012 @@ -105,4 +105,19 @@ > public class JaxWsDynamicClientTest exte > client.invoke("init", list); > } > > + @Test > + public void testArgfiles() throws Exception { > + System.setProperty("org.apache.cxf.common.util.Compiler-fork", > "true"); + JaxWsDynamicClientFactory dcf = > JaxWsDynamicClientFactory.newInstance(); + Client client = > dcf.createClient(new URL("http://localhost:" + > + PORT1 + "/ArrayService?wsdl")); + > + String[] values = new String[] {"foobar", "something" }; > + List<String> list = Arrays.asList(values); > + > + client.getOutInterceptors().add(new LoggingOutInterceptor()); > + client.getInInterceptors().add(new LoggingInInterceptor()); > + client.invoke("init", list); > + } > + > } -- Daniel Kulp [email protected] - http://dankulp.com/blog Talend Community Coder - http://coders.talend.com
