Author: jochen
Date: Sat Aug 26 17:25:00 2006
New Revision: 437259

URL: http://svn.apache.org/viewvc?rev=437259&view=rev
Log:
Element references to schemas with other package names have been generating 
invalid code.

Added:
    
webservices/jaxme/branches/MAVEN/projects/jm/src/test/resources/bindings/imported.xsi
    
webservices/jaxme/branches/MAVEN/projects/xs/src/main/java/org/apache/ws/jaxme/xs/util/LoggingContentHandler.java
    webservices/jaxme/branches/b0_5/src/test/jaxb/bindings/imported.xsi
    
webservices/jaxme/branches/b0_5/src/xs/org/apache/ws/jaxme/xs/util/LoggingContentHandler.java
Modified:
    
webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/sg/impl/JAXBObjectSG.java
    
webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/sg/impl/ccsg/GroupHandlerSG.java
    
webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/impl/JAXBContextImpl.java
    
webservices/jaxme/branches/MAVEN/projects/xs/src/main/java/org/apache/ws/jaxme/xs/XSElement.java
    
webservices/jaxme/branches/MAVEN/projects/xs/src/main/java/org/apache/ws/jaxme/xs/XSParser.java
    
webservices/jaxme/branches/MAVEN/projects/xs/src/main/java/org/apache/ws/jaxme/xs/impl/XSElementImpl.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/jaxb/impl/JAXBAppinfoImpl.java
    
webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/JAXBObjectSG.java
    
webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/ccsg/GroupHandlerSG.java
    
webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/impl/JAXBContextImpl.java
    
webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/junit/BindingsTest.java
    webservices/jaxme/branches/b0_5/src/test/jaxb/bindings/bindings.jxb
    webservices/jaxme/branches/b0_5/src/test/jaxb/bindings/bindings.xsd
    webservices/jaxme/branches/b0_5/src/xs/org/apache/ws/jaxme/xs/XSElement.java
    webservices/jaxme/branches/b0_5/src/xs/org/apache/ws/jaxme/xs/XSParser.java
    
webservices/jaxme/branches/b0_5/src/xs/org/apache/ws/jaxme/xs/impl/XSElementImpl.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/jaxb/impl/JAXBAppinfoImpl.java

Modified: 
webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/sg/impl/JAXBObjectSG.java
URL: 
http://svn.apache.org/viewvc/webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/sg/impl/JAXBObjectSG.java?rev=437259&r1=437258&r2=437259&view=diff
==============================================================================
--- 
webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/sg/impl/JAXBObjectSG.java
 (original)
+++ 
webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/sg/impl/JAXBObjectSG.java
 Sat Aug 26 17:25:00 2006
@@ -102,7 +102,14 @@
     if (useTypesContext) {
       myClassContext = pClassContext;
     } else {
-      myClassContext = new GlobalContext(name, pObject, null, null, pSchema);
+      XSObject contextObject = pObject;
+      if (pObject instanceof XSElement) {
+       XSElement element = (XSElement) pObject;
+       if (element.isReference()) {
+         contextObject = pObject.getXSSchema().getElement(name);
+       }
+      }
+      myClassContext = new GlobalContext(name, contextObject, null, null, 
pSchema);
     }
 
     if (isClassGlobal) {

Modified: 
webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/sg/impl/ccsg/GroupHandlerSG.java
URL: 
http://svn.apache.org/viewvc/webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/sg/impl/ccsg/GroupHandlerSG.java?rev=437259&r1=437258&r2=437259&view=diff
==============================================================================
--- 
webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/sg/impl/ccsg/GroupHandlerSG.java
 (original)
+++ 
webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/sg/impl/ccsg/GroupHandlerSG.java
 Sat Aug 26 17:25:00 2006
@@ -205,9 +205,9 @@
                ObjectSG oSG = pParticle.getObjectSG();
                TypeSG tSG = oSG.getTypeSG();
                if (tSG.isComplex()) {
-                       JavaQName elementInterfaceClass = 
pParticle.getObjectSG().getClassContext().getXMLInterfaceName();
                        Object[] o, h;
                        if (oSG.getClassContext().isGlobal()) {
+                               JavaQName elementInterfaceClass = 
pParticle.getObjectSG().getClassContext().getXMLInterfaceName();
                                LocalJavaField manager = 
pJm.newJavaField(JMManager.class);
                                
manager.addLine("getHandler().getJMUnmarshaller().getJAXBContextImpl().getManagerS(",
                                                elementInterfaceClass, 
".class)");

Modified: 
webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/impl/JAXBContextImpl.java
URL: 
http://svn.apache.org/viewvc/webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/impl/JAXBContextImpl.java?rev=437259&r1=437258&r2=437259&view=diff
==============================================================================
--- 
webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/impl/JAXBContextImpl.java
 (original)
+++ 
webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/impl/JAXBContextImpl.java
 Sat Aug 26 17:25:00 2006
@@ -299,7 +299,6 @@
       pm.init(manager);
       return pm;
     } catch (Exception e) {
-      e.printStackTrace(System.err);
       throw new PMException("Could not instantiate persistence manager class " 
+
                              c.getName(), e);
     }

Added: 
webservices/jaxme/branches/MAVEN/projects/jm/src/test/resources/bindings/imported.xsi
URL: 
http://svn.apache.org/viewvc/webservices/jaxme/branches/MAVEN/projects/jm/src/test/resources/bindings/imported.xsi?rev=437259&view=auto
==============================================================================
--- 
webservices/jaxme/branches/MAVEN/projects/jm/src/test/resources/bindings/imported.xsi
 (added)
+++ 
webservices/jaxme/branches/MAVEN/projects/jm/src/test/resources/bindings/imported.xsi
 Sat Aug 26 17:25:00 2006
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2003, 2004  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.
+-->
+<xs:schema
+    xmlns:xs="http://www.w3.org/2001/XMLSchema";
+    targetNamespace="http://ws.apache.org/jaxme/test/bindings/imported";
+    xmlns:imp="http://ws.apache.org/jaxme/test/bindings/imported";
+    elementFormDefault="qualified"
+    attributeFormDefault="unqualified">
+  <xs:element name="blubb">
+    <xs:complexType>
+      <xs:attribute name="blabb" type="imp:YesNoType"/>
+    </xs:complexType>
+  </xs:element>
+
+  <xs:simpleType name="YesNoType">
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="YES"/>
+      <xs:enumeration value="NO"/>
+    </xs:restriction>
+  </xs:simpleType>
+</xs:schema>

Modified: 
webservices/jaxme/branches/MAVEN/projects/xs/src/main/java/org/apache/ws/jaxme/xs/XSElement.java
URL: 
http://svn.apache.org/viewvc/webservices/jaxme/branches/MAVEN/projects/xs/src/main/java/org/apache/ws/jaxme/xs/XSElement.java?rev=437259&r1=437258&r2=437259&view=diff
==============================================================================
--- 
webservices/jaxme/branches/MAVEN/projects/xs/src/main/java/org/apache/ws/jaxme/xs/XSElement.java
 (original)
+++ 
webservices/jaxme/branches/MAVEN/projects/xs/src/main/java/org/apache/ws/jaxme/xs/XSElement.java
 Sat Aug 26 17:25:00 2006
@@ -96,4 +96,9 @@
    * Fetch all of the keyref's declared by this element.
    */
   public XSKeyRef[] getKeyRefs();
+
+  /**
+   * Returns, whether the element is created by referencing another element.
+   */
+  public boolean isReference();
 }

Modified: 
webservices/jaxme/branches/MAVEN/projects/xs/src/main/java/org/apache/ws/jaxme/xs/XSParser.java
URL: 
http://svn.apache.org/viewvc/webservices/jaxme/branches/MAVEN/projects/xs/src/main/java/org/apache/ws/jaxme/xs/XSParser.java?rev=437259&r1=437258&r2=437259&view=diff
==============================================================================
--- 
webservices/jaxme/branches/MAVEN/projects/xs/src/main/java/org/apache/ws/jaxme/xs/XSParser.java
 (original)
+++ 
webservices/jaxme/branches/MAVEN/projects/xs/src/main/java/org/apache/ws/jaxme/xs/XSParser.java
 Sat Aug 26 17:25:00 2006
@@ -16,8 +16,11 @@
  */
 package org.apache.ws.jaxme.xs;
 
+import java.io.File;
+import java.io.FileOutputStream;
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 
 import javax.xml.parsers.ParserConfigurationException;
@@ -26,6 +29,7 @@
 import org.apache.ws.jaxme.xs.parser.XSContext;
 import org.apache.ws.jaxme.xs.parser.XsSAXParser;
 import org.apache.ws.jaxme.xs.parser.impl.XSContextImpl;
+import org.apache.ws.jaxme.xs.util.LoggingContentHandler;
 import org.apache.ws.jaxme.xs.xml.XsESchema;
 import org.apache.ws.jaxme.xs.xml.XsObjectFactory;
 import org.w3c.dom.Node;
@@ -116,18 +120,36 @@
    * representation.</p>
    * @see #parse(InputSource)
    */
-  public XsESchema parseSyntax(InputSource pSource) throws 
ParserConfigurationException, SAXException, IOException {
+  public XsESchema parseSyntax(final InputSource pSource) throws 
ParserConfigurationException, SAXException, IOException {
     XSContext context = getContext();
     parser.set(this);
+    FileOutputStream fos = null;
     try {
       XsObjectFactory factory = context.getXsObjectFactory();
       XsSAXParser xsSAXParser = factory.newXsSAXParser();
       context.setCurrentContentHandler(xsSAXParser);
       XMLReader xr = factory.newXMLReader(isValidating());
+      String logDir = System.getProperty("org.apache.ws.jaxme.xs.logDir");
+      if (logDir != null) {
+         File tmpFile = File.createTempFile("jaxmexs", ".xsd", new 
File(logDir));
+         fos = new FileOutputStream(tmpFile);
+         LoggingContentHandler lch = new LoggingContentHandler(fos);
+         lch.setParent(xr);
+         xr = lch;
+         String msg = "Read from " + pSource.getPublicId() + ", " + 
pSource.getSystemId() + " at " + new Date();
+         lch.comment(msg.toCharArray(), 0, msg.length());
+      }
       xr.setContentHandler(xsSAXParser);
       xr.parse(pSource);
+      if (fos != null) {
+         fos.close();
+         fos = null;
+      }
       return (XsESchema) xsSAXParser.getBean();
-    } finally {
+       } finally {
+         if (fos != null) {
+                 try { fos.close(); } catch (Throwable ignore) {}
+         }
       context.setCurrentContentHandler(null);
       parser.set(null);
     }

Modified: 
webservices/jaxme/branches/MAVEN/projects/xs/src/main/java/org/apache/ws/jaxme/xs/impl/XSElementImpl.java
URL: 
http://svn.apache.org/viewvc/webservices/jaxme/branches/MAVEN/projects/xs/src/main/java/org/apache/ws/jaxme/xs/impl/XSElementImpl.java?rev=437259&r1=437258&r2=437259&view=diff
==============================================================================
--- 
webservices/jaxme/branches/MAVEN/projects/xs/src/main/java/org/apache/ws/jaxme/xs/impl/XSElementImpl.java
 (original)
+++ 
webservices/jaxme/branches/MAVEN/projects/xs/src/main/java/org/apache/ws/jaxme/xs/impl/XSElementImpl.java
 Sat Aug 26 17:25:00 2006
@@ -67,7 +67,7 @@
     return (XsTElement) getXsObject();
   }
 
-  protected boolean isReference() {
+  public boolean isReference() {
     return getXsTElement().getRef() != null;
   }
 

Modified: 
webservices/jaxme/branches/MAVEN/projects/xs/src/main/java/org/apache/ws/jaxme/xs/impl/XSLogicalParser.java
URL: 
http://svn.apache.org/viewvc/webservices/jaxme/branches/MAVEN/projects/xs/src/main/java/org/apache/ws/jaxme/xs/impl/XSLogicalParser.java?rev=437259&r1=437258&r2=437259&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 Aug 26 17:25:00 2006
@@ -17,10 +17,12 @@
 package org.apache.ws.jaxme.xs.impl;
 
 import java.io.File;
+import java.io.FileOutputStream;
 import java.io.IOException;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
@@ -39,6 +41,7 @@
 import org.apache.ws.jaxme.xs.parser.XSContext;
 import org.apache.ws.jaxme.xs.parser.XsSAXParser;
 import org.apache.ws.jaxme.xs.parser.impl.LocSAXException;
+import org.apache.ws.jaxme.xs.util.LoggingContentHandler;
 import org.apache.ws.jaxme.xs.xml.XsAnyURI;
 import org.apache.ws.jaxme.xs.xml.XsEAnnotation;
 import org.apache.ws.jaxme.xs.xml.XsEImport;
@@ -60,11 +63,13 @@
 import org.apache.ws.jaxme.xs.xml.XsTSimpleExplicitGroup;
 import org.apache.ws.jaxme.xs.xml.XsTTopLevelElement;
 import org.w3c.dom.Node;
+import org.xml.sax.ContentHandler;
 import org.xml.sax.EntityResolver;
 import org.xml.sax.InputSource;
 import org.xml.sax.Locator;
 import org.xml.sax.SAXException;
 import org.xml.sax.XMLReader;
+import org.xml.sax.helpers.LocatorImpl;
 
 
 /** <p>Implementation of a logical parser.</p>
@@ -283,7 +288,45 @@
                parseSyntax(pLocator, pSchemaLocation, result);
                return result;
        }
-       
+
+       private void runContentHandler(XMLReader pReader, ContentHandler 
pHandler, InputSource pSource)
+                       throws SAXException, IOException {
+               String logDir = 
System.getProperty("org.apache.ws.jaxme.xs.logDir");
+               FileOutputStream fos = null;
+               try {
+                       if (logDir != null) {
+                               File tmpFile = File.createTempFile("jaxmexs", 
".xsd", new File(logDir));
+                               fos = new FileOutputStream(tmpFile);
+                               LoggingContentHandler lch = new 
LoggingContentHandler(fos);
+                               lch.setParent(pReader);
+                               pReader = lch;
+                               String msg = "Read from " + 
pSource.getPublicId() + ", " + pSource.getSystemId() + " at " + new Date();
+                               lch.comment(msg.toCharArray(), 0, msg.length());
+                       }
+                       SchemaTransformer transformer = 
getData().getXSObjectFactory().getSchemaTransformer();
+                       if (transformer != null) {
+                               transformer.parse(pSource, pReader);
+                               final InputSource newSource = 
transformer.getTransformedInputSource();
+                               newSource.setSystemId(pSource.getSystemId());
+                               newSource.setPublicId(pSource.getPublicId());
+                               pSource = newSource;
+                               pReader = transformer.getTransformedXMLReader();
+                       }
+                       pReader.setContentHandler(pHandler);
+                       pReader.parse(pSource);
+                       if (fos != null) {
+                               fos.close();
+                               fos = null;
+                       }
+               } catch (ParserConfigurationException e) {
+                       throw new SAXException(e);
+               } finally {
+                       if (fos != null) {
+                               try { fos.close(); } catch (Throwable ignore) {}
+                       }
+               }
+       }
+
        protected void parseSyntax(Locator pLocator, String pSchemaLocation,
                        XsESchema pSchema)
        throws SAXException, IOException, ParserConfigurationException {
@@ -305,8 +348,7 @@
                        addSyntaxSchema(pSchema);
                        try {
                                data.setCurrentContentHandler(xsSAXParser);
-                               xr.setContentHandler(xsSAXParser);
-                               xr.parse(schemaSource);
+                               runContentHandler(xr, xsSAXParser, 
schemaSource);
                        } finally {
                                removeSyntaxSchema();
                        }
@@ -493,7 +535,7 @@
                XsESchema importedSchema = parseSyntax(pNode);
                importSchema(pImportingSchema, pNamespace, importedSchema, 
null, pSchemaLocation);
        }
-       
+
        /** <p>Parses the given [EMAIL PROTECTED] InputSource} syntactically and
         * converts the objects that it finds into logical objects.
         * These logical objects are added to the given [EMAIL PROTECTED] 
XSSchema}.</p>
@@ -533,7 +575,7 @@
                                        XsAnyURI schemaLocation = 
xsEImport.getSchemaLocation();
                                        importSchema(pSyntaxSchema, namespace 
== null ? null : namespace.toString(),
                                                        schemaLocation == null 
? null : schemaLocation.toString(),
-                                                                       
xsEImport.getLocator());
+                                                                       
getImportLocator(xsEImport, pSchemaLocation));
                                } else {
                                        add(pSyntaxSchema, childs[i]);
                                }
@@ -542,20 +584,30 @@
                        removeSyntaxSchema();
                }
        }
+
+       private Locator getImportLocator(XsObject pObject, String 
pSchemaLocation) {
+               Locator result = pObject.getLocator();
+               if (result == null  &&  pSchemaLocation != null) {
+                       LocatorImpl loc = new LocatorImpl();
+                       loc.setSystemId(pSchemaLocation);
+                       result = loc;
+               }
+               return result;
+       }
        
        
        private static class SubstitutionGroup {
                private final List members = new ArrayList();
                private final XSElement head;
                
-               public SubstitutionGroup(XSElement pHead) {
+               SubstitutionGroup(XSElement pHead) {
                        head = pHead;
                }
-               public XSElement getHead() { return head; }
-               public XSElement[] getMembers() {
+               XSElement getHead() { return head; }
+               XSElement[] getMembers() {
                        return (XSElement[]) members.toArray(new 
XSElement[members.size()]);
                }
-               public void addMember(XSElement pElement) {
+               void addMember(XSElement pElement) {
                        members.add(pElement);
                }
        }
@@ -655,18 +707,11 @@
         * @see #getXSContentHandler()
         */
        public XSSchema parse(InputSource pSource)
-       throws ParserConfigurationException, SAXException, IOException {
+                       throws ParserConfigurationException, SAXException, 
IOException {
                XSContentHandler contentHandler = 
getXSContentHandler(pSource.getSystemId());
                XSContext data = getData();
                XMLReader xr = 
data.getXsObjectFactory().newXMLReader(isValidating());
-               SchemaTransformer transformer = 
data.getXSObjectFactory().getSchemaTransformer();
-               if (transformer != null) {
-                       transformer.parse(pSource, xr);
-                       pSource = transformer.getTransformedInputSource();
-                       xr = transformer.getTransformedXMLReader();
-               }
-               xr.setContentHandler(contentHandler);
-               xr.parse(pSource);
+               runContentHandler(xr, contentHandler, pSource);
                return getSchema();
        }
        

Modified: 
webservices/jaxme/branches/MAVEN/projects/xs/src/main/java/org/apache/ws/jaxme/xs/jaxb/impl/JAXBAppinfoImpl.java
URL: 
http://svn.apache.org/viewvc/webservices/jaxme/branches/MAVEN/projects/xs/src/main/java/org/apache/ws/jaxme/xs/jaxb/impl/JAXBAppinfoImpl.java?rev=437259&r1=437258&r2=437259&view=diff
==============================================================================
--- 
webservices/jaxme/branches/MAVEN/projects/xs/src/main/java/org/apache/ws/jaxme/xs/jaxb/impl/JAXBAppinfoImpl.java
 (original)
+++ 
webservices/jaxme/branches/MAVEN/projects/xs/src/main/java/org/apache/ws/jaxme/xs/jaxb/impl/JAXBAppinfoImpl.java
 Sat Aug 26 17:25:00 2006
@@ -98,9 +98,6 @@
         return jaxbTypesafeEnumClass;
       }
     }
-    System.err.println("this = " + this);
-    System.err.println("AnnotationParent = " + annotationParent);
-    System.err.println("annotationParent.parent = " + 
annotationParent.getParentObject());
     throw new LocSAXException("The declaration of a typesafeEnumClass is only 
allowed in xs:simpleType/xs:annotation/xs:appinfo.", getLocator());
   }
 

Added: 
webservices/jaxme/branches/MAVEN/projects/xs/src/main/java/org/apache/ws/jaxme/xs/util/LoggingContentHandler.java
URL: 
http://svn.apache.org/viewvc/webservices/jaxme/branches/MAVEN/projects/xs/src/main/java/org/apache/ws/jaxme/xs/util/LoggingContentHandler.java?rev=437259&view=auto
==============================================================================
--- 
webservices/jaxme/branches/MAVEN/projects/xs/src/main/java/org/apache/ws/jaxme/xs/util/LoggingContentHandler.java
 (added)
+++ 
webservices/jaxme/branches/MAVEN/projects/xs/src/main/java/org/apache/ws/jaxme/xs/util/LoggingContentHandler.java
 Sat Aug 26 17:25:00 2006
@@ -0,0 +1,139 @@
+package org.apache.ws.jaxme.xs.util;
+
+import java.io.OutputStream;
+import java.io.Writer;
+
+import javax.xml.transform.Result;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.sax.SAXTransformerFactory;
+import javax.xml.transform.sax.TransformerHandler;
+import javax.xml.transform.stream.StreamResult;
+
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+import org.xml.sax.ext.LexicalHandler;
+import org.xml.sax.helpers.XMLFilterImpl;
+
+
+
+/**
+ * A content handler, which may be used to log a stream of SAX events.
+ */
+public class LoggingContentHandler extends XMLFilterImpl implements 
LexicalHandler {
+       private final TransformerHandler th;
+
+       /**
+        * Creates a new instance, which is logging to the given
+        * output stream.
+        */
+       public LoggingContentHandler(OutputStream pStream) throws SAXException {
+               this(new StreamResult(pStream));
+       }
+
+       /**
+        * Creates a new instance, which is logging to the given writer.
+        * @param pResult
+        * @throws SAXException
+        */
+       public LoggingContentHandler(Writer pWriter) throws SAXException {
+               this(new StreamResult(pWriter));
+       }
+
+       private LoggingContentHandler(Result pResult) throws SAXException {
+               try {
+                       th = ((SAXTransformerFactory) 
TransformerFactory.newInstance()).newTransformerHandler();
+               } catch (TransformerException e) {
+                       throw new SAXException(e);
+               }
+               th.setResult(pResult);
+       }
+
+       public void characters(char[] arg0, int arg1, int arg2) throws 
SAXException {
+               th.characters(arg0, arg1, arg2);
+               super.characters(arg0, arg1, arg2);
+       }
+
+       public void endDocument() throws SAXException {
+               th.endDocument();
+               super.endDocument();
+       }
+
+       public void endElement(String arg0, String arg1, String arg2) throws 
SAXException {
+               th.endElement(arg0, arg1, arg2);
+               super.endElement(arg0, arg1, arg2);
+       }
+
+       public void endPrefixMapping(String arg0) throws SAXException {
+               th.endPrefixMapping(arg0);
+               super.endPrefixMapping(arg0);
+       }
+
+       public void ignorableWhitespace(char[] arg0, int arg1, int arg2) throws 
SAXException {
+               th.ignorableWhitespace(arg0, arg1, arg2);
+               super.ignorableWhitespace(arg0, arg1, arg2);
+       }
+
+       public void notationDecl(String arg0, String arg1, String arg2) throws 
SAXException {
+               th.notationDecl(arg0, arg1, arg2);
+               super.notationDecl(arg0, arg1, arg2);
+       }
+
+       public void processingInstruction(String arg0, String arg1) throws 
SAXException {
+               th.processingInstruction(arg0, arg1);
+               super.processingInstruction(arg0, arg1);
+       }
+
+       public void skippedEntity(String arg0) throws SAXException {
+               th.skippedEntity(arg0);
+               super.skippedEntity(arg0);
+       }
+
+       public void startDocument() throws SAXException {
+               th.startDocument();
+               super.startDocument();
+       }
+
+       public void startElement(String arg0, String arg1, String arg2, 
Attributes arg3) throws SAXException {
+               th.startElement(arg0, arg1, arg2, arg3);
+               super.startElement(arg0, arg1, arg2, arg3);
+       }
+
+       public void startPrefixMapping(String arg0, String arg1) throws 
SAXException {
+               th.startPrefixMapping(arg0, arg1);
+               super.startPrefixMapping(arg0, arg1);
+       }
+
+       public void unparsedEntityDecl(String arg0, String arg1, String arg2, 
String arg3) throws SAXException {
+               th.unparsedEntityDecl(arg0, arg1, arg2, arg3);
+               super.unparsedEntityDecl(arg0, arg1, arg2, arg3);
+       }
+
+       public void comment(char[] arg0, int arg1, int arg2) throws 
SAXException {
+               th.comment(arg0, arg1, arg2);
+       }
+
+       public void endCDATA() throws SAXException {
+               th.endCDATA();
+       }
+
+       public void endDTD() throws SAXException {
+               th.endDTD();
+       }
+
+       public void endEntity(String arg0) throws SAXException {
+               th.endEntity(arg0);
+       }
+
+       public void startCDATA() throws SAXException {
+               th.startCDATA();
+       }
+
+       public void startDTD(String arg0, String arg1, String arg2) throws 
SAXException {
+               th.startDTD(arg0, arg1, arg2);
+       }
+
+       public void startEntity(String arg0) throws SAXException {
+               th.startEntity(arg0);
+       }
+}

Modified: 
webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/JAXBObjectSG.java
URL: 
http://svn.apache.org/viewvc/webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/JAXBObjectSG.java?rev=437259&r1=437258&r2=437259&view=diff
==============================================================================
--- 
webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/JAXBObjectSG.java
 (original)
+++ 
webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/JAXBObjectSG.java
 Sat Aug 26 17:25:00 2006
@@ -102,7 +102,14 @@
     if (useTypesContext) {
       myClassContext = pClassContext;
     } else {
-      myClassContext = new GlobalContext(name, pObject, null, null, pSchema);
+       XSObject contextObject = pObject;
+       if (pObject instanceof XSElement) {
+               XSElement element = (XSElement) pObject;
+               if (element.isReference()) {
+                       contextObject = pObject.getXSSchema().getElement(name);
+               }
+       }
+       myClassContext = new GlobalContext(name, contextObject, null, null, 
pSchema);
     }
 
     if (isClassGlobal) {

Modified: 
webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/ccsg/GroupHandlerSG.java
URL: 
http://svn.apache.org/viewvc/webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/ccsg/GroupHandlerSG.java?rev=437259&r1=437258&r2=437259&view=diff
==============================================================================
--- 
webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/ccsg/GroupHandlerSG.java
 (original)
+++ 
webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/ccsg/GroupHandlerSG.java
 Sat Aug 26 17:25:00 2006
@@ -205,9 +205,9 @@
                ObjectSG oSG = pParticle.getObjectSG();
                TypeSG tSG = oSG.getTypeSG();
                if (tSG.isComplex()) {
-                       JavaQName elementInterfaceClass = 
pParticle.getObjectSG().getClassContext().getXMLInterfaceName();
                        Object[] o, h;
                        if (oSG.getClassContext().isGlobal()) {
+                               JavaQName elementInterfaceClass = 
pParticle.getObjectSG().getClassContext().getXMLInterfaceName();
                                LocalJavaField manager = 
pJm.newJavaField(JMManager.class);
                                
manager.addLine("getHandler().getJMUnmarshaller().getJAXBContextImpl().getManagerS(",
                                                elementInterfaceClass, 
".class)");

Modified: 
webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/impl/JAXBContextImpl.java
URL: 
http://svn.apache.org/viewvc/webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/impl/JAXBContextImpl.java?rev=437259&r1=437258&r2=437259&view=diff
==============================================================================
--- 
webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/impl/JAXBContextImpl.java
 (original)
+++ 
webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/impl/JAXBContextImpl.java
 Sat Aug 26 17:25:00 2006
@@ -299,7 +299,6 @@
       pm.init(manager);
       return pm;
     } catch (Exception e) {
-      e.printStackTrace(System.err);
       throw new PMException("Could not instantiate persistence manager class " 
+
                              c.getName(), e);
     }

Modified: 
webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/junit/BindingsTest.java
URL: 
http://svn.apache.org/viewvc/webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/junit/BindingsTest.java?rev=437259&r1=437258&r2=437259&view=diff
==============================================================================
--- 
webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/junit/BindingsTest.java
 (original)
+++ 
webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/junit/BindingsTest.java
 Sat Aug 26 17:25:00 2006
@@ -15,11 +15,18 @@
  */
 package org.apache.ws.jaxme.junit;
 
+import java.io.File;
+
 import junit.framework.TestCase;
 
-import org.apache.ws.jaxme.test.bindings.vo.FooType;
-import org.apache.ws.jaxme.test.bindings.vo.ObjectFactory;
-import org.apache.ws.jaxme.test.bindings.vo.YesNoTypeClass;
+import org.apache.ws.jaxme.generator.Generator;
+import org.apache.ws.jaxme.generator.SchemaReader;
+import org.apache.ws.jaxme.generator.impl.GeneratorImpl;
+import org.apache.ws.jaxme.generator.sg.impl.JAXBSchemaReader;
+//import org.apache.ws.jaxme.test.bindings.vo.FooType;
+//import org.apache.ws.jaxme.test.bindings.vo.ObjectFactory;
+//import org.apache.ws.jaxme.test.bindings.vo.YesNoTypeClass;
+import org.xml.sax.InputSource;
 
 
 /**
@@ -27,11 +34,25 @@
  */
 public class BindingsTest extends TestCase {
        /**
-        * Tests, whether the binding has moved the schema to the proper
-        * package and whether the string constants have been created.
+        * Tests running the generator with a binding file.
         */
-       public void testBindings() throws Exception {
-               FooType foo = new ObjectFactory().createFoo();
-               foo.setBar(YesNoTypeClass.YES);
+       public void testBindingGenerator() throws Exception {
+               Generator g = new GeneratorImpl();
+               g.setTargetDirectory(new File("build/tests/binding/src"));
+               g.setResourceTargetDirectory(new 
File("build/tests/binding/src"));
+               g.addBindings(new InputSource(new 
File("src/test/jaxb/bindings/bindings.jxb").toURI().toURL().toExternalForm()));
+               SchemaReader sr = new JAXBSchemaReader();
+               sr.setGenerator(g);
+               g.setSchemaReader(sr);
+               g.generate(new File("src/test/jaxb/bindings/bindings.xsd"));
        }
+
+//     /**
+//      * Tests, whether the binding has moved the schema to the proper
+//      * package and whether the string constants have been created.
+//      */
+//     public void testBindings() throws Exception {
+//             FooType foo = new ObjectFactory().createFoo();
+//             foo.setBar(YesNoTypeClass.YES);
+//     }
 }

Modified: webservices/jaxme/branches/b0_5/src/test/jaxb/bindings/bindings.jxb
URL: 
http://svn.apache.org/viewvc/webservices/jaxme/branches/b0_5/src/test/jaxb/bindings/bindings.jxb?rev=437259&r1=437258&r2=437259&view=diff
==============================================================================
--- webservices/jaxme/branches/b0_5/src/test/jaxb/bindings/bindings.jxb 
(original)
+++ webservices/jaxme/branches/b0_5/src/test/jaxb/bindings/bindings.jxb Sat Aug 
26 17:25:00 2006
@@ -1,3 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2003, 2004  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.
+-->
 <jxb:bindings
     version="1.0"
     xmlns:jxb="http://java.sun.com/xml/ns/jaxb";
@@ -5,6 +21,15 @@
   <jxb:bindings schemaLocation="bindings.xsd" node="/xs:schema">
        <jxb:schemaBindings>
       <jxb:package name="org.apache.ws.jaxme.test.bindings.vo"/>
+       </jxb:schemaBindings>
+    <jxb:bindings node="xs:[EMAIL PROTECTED]'YesNoType']">
+      <jxb:typesafeEnumClass/>
+    </jxb:bindings>
+  </jxb:bindings>
+
+  <jxb:bindings schemaLocation="imported.xsi" node="/xs:schema">
+       <jxb:schemaBindings>
+      <jxb:package name="org.apache.ws.jaxme.test.bindings.imported.vo"/>
        </jxb:schemaBindings>
     <jxb:bindings node="xs:[EMAIL PROTECTED]'YesNoType']">
       <jxb:typesafeEnumClass/>

Modified: webservices/jaxme/branches/b0_5/src/test/jaxb/bindings/bindings.xsd
URL: 
http://svn.apache.org/viewvc/webservices/jaxme/branches/b0_5/src/test/jaxb/bindings/bindings.xsd?rev=437259&r1=437258&r2=437259&view=diff
==============================================================================
--- webservices/jaxme/branches/b0_5/src/test/jaxb/bindings/bindings.xsd 
(original)
+++ webservices/jaxme/branches/b0_5/src/test/jaxb/bindings/bindings.xsd Sat Aug 
26 17:25:00 2006
@@ -14,15 +14,22 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
- <xs:schema
+<xs:schema
     xmlns:xs="http://www.w3.org/2001/XMLSchema";
     targetNamespace="http://ws.apache.org/jaxme/test/bindings";
     xmlns:bnd="http://ws.apache.org/jaxme/test/bindings";
+    xmlns:imp="http://ws.apache.org/jaxme/test/bindings/imported";
     elementFormDefault="qualified"
     attributeFormDefault="unqualified">
+  <xs:import namespace="http://ws.apache.org/jaxme/test/bindings/imported"; 
schemaLocation="imported.xsi"/>
+
   <xs:element name="foo">
     <xs:complexType>
+      <xs:sequence>
+        <xs:element ref="imp:blubb"/>
+      </xs:sequence>
       <xs:attribute name="bar" type="bnd:YesNoType"/>
+      <xs:attribute name="blabb" type="imp:YesNoType"/>
     </xs:complexType>
   </xs:element>
 

Added: webservices/jaxme/branches/b0_5/src/test/jaxb/bindings/imported.xsi
URL: 
http://svn.apache.org/viewvc/webservices/jaxme/branches/b0_5/src/test/jaxb/bindings/imported.xsi?rev=437259&view=auto
==============================================================================
--- webservices/jaxme/branches/b0_5/src/test/jaxb/bindings/imported.xsi (added)
+++ webservices/jaxme/branches/b0_5/src/test/jaxb/bindings/imported.xsi Sat Aug 
26 17:25:00 2006
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2003, 2004  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.
+-->
+<xs:schema
+    xmlns:xs="http://www.w3.org/2001/XMLSchema";
+    targetNamespace="http://ws.apache.org/jaxme/test/bindings/imported";
+    xmlns:imp="http://ws.apache.org/jaxme/test/bindings/imported";
+    elementFormDefault="qualified"
+    attributeFormDefault="unqualified">
+  <xs:element name="blubb">
+    <xs:complexType>
+      <xs:attribute name="blabb" type="imp:YesNoType"/>
+    </xs:complexType>
+  </xs:element>
+
+  <xs:simpleType name="YesNoType">
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="YES"/>
+      <xs:enumeration value="NO"/>
+    </xs:restriction>
+  </xs:simpleType>
+</xs:schema>

Modified: 
webservices/jaxme/branches/b0_5/src/xs/org/apache/ws/jaxme/xs/XSElement.java
URL: 
http://svn.apache.org/viewvc/webservices/jaxme/branches/b0_5/src/xs/org/apache/ws/jaxme/xs/XSElement.java?rev=437259&r1=437258&r2=437259&view=diff
==============================================================================
--- 
webservices/jaxme/branches/b0_5/src/xs/org/apache/ws/jaxme/xs/XSElement.java 
(original)
+++ 
webservices/jaxme/branches/b0_5/src/xs/org/apache/ws/jaxme/xs/XSElement.java 
Sat Aug 26 17:25:00 2006
@@ -96,4 +96,9 @@
    * Fetch all of the keyref's declared by this element.
    */
   public XSKeyRef[] getKeyRefs();
+
+  /**
+   * Returns, whether the element is created by referencing another element.
+   */
+  public boolean isReference();
 }

Modified: 
webservices/jaxme/branches/b0_5/src/xs/org/apache/ws/jaxme/xs/XSParser.java
URL: 
http://svn.apache.org/viewvc/webservices/jaxme/branches/b0_5/src/xs/org/apache/ws/jaxme/xs/XSParser.java?rev=437259&r1=437258&r2=437259&view=diff
==============================================================================
--- webservices/jaxme/branches/b0_5/src/xs/org/apache/ws/jaxme/xs/XSParser.java 
(original)
+++ webservices/jaxme/branches/b0_5/src/xs/org/apache/ws/jaxme/xs/XSParser.java 
Sat Aug 26 17:25:00 2006
@@ -16,8 +16,11 @@
  */
 package org.apache.ws.jaxme.xs;
 
+import java.io.File;
+import java.io.FileOutputStream;
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 
 import javax.xml.parsers.ParserConfigurationException;
@@ -26,6 +29,7 @@
 import org.apache.ws.jaxme.xs.parser.XSContext;
 import org.apache.ws.jaxme.xs.parser.XsSAXParser;
 import org.apache.ws.jaxme.xs.parser.impl.XSContextImpl;
+import org.apache.ws.jaxme.xs.util.LoggingContentHandler;
 import org.apache.ws.jaxme.xs.xml.XsESchema;
 import org.apache.ws.jaxme.xs.xml.XsObjectFactory;
 import org.w3c.dom.Node;
@@ -116,18 +120,36 @@
    * representation.</p>
    * @see #parse(InputSource)
    */
-  public XsESchema parseSyntax(InputSource pSource) throws 
ParserConfigurationException, SAXException, IOException {
+  public XsESchema parseSyntax(final InputSource pSource) throws 
ParserConfigurationException, SAXException, IOException {
     XSContext context = getContext();
     parser.set(this);
+    FileOutputStream fos = null;
     try {
       XsObjectFactory factory = context.getXsObjectFactory();
       XsSAXParser xsSAXParser = factory.newXsSAXParser();
       context.setCurrentContentHandler(xsSAXParser);
       XMLReader xr = factory.newXMLReader(isValidating());
+      String logDir = System.getProperty("org.apache.ws.jaxme.xs.logDir");
+      if (logDir != null) {
+         File tmpFile = File.createTempFile("jaxmexs", ".xsd", new 
File(logDir));
+         fos = new FileOutputStream(tmpFile);
+         LoggingContentHandler lch = new LoggingContentHandler(fos);
+         lch.setParent(xr);
+         xr = lch;
+         String msg = "Read from " + pSource.getPublicId() + ", " + 
pSource.getSystemId() + " at " + new Date();
+         lch.comment(msg.toCharArray(), 0, msg.length());
+      }
       xr.setContentHandler(xsSAXParser);
       xr.parse(pSource);
+      if (fos != null) {
+         fos.close();
+         fos = null;
+      }
       return (XsESchema) xsSAXParser.getBean();
-    } finally {
+       } finally {
+         if (fos != null) {
+                 try { fos.close(); } catch (Throwable ignore) {}
+         }
       context.setCurrentContentHandler(null);
       parser.set(null);
     }

Modified: 
webservices/jaxme/branches/b0_5/src/xs/org/apache/ws/jaxme/xs/impl/XSElementImpl.java
URL: 
http://svn.apache.org/viewvc/webservices/jaxme/branches/b0_5/src/xs/org/apache/ws/jaxme/xs/impl/XSElementImpl.java?rev=437259&r1=437258&r2=437259&view=diff
==============================================================================
--- 
webservices/jaxme/branches/b0_5/src/xs/org/apache/ws/jaxme/xs/impl/XSElementImpl.java
 (original)
+++ 
webservices/jaxme/branches/b0_5/src/xs/org/apache/ws/jaxme/xs/impl/XSElementImpl.java
 Sat Aug 26 17:25:00 2006
@@ -67,7 +67,7 @@
     return (XsTElement) getXsObject();
   }
 
-  protected boolean isReference() {
+  public boolean isReference() {
     return getXsTElement().getRef() != null;
   }
 

Modified: 
webservices/jaxme/branches/b0_5/src/xs/org/apache/ws/jaxme/xs/impl/XSLogicalParser.java
URL: 
http://svn.apache.org/viewvc/webservices/jaxme/branches/b0_5/src/xs/org/apache/ws/jaxme/xs/impl/XSLogicalParser.java?rev=437259&r1=437258&r2=437259&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 Aug 26 17:25:00 2006
@@ -17,10 +17,12 @@
 package org.apache.ws.jaxme.xs.impl;
 
 import java.io.File;
+import java.io.FileOutputStream;
 import java.io.IOException;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
@@ -39,6 +41,7 @@
 import org.apache.ws.jaxme.xs.parser.XSContext;
 import org.apache.ws.jaxme.xs.parser.XsSAXParser;
 import org.apache.ws.jaxme.xs.parser.impl.LocSAXException;
+import org.apache.ws.jaxme.xs.util.LoggingContentHandler;
 import org.apache.ws.jaxme.xs.xml.XsAnyURI;
 import org.apache.ws.jaxme.xs.xml.XsEAnnotation;
 import org.apache.ws.jaxme.xs.xml.XsEImport;
@@ -60,11 +63,13 @@
 import org.apache.ws.jaxme.xs.xml.XsTSimpleExplicitGroup;
 import org.apache.ws.jaxme.xs.xml.XsTTopLevelElement;
 import org.w3c.dom.Node;
+import org.xml.sax.ContentHandler;
 import org.xml.sax.EntityResolver;
 import org.xml.sax.InputSource;
 import org.xml.sax.Locator;
 import org.xml.sax.SAXException;
 import org.xml.sax.XMLReader;
+import org.xml.sax.helpers.LocatorImpl;
 
 
 /** <p>Implementation of a logical parser.</p>
@@ -283,7 +288,45 @@
                parseSyntax(pLocator, pSchemaLocation, result);
                return result;
        }
-       
+
+       private void runContentHandler(XMLReader pReader, ContentHandler 
pHandler, InputSource pSource)
+                       throws SAXException, IOException {
+               String logDir = 
System.getProperty("org.apache.ws.jaxme.xs.logDir");
+               FileOutputStream fos = null;
+               try {
+                       if (logDir != null) {
+                               File tmpFile = File.createTempFile("jaxmexs", 
".xsd", new File(logDir));
+                               fos = new FileOutputStream(tmpFile);
+                               LoggingContentHandler lch = new 
LoggingContentHandler(fos);
+                               lch.setParent(pReader);
+                               pReader = lch;
+                               String msg = "Read from " + 
pSource.getPublicId() + ", " + pSource.getSystemId() + " at " + new Date();
+                               lch.comment(msg.toCharArray(), 0, msg.length());
+                       }
+                       SchemaTransformer transformer = 
getData().getXSObjectFactory().getSchemaTransformer();
+                       if (transformer != null) {
+                               transformer.parse(pSource, pReader);
+                               final InputSource newSource = 
transformer.getTransformedInputSource();
+                               newSource.setSystemId(pSource.getSystemId());
+                               newSource.setPublicId(pSource.getPublicId());
+                               pSource = newSource;
+                               pReader = transformer.getTransformedXMLReader();
+                       }
+                       pReader.setContentHandler(pHandler);
+                       pReader.parse(pSource);
+                       if (fos != null) {
+                               fos.close();
+                               fos = null;
+                       }
+               } catch (ParserConfigurationException e) {
+                       throw new SAXException(e);
+               } finally {
+                       if (fos != null) {
+                               try { fos.close(); } catch (Throwable ignore) {}
+                       }
+               }
+       }
+
        protected void parseSyntax(Locator pLocator, String pSchemaLocation,
                        XsESchema pSchema)
        throws SAXException, IOException, ParserConfigurationException {
@@ -305,8 +348,7 @@
                        addSyntaxSchema(pSchema);
                        try {
                                data.setCurrentContentHandler(xsSAXParser);
-                               xr.setContentHandler(xsSAXParser);
-                               xr.parse(schemaSource);
+                               runContentHandler(xr, xsSAXParser, 
schemaSource);
                        } finally {
                                removeSyntaxSchema();
                        }
@@ -493,7 +535,7 @@
                XsESchema importedSchema = parseSyntax(pNode);
                importSchema(pImportingSchema, pNamespace, importedSchema, 
null, pSchemaLocation);
        }
-       
+
        /** <p>Parses the given [EMAIL PROTECTED] InputSource} syntactically and
         * converts the objects that it finds into logical objects.
         * These logical objects are added to the given [EMAIL PROTECTED] 
XSSchema}.</p>
@@ -533,7 +575,7 @@
                                        XsAnyURI schemaLocation = 
xsEImport.getSchemaLocation();
                                        importSchema(pSyntaxSchema, namespace 
== null ? null : namespace.toString(),
                                                        schemaLocation == null 
? null : schemaLocation.toString(),
-                                                                       
xsEImport.getLocator());
+                                                                       
getImportLocator(xsEImport, pSchemaLocation));
                                } else {
                                        add(pSyntaxSchema, childs[i]);
                                }
@@ -542,20 +584,30 @@
                        removeSyntaxSchema();
                }
        }
+
+       private Locator getImportLocator(XsObject pObject, String 
pSchemaLocation) {
+               Locator result = pObject.getLocator();
+               if (result == null  &&  pSchemaLocation != null) {
+                       LocatorImpl loc = new LocatorImpl();
+                       loc.setSystemId(pSchemaLocation);
+                       result = loc;
+               }
+               return result;
+       }
        
        
        private static class SubstitutionGroup {
                private final List members = new ArrayList();
                private final XSElement head;
                
-               public SubstitutionGroup(XSElement pHead) {
+               SubstitutionGroup(XSElement pHead) {
                        head = pHead;
                }
-               public XSElement getHead() { return head; }
-               public XSElement[] getMembers() {
+               XSElement getHead() { return head; }
+               XSElement[] getMembers() {
                        return (XSElement[]) members.toArray(new 
XSElement[members.size()]);
                }
-               public void addMember(XSElement pElement) {
+               void addMember(XSElement pElement) {
                        members.add(pElement);
                }
        }
@@ -655,18 +707,11 @@
         * @see #getXSContentHandler()
         */
        public XSSchema parse(InputSource pSource)
-       throws ParserConfigurationException, SAXException, IOException {
+                       throws ParserConfigurationException, SAXException, 
IOException {
                XSContentHandler contentHandler = 
getXSContentHandler(pSource.getSystemId());
                XSContext data = getData();
                XMLReader xr = 
data.getXsObjectFactory().newXMLReader(isValidating());
-               SchemaTransformer transformer = 
data.getXSObjectFactory().getSchemaTransformer();
-               if (transformer != null) {
-                       transformer.parse(pSource, xr);
-                       pSource = transformer.getTransformedInputSource();
-                       xr = transformer.getTransformedXMLReader();
-               }
-               xr.setContentHandler(contentHandler);
-               xr.parse(pSource);
+               runContentHandler(xr, contentHandler, pSource);
                return getSchema();
        }
        

Modified: 
webservices/jaxme/branches/b0_5/src/xs/org/apache/ws/jaxme/xs/jaxb/impl/JAXBAppinfoImpl.java
URL: 
http://svn.apache.org/viewvc/webservices/jaxme/branches/b0_5/src/xs/org/apache/ws/jaxme/xs/jaxb/impl/JAXBAppinfoImpl.java?rev=437259&r1=437258&r2=437259&view=diff
==============================================================================
--- 
webservices/jaxme/branches/b0_5/src/xs/org/apache/ws/jaxme/xs/jaxb/impl/JAXBAppinfoImpl.java
 (original)
+++ 
webservices/jaxme/branches/b0_5/src/xs/org/apache/ws/jaxme/xs/jaxb/impl/JAXBAppinfoImpl.java
 Sat Aug 26 17:25:00 2006
@@ -98,9 +98,6 @@
         return jaxbTypesafeEnumClass;
       }
     }
-    System.err.println("this = " + this);
-    System.err.println("AnnotationParent = " + annotationParent);
-    System.err.println("annotationParent.parent = " + 
annotationParent.getParentObject());
     throw new LocSAXException("The declaration of a typesafeEnumClass is only 
allowed in xs:simpleType/xs:annotation/xs:appinfo.", getLocator());
   }
 

Added: 
webservices/jaxme/branches/b0_5/src/xs/org/apache/ws/jaxme/xs/util/LoggingContentHandler.java
URL: 
http://svn.apache.org/viewvc/webservices/jaxme/branches/b0_5/src/xs/org/apache/ws/jaxme/xs/util/LoggingContentHandler.java?rev=437259&view=auto
==============================================================================
--- 
webservices/jaxme/branches/b0_5/src/xs/org/apache/ws/jaxme/xs/util/LoggingContentHandler.java
 (added)
+++ 
webservices/jaxme/branches/b0_5/src/xs/org/apache/ws/jaxme/xs/util/LoggingContentHandler.java
 Sat Aug 26 17:25:00 2006
@@ -0,0 +1,139 @@
+package org.apache.ws.jaxme.xs.util;
+
+import java.io.OutputStream;
+import java.io.Writer;
+
+import javax.xml.transform.Result;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.sax.SAXTransformerFactory;
+import javax.xml.transform.sax.TransformerHandler;
+import javax.xml.transform.stream.StreamResult;
+
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+import org.xml.sax.ext.LexicalHandler;
+import org.xml.sax.helpers.XMLFilterImpl;
+
+
+
+/**
+ * A content handler, which may be used to log a stream of SAX events.
+ */
+public class LoggingContentHandler extends XMLFilterImpl implements 
LexicalHandler {
+       private final TransformerHandler th;
+
+       /**
+        * Creates a new instance, which is logging to the given
+        * output stream.
+        */
+       public LoggingContentHandler(OutputStream pStream) throws SAXException {
+               this(new StreamResult(pStream));
+       }
+
+       /**
+        * Creates a new instance, which is logging to the given writer.
+        * @param pResult
+        * @throws SAXException
+        */
+       public LoggingContentHandler(Writer pWriter) throws SAXException {
+               this(new StreamResult(pWriter));
+       }
+
+       private LoggingContentHandler(Result pResult) throws SAXException {
+               try {
+                       th = ((SAXTransformerFactory) 
TransformerFactory.newInstance()).newTransformerHandler();
+               } catch (TransformerException e) {
+                       throw new SAXException(e);
+               }
+               th.setResult(pResult);
+       }
+
+       public void characters(char[] arg0, int arg1, int arg2) throws 
SAXException {
+               th.characters(arg0, arg1, arg2);
+               super.characters(arg0, arg1, arg2);
+       }
+
+       public void endDocument() throws SAXException {
+               th.endDocument();
+               super.endDocument();
+       }
+
+       public void endElement(String arg0, String arg1, String arg2) throws 
SAXException {
+               th.endElement(arg0, arg1, arg2);
+               super.endElement(arg0, arg1, arg2);
+       }
+
+       public void endPrefixMapping(String arg0) throws SAXException {
+               th.endPrefixMapping(arg0);
+               super.endPrefixMapping(arg0);
+       }
+
+       public void ignorableWhitespace(char[] arg0, int arg1, int arg2) throws 
SAXException {
+               th.ignorableWhitespace(arg0, arg1, arg2);
+               super.ignorableWhitespace(arg0, arg1, arg2);
+       }
+
+       public void notationDecl(String arg0, String arg1, String arg2) throws 
SAXException {
+               th.notationDecl(arg0, arg1, arg2);
+               super.notationDecl(arg0, arg1, arg2);
+       }
+
+       public void processingInstruction(String arg0, String arg1) throws 
SAXException {
+               th.processingInstruction(arg0, arg1);
+               super.processingInstruction(arg0, arg1);
+       }
+
+       public void skippedEntity(String arg0) throws SAXException {
+               th.skippedEntity(arg0);
+               super.skippedEntity(arg0);
+       }
+
+       public void startDocument() throws SAXException {
+               th.startDocument();
+               super.startDocument();
+       }
+
+       public void startElement(String arg0, String arg1, String arg2, 
Attributes arg3) throws SAXException {
+               th.startElement(arg0, arg1, arg2, arg3);
+               super.startElement(arg0, arg1, arg2, arg3);
+       }
+
+       public void startPrefixMapping(String arg0, String arg1) throws 
SAXException {
+               th.startPrefixMapping(arg0, arg1);
+               super.startPrefixMapping(arg0, arg1);
+       }
+
+       public void unparsedEntityDecl(String arg0, String arg1, String arg2, 
String arg3) throws SAXException {
+               th.unparsedEntityDecl(arg0, arg1, arg2, arg3);
+               super.unparsedEntityDecl(arg0, arg1, arg2, arg3);
+       }
+
+       public void comment(char[] arg0, int arg1, int arg2) throws 
SAXException {
+               th.comment(arg0, arg1, arg2);
+       }
+
+       public void endCDATA() throws SAXException {
+               th.endCDATA();
+       }
+
+       public void endDTD() throws SAXException {
+               th.endDTD();
+       }
+
+       public void endEntity(String arg0) throws SAXException {
+               th.endEntity(arg0);
+       }
+
+       public void startCDATA() throws SAXException {
+               th.startCDATA();
+       }
+
+       public void startDTD(String arg0, String arg1, String arg2) throws 
SAXException {
+               th.startDTD(arg0, arg1, arg2);
+       }
+
+       public void startEntity(String arg0) throws SAXException {
+               th.startEntity(arg0);
+       }
+}



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to