You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jaxme-dev@ws.apache.org by jo...@apache.org on 2006/09/05 14:36:43 UTC
svn commit: r440331 - in
/webservices/jaxme/trunk/ws-jaxme/maven-jaxme-plugin: ./
src/main/java/org/apache/ws/jaxme/maven/plugins/
src/test/java/org/apache/ws/jaxme/maven/plugins/
Author: jochen
Date: Tue Sep 5 05:36:42 2006
New Revision: 440331
URL: http://svn.apache.org/viewvc?view=rev&rev=440331
Log:
Added the EntityResolverFactory.
Added:
webservices/jaxme/trunk/ws-jaxme/maven-jaxme-plugin/src/main/java/org/apache/ws/jaxme/maven/plugins/EntityResolverFactory.java
Modified:
webservices/jaxme/trunk/ws-jaxme/maven-jaxme-plugin/pom.xml
webservices/jaxme/trunk/ws-jaxme/maven-jaxme-plugin/src/main/java/org/apache/ws/jaxme/maven/plugins/ISchemaCollection.java
webservices/jaxme/trunk/ws-jaxme/maven-jaxme-plugin/src/main/java/org/apache/ws/jaxme/maven/plugins/JaxMeMojo.java
webservices/jaxme/trunk/ws-jaxme/maven-jaxme-plugin/src/main/java/org/apache/ws/jaxme/maven/plugins/SchemaCollection.java
webservices/jaxme/trunk/ws-jaxme/maven-jaxme-plugin/src/main/java/org/apache/ws/jaxme/maven/plugins/SchemaCollectionProcessor.java
webservices/jaxme/trunk/ws-jaxme/maven-jaxme-plugin/src/test/java/org/apache/ws/jaxme/maven/plugins/BaseTest.java
Modified: webservices/jaxme/trunk/ws-jaxme/maven-jaxme-plugin/pom.xml
URL: http://svn.apache.org/viewvc/webservices/jaxme/trunk/ws-jaxme/maven-jaxme-plugin/pom.xml?view=diff&rev=440331&r1=440330&r2=440331
==============================================================================
--- webservices/jaxme/trunk/ws-jaxme/maven-jaxme-plugin/pom.xml (original)
+++ webservices/jaxme/trunk/ws-jaxme/maven-jaxme-plugin/pom.xml Tue Sep 5 05:36:42 2006
@@ -141,6 +141,11 @@
<version>0.5.2-SNAPSHOT</version>
</dependency>
<dependency>
+ <groupId>org.apache.ws.jaxme</groupId>
+ <artifactId>jaxme2-rt</artifactId>
+ <version>0.5.2-SNAPSHOT</version>
+ </dependency>
+ <dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-plugin-api</artifactId>
<version>2.0.4</version>
Added: webservices/jaxme/trunk/ws-jaxme/maven-jaxme-plugin/src/main/java/org/apache/ws/jaxme/maven/plugins/EntityResolverFactory.java
URL: http://svn.apache.org/viewvc/webservices/jaxme/trunk/ws-jaxme/maven-jaxme-plugin/src/main/java/org/apache/ws/jaxme/maven/plugins/EntityResolverFactory.java?view=auto&rev=440331
==============================================================================
--- webservices/jaxme/trunk/ws-jaxme/maven-jaxme-plugin/src/main/java/org/apache/ws/jaxme/maven/plugins/EntityResolverFactory.java (added)
+++ webservices/jaxme/trunk/ws-jaxme/maven-jaxme-plugin/src/main/java/org/apache/ws/jaxme/maven/plugins/EntityResolverFactory.java Tue Sep 5 05:36:42 2006
@@ -0,0 +1,125 @@
+/*
+ * Copyright 2006 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.ws.jaxme.maven.plugins;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.net.URL;
+
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.xml.sax.EntityResolver;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+import org.xml.sax.ext.EntityResolver2;
+
+
+/**
+ * A factory for entity resolvers.
+ */
+public class EntityResolverFactory {
+ private abstract static class EntityResolver2Impl implements EntityResolver2 {
+ public InputSource getExternalSubset(String name, String baseURI)
+ throws SAXException, IOException {
+ return null;
+ }
+ public InputSource resolveEntity(String pName, String pPublicId, String pBaseURI, String pSystemId)
+ throws SAXException, IOException {
+ return resolveEntity(pPublicId, pSystemId);
+ }
+ }
+
+ private static class FilesEntityResolver extends EntityResolver2Impl {
+ private final String prefix;
+ FilesEntityResolver(String pPrefix) {
+ prefix = pPrefix;
+ }
+ public InputSource resolveEntity(String pPublicId, String pSystemId)
+ throws SAXException, IOException {
+ if (pSystemId == null) {
+ return null;
+ }
+ File file = new File(prefix + pSystemId);
+ if (!file.exists()) {
+ return null;
+ }
+ final InputSource isource;
+ try {
+ isource = new InputSource(new FileInputStream(file));
+ } catch (IOException e) {
+ throw new SAXException("Failed to open file " + file.getPath() + ": " + e.getMessage(), e);
+ }
+ isource.setSystemId(file.toURI().toURL().toExternalForm());
+ return isource;
+ }
+ }
+
+ private static class ClasspathEntityResolver extends EntityResolver2Impl {
+ private final String prefix;
+ ClasspathEntityResolver(String pPrefix) {
+ prefix = pPrefix == null ? "" : pPrefix;
+ }
+ public InputSource resolveEntity(String pPublicId, String pSystemId) throws SAXException, IOException {
+ if (pSystemId == null) {
+ return null;
+ }
+ URL url = Thread.currentThread().getContextClassLoader().getResource(prefix + pSystemId);
+ if (url == null) {
+ return null;
+ }
+ final InputSource isource;
+ try {
+ isource = new InputSource(url.openStream());
+ } catch (IOException e) {
+ throw new SAXException("Failed to open URL " + url.toExternalForm() + ": " + e.getMessage(), e);
+ }
+ isource.setSystemId(url.toExternalForm());
+ return isource;
+ }
+ }
+
+ static EntityResolver getEntityResolver(String pMode)
+ throws MojoFailureException, MojoExecutionException {
+ if (pMode == null || pMode.length() == 0 || "files".equals(pMode)) {
+ return null;
+ }
+ if (pMode.startsWith("files:")) {
+ final String prefix = pMode.substring("files:".length());
+ return new FilesEntityResolver(prefix);
+ }
+ if ("classpath".equals(pMode)) {
+ return new ClasspathEntityResolver(null);
+ }
+ if (pMode.startsWith("classpath:")) {
+ final String prefix = pMode.substring("classpath:".length());
+ return new ClasspathEntityResolver(prefix);
+ }
+ if (pMode.startsWith("class:")) {
+ final String className = pMode.substring("class:".length());
+ try {
+ return (EntityResolver) Thread.currentThread().getContextClassLoader().loadClass(className).newInstance();
+ } catch (ClassNotFoundException e) {
+ throw new MojoExecutionException("Failed to load resolver class " + className + ": " + e.getMessage(), e);
+ } catch (InstantiationException e) {
+ throw new MojoExecutionException("Failed to instantiate resolver class " + className + ": " + e.getMessage(), e);
+ } catch (IllegalAccessException e) {
+ throw new MojoExecutionException("Illegal access to resolver class " + className + ": " + e.getMessage(), e);
+ }
+ }
+ throw new MojoFailureException("Invalid value for resolver mode: " + pMode);
+ }
+}
Modified: webservices/jaxme/trunk/ws-jaxme/maven-jaxme-plugin/src/main/java/org/apache/ws/jaxme/maven/plugins/ISchemaCollection.java
URL: http://svn.apache.org/viewvc/webservices/jaxme/trunk/ws-jaxme/maven-jaxme-plugin/src/main/java/org/apache/ws/jaxme/maven/plugins/ISchemaCollection.java?view=diff&rev=440331&r1=440330&r2=440331
==============================================================================
--- webservices/jaxme/trunk/ws-jaxme/maven-jaxme-plugin/src/main/java/org/apache/ws/jaxme/maven/plugins/ISchemaCollection.java (original)
+++ webservices/jaxme/trunk/ws-jaxme/maven-jaxme-plugin/src/main/java/org/apache/ws/jaxme/maven/plugins/ISchemaCollection.java Tue Sep 5 05:36:42 2006
@@ -97,7 +97,7 @@
* behaviour. A good example is the
* <code>org.apache.ws.jaxme.pm.generator.jdbc.JaxMeJdbcSG</code>.
*/
- String[] getSgFactoryChain();
+ String[] getSgFactoryChains();
/**
* The target directory for source files. Defaults to
@@ -121,8 +121,7 @@
* Returns a set of properties, which are being set on the
* generator.
*/
- public Map getProperties();
-
+ Map getProperties();
/**
* Returns a prefix, where to add the schema files to the generated jar
@@ -130,5 +129,19 @@
* files are being added. Use "" or "/" to add schema files to the
* jar files root directory.
*/
- public String getSchemaTargetPrefix();
+ String getSchemaTargetPrefix();
+
+ /**
+ * Returns a mechanism for entity resolving. The following modes
+ * are available:
+ * <table>
+ * <tr><td>files</td><td>Entities are resolved in the local file system.
+ * This is the default</td></tr>
+ * <tr><td>classpath</td><td>Entities are resolved in the classpath.</td></tr>
+ * <tr><td>class:<classname></td><td>
+ * Entities are resolved through a SAX entity resolver, which is an instance
+ * of the given class</td></tr>
+ * </table>
+ */
+ String getEntityResolverMode();
}
Modified: webservices/jaxme/trunk/ws-jaxme/maven-jaxme-plugin/src/main/java/org/apache/ws/jaxme/maven/plugins/JaxMeMojo.java
URL: http://svn.apache.org/viewvc/webservices/jaxme/trunk/ws-jaxme/maven-jaxme-plugin/src/main/java/org/apache/ws/jaxme/maven/plugins/JaxMeMojo.java?view=diff&rev=440331&r1=440330&r2=440331
==============================================================================
--- webservices/jaxme/trunk/ws-jaxme/maven-jaxme-plugin/src/main/java/org/apache/ws/jaxme/maven/plugins/JaxMeMojo.java (original)
+++ webservices/jaxme/trunk/ws-jaxme/maven-jaxme-plugin/src/main/java/org/apache/ws/jaxme/maven/plugins/JaxMeMojo.java Tue Sep 5 05:36:42 2006
@@ -19,9 +19,14 @@
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
+import java.util.HashSet;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import java.util.Set;
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.factory.ArtifactFactory;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
@@ -38,7 +43,7 @@
* @goal jaxme
* @phase generate-sources
* @description Runs the JaxMe binding compiler and generates the source files.
- * @requiresDependencyResolution test
+ * @requiresDependencyResolution compile
*/
public class JaxMeMojo extends AbstractMojo implements ISchemaCollection {
/** This property specifies a set of external
@@ -99,14 +104,7 @@
*/
private FileSet[] produces;
- /** The Maven project.
- * @parameter expression="${project}"
- * @required
- * @readonly
- */
- private MavenProject project;
-
- /** The properties being set on the generator.
+ /** The properties being set on the generator.
* @parameter
*/
private Map properties;
@@ -147,7 +145,7 @@
* <code>org.apache.ws.jaxme.pm.generator.jdbc.JaxMeJdbcSG</code>.
* @parameter
*/
- private String[] sgFactoryChain;
+ private String[] sgFactoryChains;
/** The target directory for source files. Defaults to
* @parameter expression="${project.build.directory}/generated-sources/jaxme/java"
@@ -173,6 +171,21 @@
private SchemaCollection[] schemaCollections;
/**
+ * Returns a mechanism for entity resolving. The following modes
+ * are available:
+ * <table>
+ * <tr><td>files</td><td>Entities are resolved in the local file system.
+ * This is the default</td></tr>
+ * <tr><td>classpath</td><td>Entities are resolved in the classpath.</td></tr>
+ * <tr><td>class:<classname></td><td>
+ * Entities are resolved through a SAX entity resolver, which is an instance
+ * of the given class</td></tr>
+ * </table>
+ * @parameter default-value="files"
+ */
+ private String entityResolverMode;
+
+ /**
* Returns a prefix, where to add the schema files to the generated jar
* file, if you want that. Defaults to null, in which case no schema
* files are being added. Use "" or "/" to add schema files to the
@@ -181,6 +194,27 @@
*/
private String schemaTargetPrefix;
+ /** The Maven project.
+ * @parameter expression="${project}"
+ * @required
+ * @readonly
+ */
+ private MavenProject project;
+
+ /**
+ * @parameter expression="${component.org.apache.maven.artifact.factory.ArtifactFactory}"
+ * @required
+ * @readonly
+ */
+ private ArtifactFactory artifactFactory;
+
+ /**
+ * @parameter expression="${plugin.artifacts}"
+ * @required
+ * @read-only
+ */
+ private List pluginArtifacts;
+
public FileSet[] getBindings() {
return bindings;
}
@@ -230,8 +264,8 @@
return schemaReader;
}
- public String[] getSgFactoryChain() {
- return sgFactoryChain;
+ public String[] getSgFactoryChains() {
+ return sgFactoryChains;
}
public String getSrcTarget() {
@@ -250,6 +284,10 @@
return schemaTargetPrefix;
}
+ public String getEntityResolverMode() {
+ return entityResolverMode;
+ }
+
private ClassLoader getClassLoader(ClassLoader pParent) throws MojoFailureException {
List clElements = getClasspathElements();
if (clElements == null && clElements.size() == 0) {
@@ -298,6 +336,36 @@
}
}
+ private void addPluginArtifacts() {
+ Set projectArtifacts = new HashSet(project.getDependencyArtifacts());
+ for (Iterator iter = pluginArtifacts.iterator(); iter.hasNext(); ) {
+ Artifact pluginArtifact = (Artifact) iter.next();
+ if (pluginArtifact.getGroupId().startsWith("org.apache.ws.jaxme")) {
+ boolean found = false;
+ for (Iterator iter2 = projectArtifacts.iterator(); iter2.hasNext(); ) {
+ Artifact projectArtifact = (Artifact) iter2.next();
+ if (pluginArtifact.getGroupId().equals(projectArtifact.getGroupId()) &&
+ pluginArtifact.getArtifactId().equals(projectArtifact.getArtifactId())) {
+ found = true;
+ break;
+ }
+ }
+ if (!found) {
+ Artifact artifact = artifactFactory.createArtifactWithClassifier(pluginArtifact.getGroupId(),
+ pluginArtifact.getArtifactId(), pluginArtifact.getVersion(),
+ pluginArtifact.getType(), pluginArtifact.getClassifier());
+ if ("jaxme2-rt".equals(artifact.getArtifactId())) {
+ artifact.setScope(Artifact.SCOPE_RUNTIME);
+ } else {
+ artifact.setScope(Artifact.SCOPE_COMPILE);
+ }
+ projectArtifacts.add(artifact);
+ }
+ }
+ }
+ project.setDependencyArtifacts(projectArtifacts);
+ }
+
public void execute() throws MojoExecutionException, MojoFailureException {
ClassLoader oldCl = Thread.currentThread().getContextClassLoader();
Thread.currentThread().setContextClassLoader(getClassLoader(SchemaReader.class.getClassLoader()));
@@ -320,16 +388,19 @@
}
}
if (!isEmpty(schemaArray)) {
+ getLog().debug("Processing implicit schemaCollection");
configure(this);
processor.process(this);
}
if (collections != null) {
for (int i = 0; i < collections.length; i++) {
+ getLog().debug("Processing schemaCollection " + i);
configure(collections[i]);
processor.process(collections[i]);
}
}
processor.fixProjectSettings();
+ addPluginArtifacts();
} finally {
Thread.currentThread().setContextClassLoader(oldCl);
LoggerAccess.setLoggerFactory(lf);
Modified: webservices/jaxme/trunk/ws-jaxme/maven-jaxme-plugin/src/main/java/org/apache/ws/jaxme/maven/plugins/SchemaCollection.java
URL: http://svn.apache.org/viewvc/webservices/jaxme/trunk/ws-jaxme/maven-jaxme-plugin/src/main/java/org/apache/ws/jaxme/maven/plugins/SchemaCollection.java?view=diff&rev=440331&r1=440330&r2=440331
==============================================================================
--- webservices/jaxme/trunk/ws-jaxme/maven-jaxme-plugin/src/main/java/org/apache/ws/jaxme/maven/plugins/SchemaCollection.java (original)
+++ webservices/jaxme/trunk/ws-jaxme/maven-jaxme-plugin/src/main/java/org/apache/ws/jaxme/maven/plugins/SchemaCollection.java Tue Sep 5 05:36:42 2006
@@ -31,6 +31,7 @@
private String schemaTargetPrefix;
private boolean extension, removingOldOutput, validating;
private Map properties;
+ private String entityResolverMode;
/**
* Sets a set of external binding files, which are
@@ -135,11 +136,11 @@
* behaviour. A good example is the
* <code>org.apache.ws.jaxme.pm.generator.jdbc.JaxMeJdbcSG</code>.
*/
- public void sgFactoryChain(String[] pSgFactoryChain) {
+ public void setSgFactoryChains(String[] pSgFactoryChain) {
sgFactoryChain = pSgFactoryChain;
}
- public String[] getSgFactoryChain() {
+ public String[] getSgFactoryChains() {
return sgFactoryChain;
}
@@ -221,5 +222,25 @@
public String getSchemaTargetPrefix() {
return schemaTargetPrefix;
+ }
+
+ public String getEntityResolverMode() {
+ return entityResolverMode;
+ }
+
+ /**
+ * Returns a mechanism for entity resolving. The following modes
+ * are available:
+ * <table>
+ * <tr><td>files</td><td>Entities are resolved in the local file system.
+ * This is the default</td></tr>
+ * <tr><td>classpath</td><td>Entities are resolved in the classpath.</td></tr>
+ * <tr><td>class:<classname></td><td>
+ * Entities are resolved through a SAX entity resolver, which is an instance
+ * of the given class</td></tr>
+ * </table>
+ */
+ public void setEntityResolverMode(String entityResolverMode) {
+ this.entityResolverMode = entityResolverMode;
}
}
Modified: webservices/jaxme/trunk/ws-jaxme/maven-jaxme-plugin/src/main/java/org/apache/ws/jaxme/maven/plugins/SchemaCollectionProcessor.java
URL: http://svn.apache.org/viewvc/webservices/jaxme/trunk/ws-jaxme/maven-jaxme-plugin/src/main/java/org/apache/ws/jaxme/maven/plugins/SchemaCollectionProcessor.java?view=diff&rev=440331&r1=440330&r2=440331
==============================================================================
--- webservices/jaxme/trunk/ws-jaxme/maven-jaxme-plugin/src/main/java/org/apache/ws/jaxme/maven/plugins/SchemaCollectionProcessor.java (original)
+++ webservices/jaxme/trunk/ws-jaxme/maven-jaxme-plugin/src/main/java/org/apache/ws/jaxme/maven/plugins/SchemaCollectionProcessor.java Tue Sep 5 05:36:42 2006
@@ -296,7 +296,7 @@
final SchemaReader result = newSchemaReaderInstance(pCollection);
log.debug("Schema reader class: " + result.getClass().getName());
- String[] chains = pCollection.getSgFactoryChain();
+ String[] chains = pCollection.getSgFactoryChains();
if (chains != null) {
for (int i = 0; i < chains.length; i++) {
Class c = getSgFactoryChainClass(chains[i]);
@@ -337,6 +337,7 @@
removeOldOutput(pCollection, pProducedFiles);
Generator g = new GeneratorImpl();
+ g.setEntityResolver(EntityResolverFactory.getEntityResolver(pCollection.getEntityResolverMode()));
for (int i = 0; i < pBindingFiles.length; i++) {
File f = pBindingFiles[i].getFile();
try {
Modified: webservices/jaxme/trunk/ws-jaxme/maven-jaxme-plugin/src/test/java/org/apache/ws/jaxme/maven/plugins/BaseTest.java
URL: http://svn.apache.org/viewvc/webservices/jaxme/trunk/ws-jaxme/maven-jaxme-plugin/src/test/java/org/apache/ws/jaxme/maven/plugins/BaseTest.java?view=diff&rev=440331&r1=440330&r2=440331
==============================================================================
--- webservices/jaxme/trunk/ws-jaxme/maven-jaxme-plugin/src/test/java/org/apache/ws/jaxme/maven/plugins/BaseTest.java (original)
+++ webservices/jaxme/trunk/ws-jaxme/maven-jaxme-plugin/src/test/java/org/apache/ws/jaxme/maven/plugins/BaseTest.java Tue Sep 5 05:36:42 2006
@@ -17,7 +17,9 @@
import java.io.File;
import java.util.ArrayList;
+import java.util.HashSet;
+import org.apache.maven.artifact.factory.ArtifactFactory;
import org.apache.maven.model.Build;
import org.apache.maven.plugin.testing.AbstractMojoTestCase;
import org.apache.maven.plugin.testing.stubs.MavenProjectStub;
@@ -42,10 +44,18 @@
return build;
}
};
+ project.setDependencyArtifacts(new HashSet());
setVariableValueToObject(mojo, "project", project);
setVariableValueToObject(mojo, "srcTarget", "target/classes/generated-sources/jaxme/java");
setVariableValueToObject(mojo, "resourceTarget", "target/classes/generated-sources/jaxme/resources");
setVariableValueToObject(mojo, "classpathElements", new ArrayList());
+ setVariableValueToObject(mojo, "pluginArtifacts", new ArrayList());
+ ArtifactFactory factory = (ArtifactFactory) lookup(ArtifactFactory.class.getName());
+ if (factory == null) {
+ throw new NullPointerException("Missing ArtifactFactory");
+ }
+ setVariableValueToObject(mojo, "artifactFactory", factory);
+
return mojo;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: jaxme-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: jaxme-dev-help@ws.apache.org