You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by se...@apache.org on 2010/03/09 18:53:56 UTC
svn commit: r921014 [2/2] - in /cxf/trunk:
common/common/src/main/java/org/apache/cxf/jaxb/
rt/databinding/jaxb/src/main/java/org/apache/cxf/endpoint/dynamic/
rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/codegen/
rt/frontend/jaxrs/src/main/...
Modified: cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerResourceCreatedSpringProviderTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerResourceCreatedSpringProviderTest.java?rev=921014&r1=921013&r2=921014&view=diff
==============================================================================
--- cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerResourceCreatedSpringProviderTest.java (original)
+++ cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerResourceCreatedSpringProviderTest.java Tue Mar 9 17:53:56 2010
@@ -21,23 +21,39 @@ package org.apache.cxf.systest.jaxrs;
import java.io.File;
import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.Socket;
+import java.net.URI;
+import java.net.URISyntaxException;
import java.net.URL;
+import java.net.URLClassLoader;
import java.net.URLConnection;
+import java.util.Collections;
import java.util.List;
+import java.util.jar.Attributes;
+import java.util.jar.JarFile;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipInputStream;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.apache.cxf.helpers.DOMUtils;
+import org.apache.cxf.helpers.FileUtils;
import org.apache.cxf.helpers.IOUtils;
import org.apache.cxf.jaxrs.client.WebClient;
+import org.apache.cxf.jaxrs.ext.codegen.CodeGeneratorProvider;
+import org.apache.cxf.jaxrs.ext.xml.XMLSource;
+import org.apache.cxf.jaxrs.model.ClassResourceInfo;
import org.apache.cxf.jaxrs.model.wadl.WadlGenerator;
+import org.apache.cxf.jaxrs.utils.ResourceUtils;
import org.apache.cxf.testutil.common.AbstractBusClientServerTestBase;
+import org.apache.cxf.transport.http.HTTPConduit;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -74,7 +90,70 @@ public class JAXRSClientServerResourceCr
"http://localhost:9080/webapp/petstore", 1);
checkPetStoreInfo(resourceEls.get(0));
}
+
+ @Test
+ public void testPetStoreSource() throws Exception {
+ try {
+ WebClient wc = WebClient.create("http://localhost:9080/webapp/petstore");
+ HTTPConduit conduit = WebClient.getConfig(wc).getHttpConduit();
+ conduit.getClient().setReceiveTimeout(1000000);
+ conduit.getClient().setConnectionTimeout(1000000);
+ XMLSource source = wc.query("_code", "").query("_os", getOs()).get(XMLSource.class);
+ String link = source.getValue("ns:html/ns:body/ns:ul/ns:a/@href",
+ Collections.singletonMap("ns", "http://www.w3.org/1999/xhtml"));
+ WebClient wc2 = WebClient.create(link);
+ HTTPConduit conduit2 = WebClient.getConfig(wc2).getHttpConduit();
+ conduit2.getClient().setReceiveTimeout(1000000);
+ conduit2.getClient().setConnectionTimeout(1000000);
+ InputStream is = wc2.accept("application/zip").get(InputStream.class);
+ String tmpdir = System.getProperty("java.io.tmpdir");
+ File classes = new File(tmpdir, "cxf-jaxrs-test-compiled-src");
+ if (!classes.mkdir()) {
+ fail();
+ }
+ File unzippedSrc = new File(tmpdir, "cxf-jaxrs-test-unzipped-src");
+ if (!unzippedSrc.mkdir()) {
+ fail();
+ }
+ try {
+ compileSrc(classes, unzippedSrc, is);
+ verifyClasses(classes);
+ } finally {
+ FileUtils.removeDir(classes);
+ FileUtils.removeDir(unzippedSrc);
+ }
+ } finally {
+ ClassResourceInfo cri =
+ ResourceUtils.createClassResourceInfo(PetStore.class, PetStore.class, true, true);
+ new CodeGeneratorProvider().removeCode(cri);
+ }
+ }
+ private void verifyClasses(File classesDir) {
+ List<File> clsFiles = FileUtils.getFilesRecurse(classesDir, ".+\\.class$");
+ assertEquals(1, clsFiles.size());
+ assertTrue(checkContains(clsFiles, "org.apache.cxf.systest.jaxrs.PetStore.class"));
+ }
+
+ private boolean checkContains(List<File> clsFiles, String name) {
+
+ for (File f : clsFiles) {
+ if (f.getAbsolutePath().replace(getPathSep(), ".").endsWith(name)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private String getPathSep() {
+ String os = System.getProperty("os.name");
+ if (os.toLowerCase().contains("win")) {
+ return "\\";
+ } else {
+ return "/";
+ }
+ }
+
private void checkBookStoreInfo(Element resource) {
assertEquals("/bookstore", resource.getAttribute("path"));
}
@@ -221,4 +300,146 @@ public class JAXRSClientServerResourceCr
return IOUtils.toString(in);
}
+ private void compileSrc(File classes, File unzippedSrc, InputStream zipFile) throws Exception {
+ unzip(zipFile, unzippedSrc);
+ StringBuilder classPath = new StringBuilder();
+ try {
+ setupClasspath(classPath, this.getClass().getClassLoader());
+ } catch (Exception ex) {
+ throw new RuntimeException(ex);
+ }
+
+ List<File> srcFiles = FileUtils.getFilesRecurse(unzippedSrc, ".+\\.java$");
+ if (!compileJavaSrc(classPath.toString(), srcFiles, classes.toString())) {
+ fail("Could not compile classes");
+ }
+ }
+
+ private void unzip(InputStream fin, File unzippedSrc) throws Exception {
+ ZipInputStream zin = new ZipInputStream(fin);
+ ZipEntry ze = null;
+ while ((ze = zin.getNextEntry()) != null) {
+ String entryName = ze.getName();
+ int index = entryName.lastIndexOf(System.getProperty("file.separator"));
+ File packageDir = new File(unzippedSrc, entryName.substring(0, index));
+ packageDir.mkdirs();
+ FileOutputStream fout = new FileOutputStream(
+ new File(packageDir, entryName.substring(index + 1)));
+ for (int c = zin.read(); c != -1; c = zin.read()) {
+ fout.write(c);
+ }
+ zin.closeEntry();
+ fout.close();
+ }
+ zin.close();
+ }
+
+ protected boolean compileJavaSrc(String classPath, List<File> srcList, String dest) {
+ String[] javacCommand = new String[srcList.size() + 7];
+
+ javacCommand[0] = "javac";
+ javacCommand[1] = "-classpath";
+ javacCommand[2] = classPath;
+ javacCommand[3] = "-d";
+ javacCommand[4] = dest;
+ javacCommand[5] = "-target";
+ javacCommand[6] = "1.5";
+
+ int i = 7;
+ for (File f : srcList) {
+ javacCommand[i++] = f.getAbsolutePath();
+ }
+ org.apache.cxf.common.util.Compiler javaCompiler
+ = new org.apache.cxf.common.util.Compiler();
+
+ return javaCompiler.internalCompile(javacCommand, 7);
+ }
+
+ static void setupClasspath(StringBuilder classPath, ClassLoader classLoader)
+ throws URISyntaxException, IOException {
+
+ ClassLoader scl = ClassLoader.getSystemClassLoader();
+ ClassLoader tcl = classLoader;
+ do {
+ if (tcl instanceof URLClassLoader) {
+ URL[] urls = ((URLClassLoader)tcl).getURLs();
+ if (urls == null) {
+ urls = new URL[0];
+ }
+ for (URL url : urls) {
+ if (url.getProtocol().startsWith("file")) {
+ File file;
+ if (url.toURI().getPath() == null) {
+ continue;
+ }
+ try {
+ file = new File(url.toURI().getPath());
+ } catch (URISyntaxException urise) {
+ if (url.getPath() == null) {
+ continue;
+ }
+ file = new File(url.getPath());
+ }
+
+ if (file.exists()) {
+ classPath.append(file.getAbsolutePath())
+ .append(System
+ .getProperty("path.separator"));
+
+ if (file.getName().endsWith(".jar")) {
+ addClasspathFromManifest(classPath, file);
+ }
+ }
+ }
+ }
+ }
+ tcl = tcl.getParent();
+ if (null == tcl) {
+ break;
+ }
+ } while(!tcl.equals(scl.getParent()));
+ }
+
+ static void addClasspathFromManifest(StringBuilder classPath, File file)
+ throws URISyntaxException, IOException {
+
+ JarFile jar = new JarFile(file);
+ Attributes attr = null;
+ if (jar.getManifest() != null) {
+ attr = jar.getManifest().getMainAttributes();
+ }
+ if (attr != null) {
+ String cp = attr.getValue("Class-Path");
+ while (cp != null) {
+ String fileName = cp;
+ int idx = fileName.indexOf(' ');
+ if (idx != -1) {
+ fileName = fileName.substring(0, idx);
+ cp = cp.substring(idx + 1).trim();
+ } else {
+ cp = null;
+ }
+ URI uri = new URI(fileName);
+ File f2;
+ if (uri.isAbsolute()) {
+ f2 = new File(uri);
+ } else {
+ f2 = new File(file, fileName);
+ }
+ if (f2.exists()) {
+ classPath.append(f2.getAbsolutePath());
+ classPath.append(System.getProperty("path.separator"));
+ }
+ }
+ }
+ }
+
+ private String getOs() {
+ String os = System.getProperty("os.name");
+ if (os.toLowerCase().contains("win")) {
+ return "win";
+ } else {
+ return "unix";
+ }
+ }
}
Modified: cxf/trunk/systests/jaxrs/src/test/resources/jaxrs_spring_providers/WEB-INF/beans.xml
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/jaxrs/src/test/resources/jaxrs_spring_providers/WEB-INF/beans.xml?rev=921014&r1=921013&r2=921014&view=diff
==============================================================================
--- cxf/trunk/systests/jaxrs/src/test/resources/jaxrs_spring_providers/WEB-INF/beans.xml (original)
+++ cxf/trunk/systests/jaxrs/src/test/resources/jaxrs_spring_providers/WEB-INF/beans.xml Tue Mar 9 17:53:56 2010
@@ -34,6 +34,7 @@ http://cxf.apache.org/schemas/jaxrs.xsd"
</jaxrs:serviceBeans>
<jaxrs:providers>
<bean class="org.apache.cxf.systest.jaxrs.BadgerFishProvider"/>
+ <bean class="org.apache.cxf.jaxrs.ext.codegen.CodeGeneratorProvider"/>
<ref bean="exceptionMapper"/>
<ref bean="exceptionMapper2"/>
</jaxrs:providers>