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);
+ }
+
}