src/share/jaxws_classes/com/sun/tools/internal/xjc/reader/xmlschema/bindinfo/BindInfo.java

Print this page




  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 
  26 package com.sun.tools.internal.xjc.reader.xmlschema.bindinfo;
  27 
  28 import java.io.FilterWriter;
  29 import java.io.IOException;
  30 import java.io.StringWriter;
  31 import java.io.Writer;
  32 import java.util.ArrayList;
  33 import java.util.Iterator;
  34 import java.util.List;
  35 
  36 import javax.xml.bind.JAXBContext;
  37 import javax.xml.bind.JAXBException;

  38 import javax.xml.bind.annotation.XmlAnyElement;
  39 import javax.xml.bind.annotation.XmlElement;
  40 import javax.xml.bind.annotation.XmlMixed;
  41 import javax.xml.bind.annotation.XmlRootElement;
  42 import javax.xml.bind.annotation.XmlType;
  43 import javax.xml.transform.Transformer;
  44 import javax.xml.transform.TransformerException;
  45 import javax.xml.transform.dom.DOMSource;
  46 import javax.xml.transform.stream.StreamResult;
  47 
  48 import com.sun.codemodel.internal.JDocComment;

  49 import com.sun.tools.internal.xjc.SchemaCache;
  50 import com.sun.tools.internal.xjc.model.CCustomizations;
  51 import com.sun.tools.internal.xjc.model.CPluginCustomization;
  52 import com.sun.tools.internal.xjc.model.Model;
  53 import com.sun.tools.internal.xjc.reader.Ring;
  54 import com.sun.tools.internal.xjc.reader.xmlschema.BGMBuilder;
  55 import com.sun.xml.internal.bind.annotation.XmlLocation;
  56 import com.sun.xml.internal.bind.marshaller.MinimumEscapeHandler;
  57 import com.sun.xml.internal.bind.v2.WellKnownNamespace;
  58 import com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl;
  59 import com.sun.xml.internal.xsom.XSComponent;
  60 
  61 import org.w3c.dom.Element;
  62 import org.xml.sax.Locator;
  63 
  64 /**
  65  * Container for customization declarations.
  66  *
  67  * We use JAXB ourselves and parse this object from "xs:annotation".
  68  *
  69  * @author
  70  *     Kohsuke Kawaguchi (kohsuke,kawaguchi@sun.com)
  71  */
  72 @XmlRootElement(namespace=WellKnownNamespace.XML_SCHEMA,name="annotation")
  73 @XmlType(namespace=WellKnownNamespace.XML_SCHEMA,name="foobar")
  74 public final class BindInfo implements Iterable<BIDeclaration> {
  75 
  76     private BGMBuilder builder;
  77 
  78     @XmlLocation
  79     private Locator location;
  80 
  81     /**
  82      * Documentation taken from &lt;xs:documentation>s.
  83      */
  84     @XmlElement(namespace=WellKnownNamespace.XML_SCHEMA)
  85     private Documentation documentation;
  86 
  87     /**
  88      * Returns true if this {@link BindInfo} doesn't contain any useful
  89      * information.
  90      *
  91      * This flag is used to discard unused {@link BindInfo}s early to save memory footprint.
  92      */


 294             if(d instanceof BIXPluginCustomization) {
 295                 BIXPluginCustomization pc = (BIXPluginCustomization) d;
 296                 pc.markAsAcknowledged();
 297                 if(!Ring.get(Model.class).options.pluginURIs.contains(pc.getName().getNamespaceURI()))
 298                     continue;   // this isn't a plugin customization
 299                 if(r==null)
 300                     r = new CCustomizations();
 301                 r.add(new CPluginCustomization(pc.element,pc.getLocation()));
 302             }
 303         }
 304 
 305         if(r==null)     r = CCustomizations.EMPTY;
 306         return new CCustomizations(r);
 307     }
 308     /** An instance with the empty contents. */
 309     public final static BindInfo empty = new BindInfo();
 310 
 311     /**
 312      * Lazily prepared {@link JAXBContext}.
 313      */
 314     private static JAXBContextImpl customizationContext;
 315 
 316     public static JAXBContextImpl getJAXBContext() {
 317         synchronized(AnnotationParserFactoryImpl.class) {
 318             try {
 319                 if(customizationContext==null)
 320                     customizationContext = new JAXBContextImpl.JAXBContextBuilder().setClasses(
 321                         new Class[] {

 322                             BindInfo.class, // for xs:annotation
 323                             BIClass.class,
 324                             BIConversion.User.class,
 325                             BIConversion.UserAdapter.class,
 326                             BIDom.class,
 327                             BIFactoryMethod.class,
 328                             BIInlineBinaryData.class,
 329                             BIXDom.class,
 330                             BIXSubstitutable.class,
 331                             BIEnum.class,
 332                             BIEnumMember.class,
 333                             BIGlobalBinding.class,
 334                             BIProperty.class,
 335                             BISchemaBinding.class
 336                         }).build();


 337                 return customizationContext;
 338             } catch (JAXBException e) {
 339                 throw new AssertionError(e);
 340             }







 341         }
 342     }
 343 
 344     /**
 345      * Lazily parsed schema for the binding file.
 346      */
 347     public static final SchemaCache bindingFileSchema = new SchemaCache(BindInfo.class.getResource("binding.xsd"));
 348 }


  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 
  26 package com.sun.tools.internal.xjc.reader.xmlschema.bindinfo;
  27 
  28 import java.io.FilterWriter;
  29 import java.io.IOException;
  30 import java.io.StringWriter;
  31 import java.io.Writer;
  32 import java.util.ArrayList;
  33 import java.util.Iterator;
  34 import java.util.List;
  35 
  36 import javax.xml.bind.JAXBContext;
  37 import javax.xml.bind.JAXBException;
  38 import javax.xml.bind.Unmarshaller;
  39 import javax.xml.bind.annotation.XmlAnyElement;
  40 import javax.xml.bind.annotation.XmlElement;
  41 import javax.xml.bind.annotation.XmlMixed;
  42 import javax.xml.bind.annotation.XmlRootElement;
  43 import javax.xml.bind.annotation.XmlType;
  44 import javax.xml.transform.Transformer;
  45 import javax.xml.transform.TransformerException;
  46 import javax.xml.transform.dom.DOMSource;
  47 import javax.xml.transform.stream.StreamResult;
  48 
  49 import com.sun.codemodel.internal.JDocComment;
  50 import com.sun.xml.internal.bind.v2.WellKnownNamespace;
  51 import com.sun.tools.internal.xjc.SchemaCache;
  52 import com.sun.tools.internal.xjc.model.CCustomizations;
  53 import com.sun.tools.internal.xjc.model.CPluginCustomization;
  54 import com.sun.tools.internal.xjc.model.Model;
  55 import com.sun.tools.internal.xjc.reader.Ring;
  56 import com.sun.tools.internal.xjc.reader.xmlschema.BGMBuilder;
  57 import com.sun.xml.internal.bind.annotation.XmlLocation;
  58 import com.sun.xml.internal.bind.marshaller.MinimumEscapeHandler;


  59 import com.sun.xml.internal.xsom.XSComponent;
  60 
  61 import org.w3c.dom.Element;
  62 import org.xml.sax.Locator;
  63 
  64 /**
  65  * Container for customization declarations.
  66  *
  67  * We use JAXB ourselves and parse this object from "xs:annotation".
  68  *
  69  * @author
  70  *     Kohsuke Kawaguchi (kohsuke,kawaguchi@sun.com)
  71  */
  72 @XmlRootElement(namespace= WellKnownNamespace.XML_SCHEMA,name="annotation")
  73 @XmlType(namespace=WellKnownNamespace.XML_SCHEMA,name="foobar")
  74 public final class BindInfo implements Iterable<BIDeclaration> {
  75 
  76     private BGMBuilder builder;
  77 
  78     @XmlLocation
  79     private Locator location;
  80 
  81     /**
  82      * Documentation taken from &lt;xs:documentation>s.
  83      */
  84     @XmlElement(namespace=WellKnownNamespace.XML_SCHEMA)
  85     private Documentation documentation;
  86 
  87     /**
  88      * Returns true if this {@link BindInfo} doesn't contain any useful
  89      * information.
  90      *
  91      * This flag is used to discard unused {@link BindInfo}s early to save memory footprint.
  92      */


 294             if(d instanceof BIXPluginCustomization) {
 295                 BIXPluginCustomization pc = (BIXPluginCustomization) d;
 296                 pc.markAsAcknowledged();
 297                 if(!Ring.get(Model.class).options.pluginURIs.contains(pc.getName().getNamespaceURI()))
 298                     continue;   // this isn't a plugin customization
 299                 if(r==null)
 300                     r = new CCustomizations();
 301                 r.add(new CPluginCustomization(pc.element,pc.getLocation()));
 302             }
 303         }
 304 
 305         if(r==null)     r = CCustomizations.EMPTY;
 306         return new CCustomizations(r);
 307     }
 308     /** An instance with the empty contents. */
 309     public final static BindInfo empty = new BindInfo();
 310 
 311     /**
 312      * Lazily prepared {@link JAXBContext}.
 313      */
 314     private static volatile JAXBContext customizationContext;
 315 
 316     public static JAXBContext getCustomizationContext() {

 317         try {
 318             if (customizationContext == null) {
 319                 synchronized (BindInfo.class) {
 320                     if (customizationContext == null) {
 321                         customizationContext = JAXBContext.newInstance(
 322                                 BindInfo.class, // for xs:annotation
 323                                 BIClass.class,
 324                                 BIConversion.User.class,
 325                                 BIConversion.UserAdapter.class,
 326                                 BIDom.class,
 327                                 BIFactoryMethod.class,
 328                                 BIInlineBinaryData.class,
 329                                 BIXDom.class,
 330                                 BIXSubstitutable.class,
 331                                 BIEnum.class,
 332                                 BIEnumMember.class,
 333                                 BIGlobalBinding.class,
 334                                 BIProperty.class,
 335                                 BISchemaBinding.class);
 336                     }
 337                 }
 338             }
 339             return customizationContext;
 340         } catch (JAXBException e) {
 341             throw new AssertionError(e);
 342         }
 343     }
 344 
 345     public static Unmarshaller getCustomizationUnmarshaller() {
 346         try {
 347             return getCustomizationContext().createUnmarshaller();
 348         } catch (JAXBException e) {
 349             throw new AssertionError(e);
 350         }
 351     }
 352 
 353     /**
 354      * Lazily parsed schema for the binding file.
 355      */
 356     public static final SchemaCache bindingFileSchema = new SchemaCache(BindInfo.class.getResource("binding.xsd"));
 357 }