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/JaxWsDynamicClientTest.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/common/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/JaxWsDynamicClientTest.java
URL:
http://svn.apache.org/viewvc/cxf/trunk/systests/jaxws/src/test/java/org/apache/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/JaxWsDynamicClientTest.java
(original)
+++
cxf/trunk/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/JaxWsDynamicClientTest.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);
+ }
+
}