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 2005/12/25 01:44:15 UTC
svn commit: r358956 - in /webservices/jaxme/branches: MAVEN/
MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/
MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/impl/
MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generato...
Author: jochen
Date: Sat Dec 24 16:43:38 2005
New Revision: 358956
URL: http://svn.apache.org/viewcvs?rev=358956&view=rev
Log:
Added support for external binding files, based on a suggestion from
Ortwin Glueck.
Modified:
webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/Generator.java
webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/Main.java
webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/XJCTask.java
webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/impl/GeneratorImpl.java
webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/sg/impl/JAXBSGFactory.java
webservices/jaxme/branches/MAVEN/projects/xs/src/main/java/org/apache/ws/jaxme/xs/XSObjectFactory.java
webservices/jaxme/branches/MAVEN/projects/xs/src/main/java/org/apache/ws/jaxme/xs/impl/XSLogicalParser.java
webservices/jaxme/branches/MAVEN/projects/xs/src/main/java/org/apache/ws/jaxme/xs/impl/XSObjectFactoryImpl.java
webservices/jaxme/branches/MAVEN/status.xml
webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/Generator.java
webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/Main.java
webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/XJCTask.java
webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/impl/GeneratorImpl.java
webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/JAXBSGFactory.java
webservices/jaxme/branches/b0_5/src/xs/org/apache/ws/jaxme/xs/XSObjectFactory.java
webservices/jaxme/branches/b0_5/src/xs/org/apache/ws/jaxme/xs/impl/XSLogicalParser.java
webservices/jaxme/branches/b0_5/src/xs/org/apache/ws/jaxme/xs/impl/XSObjectFactoryImpl.java
webservices/jaxme/branches/b0_5/status.xml
Modified: webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/Generator.java
URL: http://svn.apache.org/viewcvs/webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/Generator.java?rev=358956&r1=358955&r2=358956&view=diff
==============================================================================
--- webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/Generator.java (original)
+++ webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/Generator.java Sat Dec 24 16:43:38 2005
@@ -17,11 +17,16 @@
package org.apache.ws.jaxme.generator;
import java.io.File;
+import java.io.IOException;
import java.net.URL;
+import javax.xml.parsers.ParserConfigurationException;
+
import org.apache.ws.jaxme.generator.sg.SchemaSG;
+import org.w3c.dom.Document;
import org.xml.sax.EntityResolver;
import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
/** <p>The Generator is a frontend for working with the
* SchemaReaders, SourceWriters and whatever else.</p>
@@ -163,4 +168,13 @@
* schemata.</p>
*/
public EntityResolver getEntityResolver();
+
+ /** Sets the external schema bindings.
+ */
+ public void addBindings(InputSource pSource)
+ throws ParserConfigurationException, SAXException, IOException;
+
+ /** Returns the external schema bindings, if any, or null.
+ */
+ public Document[] getBindings();
}
Modified: webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/Main.java
URL: http://svn.apache.org/viewcvs/webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/Main.java?rev=358956&r1=358955&r2=358956&view=diff
==============================================================================
--- webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/Main.java (original)
+++ webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/Main.java Sat Dec 24 16:43:38 2005
@@ -12,7 +12,6 @@
* 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.generator;
@@ -23,6 +22,7 @@
import org.apache.ws.jaxme.generator.impl.GeneratorImpl;
import org.apache.ws.jaxme.generator.sg.SGFactoryChain;
import org.apache.ws.jaxme.generator.sg.impl.JAXBSchemaReader;
+import org.xml.sax.InputSource;
/** <p>A command line interface for the JaxMe source generator.</p>
@@ -50,6 +50,9 @@
ps.println();
ps.println("Reads a schema definition from the given <inputfile>");
ps.println("Possible options are:");
+ ps.println(" --bindingFile=<filename> Adds an external binding file.");
+ ps.println(" Multiple external binding files may");
+ ps.println(" be used by repeating this option.");
ps.println(" --force Force overwriting files");
ps.println(" --schemaReader=<class> Sets the SchemaReader class; defaults to");
ps.println(" " + JAXBSchemaReader.class.getName());
@@ -108,7 +111,30 @@
opt = arg.substring(optIndex+1);
arg = arg.substring(0, optIndex);
}
- if (arg.equalsIgnoreCase("force")) {
+ if (arg.equalsIgnoreCase("bindingFile")) {
+ if (opt == null) {
+ if (i == args.length) {
+ Usage("Missing argument for option " + arg);
+ }
+ opt = args[++i];
+ }
+ File f = new File(opt);
+ if (f.isFile()) {
+ try {
+ g.addBindings(new InputSource(f.toURL().toExternalForm()));
+ } catch (Exception e) {
+ System.err.println("The external binding file "
+ + f.getAbsolutePath() + " could not be read: "
+ + e.getMessage());
+ e.printStackTrace();
+ System.exit(1);
+ }
+ } else {
+ System.err.println("The external binding file "
+ + f.getAbsolutePath() + " does not exist.");
+ System.exit(1);
+ }
+ } else if (arg.equalsIgnoreCase("force")) {
g.setForcingOverwrite(true);
} else if (arg.equalsIgnoreCase("schemaReader")) {
if (logLevel != null) {
Modified: webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/XJCTask.java
URL: http://svn.apache.org/viewcvs/webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/XJCTask.java?rev=358956&r1=358955&r2=358956&view=diff
==============================================================================
--- webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/XJCTask.java (original)
+++ webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/XJCTask.java Sat Dec 24 16:43:38 2005
@@ -46,6 +46,7 @@
import org.apache.tools.ant.types.Commandline;
import org.apache.tools.ant.types.FileSet;
import org.apache.tools.ant.types.Path;
+import org.xml.sax.InputSource;
import org.xml.sax.SAXParseException;
@@ -949,12 +950,8 @@
log("No schema files specified", Project.MSG_WARN);
return;
}
-
+
File[] bindingFiles = getBindingFiles();
- if (bindingFiles.length > 0) {
- throw new BuildException("External schema bindings are still unsupported by JaxMe.", getLocation());
- }
-
File[] dependFiles = getDependsFiles();
List producesFiles = isRemoveOldOutput() ? new ArrayList() : null;
if (isUpToDate(schemaFiles, bindingFiles, dependFiles, producesFiles)) {
@@ -975,6 +972,17 @@
generator.setForcingOverwrite(isForce());
generator.setSettingReadOnly(isReadOnly());
generator.setValidating(isValidating());
+ for (int i = 0; i < bindingFiles.length; i++) {
+ try {
+ String systemId = bindingFiles[i].toURL().toExternalForm();
+ generator.addBindings(new InputSource(systemId));
+ } catch (Exception e) {
+ throw new BuildException("Failed to read external binding file "
+ + bindingFiles[i] + ": " + e.getMessage(), e,
+ getLocation());
+ }
+ }
+
if (getPackage() != null) {
generator.setProperty("jaxme.package.name", getPackage());
}
Modified: webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/impl/GeneratorImpl.java
URL: http://svn.apache.org/viewcvs/webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/impl/GeneratorImpl.java?rev=358956&r1=358955&r2=358956&view=diff
==============================================================================
--- webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/impl/GeneratorImpl.java (original)
+++ webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/impl/GeneratorImpl.java Sat Dec 24 16:43:38 2005
@@ -17,10 +17,17 @@
import java.io.File;
import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
+import java.util.List;
import java.util.Map;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+
import org.apache.ws.jaxme.generator.Generator;
import org.apache.ws.jaxme.generator.SchemaReader;
import org.apache.ws.jaxme.generator.sg.SchemaSG;
@@ -28,8 +35,10 @@
import org.apache.ws.jaxme.js.JavaSourceFactory;
import org.apache.ws.jaxme.logging.Logger;
import org.apache.ws.jaxme.logging.LoggerAccess;
+import org.w3c.dom.Document;
import org.xml.sax.EntityResolver;
import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
/** <p>The Generator is reading an input schema. The schema is
@@ -38,6 +47,12 @@
*/
public class GeneratorImpl implements Generator {
private static final Logger log = LoggerAccess.getLogger(GeneratorImpl.class);
+ private static final DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
+ static {
+ dbf.setNamespaceAware(true);
+ dbf.setValidating(false);
+ }
+
private SchemaReader schemaReader;
private java.io.File targetDirectory;
private java.io.File resourceTargetDirectory;
@@ -45,6 +60,7 @@
private int nextKey;
private boolean isValidating, isForcingOverwrite, isSettingReadOnly;
private EntityResolver entityResolver;
+ private final List bindings = new ArrayList();
/** <p>Sets the {@link EntityResolver} being used to import external
* schemata.</p>
@@ -196,5 +212,18 @@
public String getKey() {
return Integer.toString(nextKey++);
+ }
+
+ public void addBindings(InputSource pSource) throws ParserConfigurationException, SAXException, IOException {
+ DocumentBuilder db = dbf.newDocumentBuilder();
+ EntityResolver er = getEntityResolver();
+ if (er != null) {
+ db.setEntityResolver(er);
+ }
+ bindings.add(db.parse(pSource));
+ }
+
+ public Document[] getBindings() {
+ return (Document[]) bindings.toArray(new Document[bindings.size()]);
}
}
Modified: webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/sg/impl/JAXBSGFactory.java
URL: http://svn.apache.org/viewcvs/webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/sg/impl/JAXBSGFactory.java?rev=358956&r1=358955&r2=358956&view=diff
==============================================================================
--- webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/sg/impl/JAXBSGFactory.java (original)
+++ webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/sg/impl/JAXBSGFactory.java Sat Dec 24 16:43:38 2005
@@ -24,6 +24,7 @@
import javax.xml.parsers.ParserConfigurationException;
import org.apache.ws.jaxme.generator.Generator;
+import org.apache.ws.jaxme.generator.Inliner;
import org.apache.ws.jaxme.generator.sg.Context;
import org.apache.ws.jaxme.generator.sg.Facet;
import org.apache.ws.jaxme.generator.sg.GroupSG;
@@ -37,6 +38,7 @@
import org.apache.ws.jaxme.generator.sg.TypeSGChain;
import org.apache.ws.jaxme.logging.Logger;
import org.apache.ws.jaxme.logging.LoggerAccess;
+import org.apache.ws.jaxme.xs.SchemaTransformer;
import org.apache.ws.jaxme.xs.XSAny;
import org.apache.ws.jaxme.xs.XSElement;
import org.apache.ws.jaxme.xs.XSEnumeration;
@@ -45,11 +47,13 @@
import org.apache.ws.jaxme.xs.XSParser;
import org.apache.ws.jaxme.xs.XSSchema;
import org.apache.ws.jaxme.xs.XSType;
+import org.apache.ws.jaxme.xs.jaxb.impl.JAXBObjectFactoryImpl;
import org.apache.ws.jaxme.xs.jaxb.impl.JAXBParser;
import org.apache.ws.jaxme.xs.jaxb.impl.JAXBXsObjectFactoryImpl;
import org.apache.ws.jaxme.xs.parser.XSContext;
import org.apache.ws.jaxme.xs.xml.XsObjectFactory;
import org.apache.ws.jaxme.xs.xml.XsQName;
+import org.w3c.dom.Document;
import org.xml.sax.EntityResolver;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
@@ -276,6 +280,15 @@
}
public XSObjectFactory newXSObjectFactory(SGFactory pController) throws SAXException {
- return JAXBParser.JAXB_OBJECT_FACTORY;
+ return new JAXBObjectFactoryImpl(){
+ public SchemaTransformer getSchemaTransformer() {
+ Document[] bindings = generator.getBindings();
+ if (bindings == null || bindings.length == 0) {
+ return null;
+ } else {
+ return new Inliner(bindings);
+ }
+ }
+ };
}
}
Modified: webservices/jaxme/branches/MAVEN/projects/xs/src/main/java/org/apache/ws/jaxme/xs/XSObjectFactory.java
URL: http://svn.apache.org/viewcvs/webservices/jaxme/branches/MAVEN/projects/xs/src/main/java/org/apache/ws/jaxme/xs/XSObjectFactory.java?rev=358956&r1=358955&r2=358956&view=diff
==============================================================================
--- webservices/jaxme/branches/MAVEN/projects/xs/src/main/java/org/apache/ws/jaxme/xs/XSObjectFactory.java (original)
+++ webservices/jaxme/branches/MAVEN/projects/xs/src/main/java/org/apache/ws/jaxme/xs/XSObjectFactory.java Sat Dec 24 16:43:38 2005
@@ -12,7 +12,6 @@
* 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.xs;
@@ -134,4 +133,9 @@
*/
public XSIdentityConstraint newXSIdentityConstraint(XSElement pParent,
XsEKey key) throws SAXException;
+ /** Returns the object factories schema transformer.
+ * May be null, in which case no schema transformation
+ * occurs.
+ */
+ public SchemaTransformer getSchemaTransformer();
}
Modified: webservices/jaxme/branches/MAVEN/projects/xs/src/main/java/org/apache/ws/jaxme/xs/impl/XSLogicalParser.java
URL: http://svn.apache.org/viewcvs/webservices/jaxme/branches/MAVEN/projects/xs/src/main/java/org/apache/ws/jaxme/xs/impl/XSLogicalParser.java?rev=358956&r1=358955&r2=358956&view=diff
==============================================================================
--- webservices/jaxme/branches/MAVEN/projects/xs/src/main/java/org/apache/ws/jaxme/xs/impl/XSLogicalParser.java (original)
+++ webservices/jaxme/branches/MAVEN/projects/xs/src/main/java/org/apache/ws/jaxme/xs/impl/XSLogicalParser.java Sat Dec 24 16:43:38 2005
@@ -30,6 +30,7 @@
import javax.xml.parsers.ParserConfigurationException;
+import org.apache.ws.jaxme.xs.SchemaTransformer;
import org.apache.ws.jaxme.xs.XSContentHandler;
import org.apache.ws.jaxme.xs.XSElement;
import org.apache.ws.jaxme.xs.XSObjectFactory;
@@ -659,6 +660,12 @@
XSContext data = getData();
XMLReader xr = data.getXsObjectFactory().newXMLReader(isValidating());
xr.setContentHandler(contentHandler);
+ SchemaTransformer transformer = data.getXSObjectFactory().getSchemaTransformer();
+ if (transformer != null) {
+ transformer.parse(pSource, xr);
+ pSource = transformer.getTransformedInputSource();
+ xr = transformer.getTransformedXMLReader();
+ }
xr.parse(pSource);
return getSchema();
}
Modified: webservices/jaxme/branches/MAVEN/projects/xs/src/main/java/org/apache/ws/jaxme/xs/impl/XSObjectFactoryImpl.java
URL: http://svn.apache.org/viewcvs/webservices/jaxme/branches/MAVEN/projects/xs/src/main/java/org/apache/ws/jaxme/xs/impl/XSObjectFactoryImpl.java?rev=358956&r1=358955&r2=358956&view=diff
==============================================================================
--- webservices/jaxme/branches/MAVEN/projects/xs/src/main/java/org/apache/ws/jaxme/xs/impl/XSObjectFactoryImpl.java (original)
+++ webservices/jaxme/branches/MAVEN/projects/xs/src/main/java/org/apache/ws/jaxme/xs/impl/XSObjectFactoryImpl.java Sat Dec 24 16:43:38 2005
@@ -16,6 +16,7 @@
*/
package org.apache.ws.jaxme.xs.impl;
+import org.apache.ws.jaxme.xs.SchemaTransformer;
import org.apache.ws.jaxme.xs.XSAnnotation;
import org.apache.ws.jaxme.xs.XSAny;
import org.apache.ws.jaxme.xs.XSAppinfo;
@@ -203,4 +204,7 @@
return new XSIdentityConstraintImpl( pParent, unique );
}
+ public SchemaTransformer getSchemaTransformer() {
+ return null;
+ }
}
Modified: webservices/jaxme/branches/MAVEN/status.xml
URL: http://svn.apache.org/viewcvs/webservices/jaxme/branches/MAVEN/status.xml?rev=358956&r1=358955&r2=358956&view=diff
==============================================================================
--- webservices/jaxme/branches/MAVEN/status.xml (original)
+++ webservices/jaxme/branches/MAVEN/status.xml Sat Dec 24 16:43:38 2005
@@ -81,6 +81,10 @@
The XJC Ant task and the Main frontent both have a new
option "resourceTarget".
</action>
+ <action dev="JW" type="enhancement" context="generator">
+ Added support for external binding files, based on a
+ suggestion from Ortwin Glueck (oglueck at apache.org).
+ </action>
</release>
<release version="0.5" date="2005-Aug-08">
<action dev="JW" type="enhancement" context="js">
Modified: webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/Generator.java
URL: http://svn.apache.org/viewcvs/webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/Generator.java?rev=358956&r1=358955&r2=358956&view=diff
==============================================================================
--- webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/Generator.java (original)
+++ webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/Generator.java Sat Dec 24 16:43:38 2005
@@ -17,11 +17,16 @@
package org.apache.ws.jaxme.generator;
import java.io.File;
+import java.io.IOException;
import java.net.URL;
+import javax.xml.parsers.ParserConfigurationException;
+
import org.apache.ws.jaxme.generator.sg.SchemaSG;
+import org.w3c.dom.Document;
import org.xml.sax.EntityResolver;
import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
/** <p>The Generator is a frontend for working with the
* SchemaReaders, SourceWriters and whatever else.</p>
@@ -163,4 +168,13 @@
* schemata.</p>
*/
public EntityResolver getEntityResolver();
+
+ /** Sets the external schema bindings.
+ */
+ public void addBindings(InputSource pSource)
+ throws ParserConfigurationException, SAXException, IOException;
+
+ /** Returns the external schema bindings, if any, or null.
+ */
+ public Document[] getBindings();
}
Modified: webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/Main.java
URL: http://svn.apache.org/viewcvs/webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/Main.java?rev=358956&r1=358955&r2=358956&view=diff
==============================================================================
--- webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/Main.java (original)
+++ webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/Main.java Sat Dec 24 16:43:38 2005
@@ -12,7 +12,6 @@
* 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.generator;
@@ -23,6 +22,7 @@
import org.apache.ws.jaxme.generator.impl.GeneratorImpl;
import org.apache.ws.jaxme.generator.sg.SGFactoryChain;
import org.apache.ws.jaxme.generator.sg.impl.JAXBSchemaReader;
+import org.xml.sax.InputSource;
/** <p>A command line interface for the JaxMe source generator.</p>
@@ -50,6 +50,9 @@
ps.println();
ps.println("Reads a schema definition from the given <inputfile>");
ps.println("Possible options are:");
+ ps.println(" --bindingFile=<filename> Adds an external binding file.");
+ ps.println(" Multiple external binding files may");
+ ps.println(" be used by repeating this option.");
ps.println(" --force Force overwriting files");
ps.println(" --schemaReader=<class> Sets the SchemaReader class; defaults to");
ps.println(" " + JAXBSchemaReader.class.getName());
@@ -108,7 +111,30 @@
opt = arg.substring(optIndex+1);
arg = arg.substring(0, optIndex);
}
- if (arg.equalsIgnoreCase("force")) {
+ if (arg.equalsIgnoreCase("bindingFile")) {
+ if (opt == null) {
+ if (i == args.length) {
+ Usage("Missing argument for option " + arg);
+ }
+ opt = args[++i];
+ }
+ File f = new File(opt);
+ if (f.isFile()) {
+ try {
+ g.addBindings(new InputSource(f.toURL().toExternalForm()));
+ } catch (Exception e) {
+ System.err.println("The external binding file "
+ + f.getAbsolutePath() + " could not be read: "
+ + e.getMessage());
+ e.printStackTrace();
+ System.exit(1);
+ }
+ } else {
+ System.err.println("The external binding file "
+ + f.getAbsolutePath() + " does not exist.");
+ System.exit(1);
+ }
+ } else if (arg.equalsIgnoreCase("force")) {
g.setForcingOverwrite(true);
} else if (arg.equalsIgnoreCase("schemaReader")) {
if (logLevel != null) {
Modified: webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/XJCTask.java
URL: http://svn.apache.org/viewcvs/webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/XJCTask.java?rev=358956&r1=358955&r2=358956&view=diff
==============================================================================
--- webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/XJCTask.java (original)
+++ webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/XJCTask.java Sat Dec 24 16:43:38 2005
@@ -46,6 +46,7 @@
import org.apache.tools.ant.types.Commandline;
import org.apache.tools.ant.types.FileSet;
import org.apache.tools.ant.types.Path;
+import org.xml.sax.InputSource;
import org.xml.sax.SAXParseException;
@@ -949,12 +950,8 @@
log("No schema files specified", Project.MSG_WARN);
return;
}
-
+
File[] bindingFiles = getBindingFiles();
- if (bindingFiles.length > 0) {
- throw new BuildException("External schema bindings are still unsupported by JaxMe.", getLocation());
- }
-
File[] dependFiles = getDependsFiles();
List producesFiles = isRemoveOldOutput() ? new ArrayList() : null;
if (isUpToDate(schemaFiles, bindingFiles, dependFiles, producesFiles)) {
@@ -975,6 +972,17 @@
generator.setForcingOverwrite(isForce());
generator.setSettingReadOnly(isReadOnly());
generator.setValidating(isValidating());
+ for (int i = 0; i < bindingFiles.length; i++) {
+ try {
+ String systemId = bindingFiles[i].toURL().toExternalForm();
+ generator.addBindings(new InputSource(systemId));
+ } catch (Exception e) {
+ throw new BuildException("Failed to read external binding file "
+ + bindingFiles[i] + ": " + e.getMessage(), e,
+ getLocation());
+ }
+ }
+
if (getPackage() != null) {
generator.setProperty("jaxme.package.name", getPackage());
}
Modified: webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/impl/GeneratorImpl.java
URL: http://svn.apache.org/viewcvs/webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/impl/GeneratorImpl.java?rev=358956&r1=358955&r2=358956&view=diff
==============================================================================
--- webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/impl/GeneratorImpl.java (original)
+++ webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/impl/GeneratorImpl.java Sat Dec 24 16:43:38 2005
@@ -17,10 +17,17 @@
import java.io.File;
import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
+import java.util.List;
import java.util.Map;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+
import org.apache.ws.jaxme.generator.Generator;
import org.apache.ws.jaxme.generator.SchemaReader;
import org.apache.ws.jaxme.generator.sg.SchemaSG;
@@ -28,8 +35,10 @@
import org.apache.ws.jaxme.js.JavaSourceFactory;
import org.apache.ws.jaxme.logging.Logger;
import org.apache.ws.jaxme.logging.LoggerAccess;
+import org.w3c.dom.Document;
import org.xml.sax.EntityResolver;
import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
/** <p>The Generator is reading an input schema. The schema is
@@ -38,6 +47,12 @@
*/
public class GeneratorImpl implements Generator {
private static final Logger log = LoggerAccess.getLogger(GeneratorImpl.class);
+ private static final DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
+ static {
+ dbf.setNamespaceAware(true);
+ dbf.setValidating(false);
+ }
+
private SchemaReader schemaReader;
private java.io.File targetDirectory;
private java.io.File resourceTargetDirectory;
@@ -45,6 +60,7 @@
private int nextKey;
private boolean isValidating, isForcingOverwrite, isSettingReadOnly;
private EntityResolver entityResolver;
+ private final List bindings = new ArrayList();
/** <p>Sets the {@link EntityResolver} being used to import external
* schemata.</p>
@@ -196,5 +212,18 @@
public String getKey() {
return Integer.toString(nextKey++);
+ }
+
+ public void addBindings(InputSource pSource) throws ParserConfigurationException, SAXException, IOException {
+ DocumentBuilder db = dbf.newDocumentBuilder();
+ EntityResolver er = getEntityResolver();
+ if (er != null) {
+ db.setEntityResolver(er);
+ }
+ bindings.add(db.parse(pSource));
+ }
+
+ public Document[] getBindings() {
+ return (Document[]) bindings.toArray(new Document[bindings.size()]);
}
}
Modified: webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/JAXBSGFactory.java
URL: http://svn.apache.org/viewcvs/webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/JAXBSGFactory.java?rev=358956&r1=358955&r2=358956&view=diff
==============================================================================
--- webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/JAXBSGFactory.java (original)
+++ webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/JAXBSGFactory.java Sat Dec 24 16:43:38 2005
@@ -24,6 +24,7 @@
import javax.xml.parsers.ParserConfigurationException;
import org.apache.ws.jaxme.generator.Generator;
+import org.apache.ws.jaxme.generator.Inliner;
import org.apache.ws.jaxme.generator.sg.Context;
import org.apache.ws.jaxme.generator.sg.Facet;
import org.apache.ws.jaxme.generator.sg.GroupSG;
@@ -37,6 +38,7 @@
import org.apache.ws.jaxme.generator.sg.TypeSGChain;
import org.apache.ws.jaxme.logging.Logger;
import org.apache.ws.jaxme.logging.LoggerAccess;
+import org.apache.ws.jaxme.xs.SchemaTransformer;
import org.apache.ws.jaxme.xs.XSAny;
import org.apache.ws.jaxme.xs.XSElement;
import org.apache.ws.jaxme.xs.XSEnumeration;
@@ -45,11 +47,13 @@
import org.apache.ws.jaxme.xs.XSParser;
import org.apache.ws.jaxme.xs.XSSchema;
import org.apache.ws.jaxme.xs.XSType;
+import org.apache.ws.jaxme.xs.jaxb.impl.JAXBObjectFactoryImpl;
import org.apache.ws.jaxme.xs.jaxb.impl.JAXBParser;
import org.apache.ws.jaxme.xs.jaxb.impl.JAXBXsObjectFactoryImpl;
import org.apache.ws.jaxme.xs.parser.XSContext;
import org.apache.ws.jaxme.xs.xml.XsObjectFactory;
import org.apache.ws.jaxme.xs.xml.XsQName;
+import org.w3c.dom.Document;
import org.xml.sax.EntityResolver;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
@@ -276,6 +280,15 @@
}
public XSObjectFactory newXSObjectFactory(SGFactory pController) throws SAXException {
- return JAXBParser.JAXB_OBJECT_FACTORY;
+ return new JAXBObjectFactoryImpl(){
+ public SchemaTransformer getSchemaTransformer() {
+ Document[] bindings = generator.getBindings();
+ if (bindings == null || bindings.length == 0) {
+ return null;
+ } else {
+ return new Inliner(bindings);
+ }
+ }
+ };
}
}
Modified: webservices/jaxme/branches/b0_5/src/xs/org/apache/ws/jaxme/xs/XSObjectFactory.java
URL: http://svn.apache.org/viewcvs/webservices/jaxme/branches/b0_5/src/xs/org/apache/ws/jaxme/xs/XSObjectFactory.java?rev=358956&r1=358955&r2=358956&view=diff
==============================================================================
--- webservices/jaxme/branches/b0_5/src/xs/org/apache/ws/jaxme/xs/XSObjectFactory.java (original)
+++ webservices/jaxme/branches/b0_5/src/xs/org/apache/ws/jaxme/xs/XSObjectFactory.java Sat Dec 24 16:43:38 2005
@@ -12,7 +12,6 @@
* 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.xs;
@@ -134,4 +133,9 @@
*/
public XSIdentityConstraint newXSIdentityConstraint(XSElement pParent,
XsEKey key) throws SAXException;
+ /** Returns the object factories schema transformer.
+ * May be null, in which case no schema transformation
+ * occurs.
+ */
+ public SchemaTransformer getSchemaTransformer();
}
Modified: webservices/jaxme/branches/b0_5/src/xs/org/apache/ws/jaxme/xs/impl/XSLogicalParser.java
URL: http://svn.apache.org/viewcvs/webservices/jaxme/branches/b0_5/src/xs/org/apache/ws/jaxme/xs/impl/XSLogicalParser.java?rev=358956&r1=358955&r2=358956&view=diff
==============================================================================
--- webservices/jaxme/branches/b0_5/src/xs/org/apache/ws/jaxme/xs/impl/XSLogicalParser.java (original)
+++ webservices/jaxme/branches/b0_5/src/xs/org/apache/ws/jaxme/xs/impl/XSLogicalParser.java Sat Dec 24 16:43:38 2005
@@ -30,6 +30,7 @@
import javax.xml.parsers.ParserConfigurationException;
+import org.apache.ws.jaxme.xs.SchemaTransformer;
import org.apache.ws.jaxme.xs.XSContentHandler;
import org.apache.ws.jaxme.xs.XSElement;
import org.apache.ws.jaxme.xs.XSObjectFactory;
@@ -659,6 +660,12 @@
XSContext data = getData();
XMLReader xr = data.getXsObjectFactory().newXMLReader(isValidating());
xr.setContentHandler(contentHandler);
+ SchemaTransformer transformer = data.getXSObjectFactory().getSchemaTransformer();
+ if (transformer != null) {
+ transformer.parse(pSource, xr);
+ pSource = transformer.getTransformedInputSource();
+ xr = transformer.getTransformedXMLReader();
+ }
xr.parse(pSource);
return getSchema();
}
Modified: webservices/jaxme/branches/b0_5/src/xs/org/apache/ws/jaxme/xs/impl/XSObjectFactoryImpl.java
URL: http://svn.apache.org/viewcvs/webservices/jaxme/branches/b0_5/src/xs/org/apache/ws/jaxme/xs/impl/XSObjectFactoryImpl.java?rev=358956&r1=358955&r2=358956&view=diff
==============================================================================
--- webservices/jaxme/branches/b0_5/src/xs/org/apache/ws/jaxme/xs/impl/XSObjectFactoryImpl.java (original)
+++ webservices/jaxme/branches/b0_5/src/xs/org/apache/ws/jaxme/xs/impl/XSObjectFactoryImpl.java Sat Dec 24 16:43:38 2005
@@ -16,6 +16,7 @@
*/
package org.apache.ws.jaxme.xs.impl;
+import org.apache.ws.jaxme.xs.SchemaTransformer;
import org.apache.ws.jaxme.xs.XSAnnotation;
import org.apache.ws.jaxme.xs.XSAny;
import org.apache.ws.jaxme.xs.XSAppinfo;
@@ -203,4 +204,7 @@
return new XSIdentityConstraintImpl( pParent, unique );
}
+ public SchemaTransformer getSchemaTransformer() {
+ return null;
+ }
}
Modified: webservices/jaxme/branches/b0_5/status.xml
URL: http://svn.apache.org/viewcvs/webservices/jaxme/branches/b0_5/status.xml?rev=358956&r1=358955&r2=358956&view=diff
==============================================================================
--- webservices/jaxme/branches/b0_5/status.xml (original)
+++ webservices/jaxme/branches/b0_5/status.xml Sat Dec 24 16:43:38 2005
@@ -73,6 +73,10 @@
The XJC Ant task and the Main frontent both have a new
option "resourceTarget".
</action>
+ <action dev="JW" type="enhancement" context="generator">
+ Added support for external binding files, based on a
+ suggestion from Ortwin Glueck (oglueck at apache.org).
+ </action>
</release>
<release version="0.5" date="2005-Aug-08">
<action dev="JW" type="enhancement" context="js">
---------------------------------------------------------------------
To unsubscribe, e-mail: jaxme-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: jaxme-dev-help@ws.apache.org