From aba03816bfe2d775f3235c7d8a7225b575945a2f Mon Sep 17 00:00:00 2001 From: antelder Date: Thu, 7 Aug 2008 08:37:14 +0000 Subject: Apply patch from Ramkumar Ramalingam for TUSCANY-2493: Specs gap in implementation-spring location attribute git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@683550 13f79535-47bb-0310-9956-ffa450edef68 --- .../spring/xml/SpringXMLComponentTypeLoader.java | 80 ++++++++++++---------- .../META-INF/sca/SpringSCAProperty-context.xml | 34 --------- .../itests/helloworld/SpringSCAProperty.composite | 2 +- .../src/test/resources/spring/META-INF/MANIFEST.MF | 3 + .../META-INF/spring/SpringSCAProperty-context.xml | 34 +++++++++ 5 files changed, 81 insertions(+), 72 deletions(-) delete mode 100644 java/sca/modules/implementation-spring/src/test/resources/META-INF/sca/SpringSCAProperty-context.xml create mode 100644 java/sca/modules/implementation-spring/src/test/resources/spring/META-INF/MANIFEST.MF create mode 100644 java/sca/modules/implementation-spring/src/test/resources/spring/META-INF/spring/SpringSCAProperty-context.xml diff --git a/java/sca/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/xml/SpringXMLComponentTypeLoader.java b/java/sca/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/xml/SpringXMLComponentTypeLoader.java index 80dde1be89..50c7bfa9f3 100644 --- a/java/sca/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/xml/SpringXMLComponentTypeLoader.java +++ b/java/sca/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/xml/SpringXMLComponentTypeLoader.java @@ -446,22 +446,21 @@ public class SpringXMLComponentTypeLoader { throws ContributionReadException { File manifestFile = null; File appXmlFile; - File locationFile = new File(locationAttr); - - if (!locationFile.exists()) { - // FIXME hack - URL url = cl.getResource(locationAttr); - if (url != null) { - return new UrlResource(url); - } + File locationFile = null; + + URL url = cl.getResource(locationAttr); + if (url != null) { + String path = url.getPath(); + locationFile = new File(path); + } else { throw new ContributionReadException( - "SpringXMLLoader getApplicationContextResource: " + "unable to find resource file " - + locationFile.toString()); + "SpringXMLLoader getApplicationContextResource: " + "unable to find resource file " + + locationAttr); } if (locationFile.isDirectory()) { try { - manifestFile = new File(locationFile, "META-INF/MANIFEST.MF"); + manifestFile = new File(locationFile, "META-INF"+ File.separator +"MANIFEST.MF"); if (manifestFile.exists()) { Manifest mf = new Manifest(new FileInputStream(manifestFile)); Attributes mainAttrs = mf.getMainAttributes(); @@ -474,44 +473,51 @@ public class SpringXMLComponentTypeLoader { } } // no manifest-specified Spring context, use default - appXmlFile = new File(locationFile, APPLICATION_CONTEXT); + appXmlFile = new File(locationFile, "META-INF" + File.separator + "spring" + + File.separator + APPLICATION_CONTEXT); if (appXmlFile.exists()) { return new UrlResource(appXmlFile.toURL()); } } catch (IOException e) { throw new ContributionReadException("Error reading manifest " + manifestFile); } - } else { - try { - JarFile jf = new JarFile(locationFile); - JarEntry je; - Manifest mf = jf.getManifest(); - if (mf != null) { - Attributes mainAttrs = mf.getMainAttributes(); - String appCtxPath = mainAttrs.getValue("Spring-Context"); - if (appCtxPath != null) { - je = jf.getJarEntry(appCtxPath); - if (je != null) { - // TODO return a Spring specific Resource type for jars - return new UrlResource(new URL("jar:" + locationFile.toURI().toURL() + "!/" + appCtxPath)); + } else { + if (locationFile.isFile() && locationFile.getName().indexOf(".jar") < 0) { + return new UrlResource(url); + } + else { + try { + JarFile jf = new JarFile(locationFile); + JarEntry je; + Manifest mf = jf.getManifest(); + if (mf != null) { + Attributes mainAttrs = mf.getMainAttributes(); + String appCtxPath = mainAttrs.getValue("Spring-Context"); + if (appCtxPath != null) { + je = jf.getJarEntry(appCtxPath); + if (je != null) { + // TODO return a Spring specific Resource type for jars + return new UrlResource(new URL("jar:" + locationFile.toURI().toURL() + "!/" + appCtxPath)); + } } } + je = jf.getJarEntry("META-INF" + File.separator + "spring" + + File.separator + APPLICATION_CONTEXT); + if (je != null) { + return new UrlResource(new URL("jar:" + locationFile.toURI().toURL() + "!/" + APPLICATION_CONTEXT)); + } + } catch (IOException e) { + // bad archive + // TODO: create a more appropriate exception type + throw new ContributionReadException( + "SpringXMLLoader getApplicationContextResource: " + " IO exception reading context file.", + e); } - je = jf.getJarEntry(APPLICATION_CONTEXT); - if (je != null) { - return new UrlResource(new URL("jar:" + locationFile.toURI().toURL() + "!/" + APPLICATION_CONTEXT)); - } - } catch (IOException e) { - // bad archive - // TODO: create a more appropriate exception type - throw new ContributionReadException( - "SpringXMLLoader getApplicationContextResource: " + " IO exception reading context file.", - e); } } - throw new ContributionReadException("SpringXMLLoader getApplicationContextResource: " + APPLICATION_CONTEXT - + "not found"); + throw new ContributionReadException("SpringXMLLoader getApplicationContextResource: " + + "META-INF/spring/" + APPLICATION_CONTEXT + "not found"); } // end method getApplicationContextResource /** diff --git a/java/sca/modules/implementation-spring/src/test/resources/META-INF/sca/SpringSCAProperty-context.xml b/java/sca/modules/implementation-spring/src/test/resources/META-INF/sca/SpringSCAProperty-context.xml deleted file mode 100644 index a181446ffb..0000000000 --- a/java/sca/modules/implementation-spring/src/test/resources/META-INF/sca/SpringSCAProperty-context.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/java/sca/modules/implementation-spring/src/test/resources/org/apache/tuscany/sca/implementation/spring/itests/helloworld/SpringSCAProperty.composite b/java/sca/modules/implementation-spring/src/test/resources/org/apache/tuscany/sca/implementation/spring/itests/helloworld/SpringSCAProperty.composite index b811122b41..af1b3be0a5 100644 --- a/java/sca/modules/implementation-spring/src/test/resources/org/apache/tuscany/sca/implementation/spring/itests/helloworld/SpringSCAProperty.composite +++ b/java/sca/modules/implementation-spring/src/test/resources/org/apache/tuscany/sca/implementation/spring/itests/helloworld/SpringSCAProperty.composite @@ -32,7 +32,7 @@ - + Hello diff --git a/java/sca/modules/implementation-spring/src/test/resources/spring/META-INF/MANIFEST.MF b/java/sca/modules/implementation-spring/src/test/resources/spring/META-INF/MANIFEST.MF new file mode 100644 index 0000000000..950dbeba4c --- /dev/null +++ b/java/sca/modules/implementation-spring/src/test/resources/spring/META-INF/MANIFEST.MF @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Spring-Context: META-INF/spring/SpringSCAProperty-context.xml + diff --git a/java/sca/modules/implementation-spring/src/test/resources/spring/META-INF/spring/SpringSCAProperty-context.xml b/java/sca/modules/implementation-spring/src/test/resources/spring/META-INF/spring/SpringSCAProperty-context.xml new file mode 100644 index 0000000000..36763a2d7a --- /dev/null +++ b/java/sca/modules/implementation-spring/src/test/resources/spring/META-INF/spring/SpringSCAProperty-context.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + \ No newline at end of file -- cgit v1.2.3