View Javadoc

1   // SECTION-START[License Header]
2   // <editor-fold defaultstate="collapsed" desc=" Generated License ">
3   /*
4    *   Copyright (c) 2010 The JOMC Project
5    *   Copyright (c) 2005 Christian Schulte <schulte2005@users.sourceforge.net>
6    *   All rights reserved.
7    *
8    *   Redistribution and use in source and binary forms, with or without
9    *   modification, are permitted provided that the following conditions
10   *   are met:
11   *
12   *     o Redistributions of source code must retain the above copyright
13   *       notice, this list of conditions and the following disclaimer.
14   *
15   *     o Redistributions in binary form must reproduce the above copyright
16   *       notice, this list of conditions and the following disclaimer in
17   *       the documentation and/or other materials provided with the
18   *       distribution.
19   *
20   *   THIS SOFTWARE IS PROVIDED BY THE JOMC PROJECT AND CONTRIBUTORS "AS IS"
21   *   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
22   *   THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23   *   PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE JOMC PROJECT OR
24   *   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25   *   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26   *   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
27   *   OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
28   *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
29   *   OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
30   *   ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31   *
32   *   $Id: JaxbMarshallerFactory.java 2234 2010-06-29 00:03:38Z schulte2005 $
33   *
34   */
35  // </editor-fold>
36  // SECTION-END
37  package org.jomc.sdk.model.support;
38  
39  import java.util.Map;
40  import javax.xml.bind.JAXBContext;
41  import javax.xml.bind.JAXBException;
42  import javax.xml.bind.Marshaller;
43  import org.jomc.sdk.model.SchemaType;
44  import static org.jomc.sdk.model.modlet.SdkModelProvider.XML_SCHEMA_JAVA_CONTEXT_ID_ATTRIBUTE;
45  import org.xml.sax.SAXException;
46  
47  // SECTION-START[Documentation]
48  // <editor-fold defaultstate="collapsed" desc=" Generated Documentation ">
49  /**
50   * XML Schema Set JAXB 'Marshaller' factory implementation.
51   * <p><b>Specifications</b><ul>
52   * <li>{@code 'javax.xml.bind.Marshaller'} {@code (javax.xml.bind.Marshaller)} {@code Multiton}</li>
53   * </ul></p>
54   * <p><b>Properties</b><ul>
55   * <li>"{@link #getJaxbEncoding jaxbEncoding}"
56   * <blockquote>Property of type {@code java.lang.String}.
57   * <p>See {@link javax.xml.bind.Marshaller#JAXB_ENCODING}.</p>
58   * </blockquote></li>
59   * <li>"{@link #isJaxbFormattedOutput jaxbFormattedOutput}"
60   * <blockquote>Property of type {@code java.lang.Boolean}.
61   * <p>See {@link javax.xml.bind.Marshaller#JAXB_FORMATTED_OUTPUT}.</p>
62   * </blockquote></li>
63   * <li>"{@link #isJaxbFragment jaxbFragment}"
64   * <blockquote>Property of type {@code java.lang.Boolean}.
65   * <p>See {@link javax.xml.bind.Marshaller#JAXB_FRAGMENT}.</p>
66   * </blockquote></li>
67   * <li>"{@link #getJaxbNoNamespaceSchemaLocation jaxbNoNamespaceSchemaLocation}"
68   * <blockquote>Property of type {@code java.lang.String}.
69   * <p>See {@link javax.xml.bind.Marshaller#JAXB_NO_NAMESPACE_SCHEMA_LOCATION}.</p>
70   * </blockquote></li>
71   * <li>"{@link #isJaxbSchemaLocation jaxbSchemaLocation}"
72   * <blockquote>Property of type {@code boolean}.
73   * <p>See {@link javax.xml.bind.Marshaller#JAXB_SCHEMA_LOCATION}.</p>
74   * </blockquote></li>
75   * <li>"{@link #getMarshallerProperties marshallerProperties}"
76   * <blockquote>Property of type {@code java.util.Map<String,Object>}.
77   * </blockquote></li>
78   * <li>"{@link #getSchemas schemas}"
79   * <blockquote>Property of type {@code org.jomc.sdk.model.SchemasType}.
80   * <p>List of XML schemas ('schemas' element from XML namespace 'http://jomc.org/sdk/model).</p>
81   * </blockquote></li>
82   * </ul></p>
83   * <p><b>Dependencies</b><ul>
84   * <li>"{@link #getAttachmentMarshaller attachmentMarshaller}"<blockquote>
85   * Dependency on {@code 'javax.xml.bind.attachment.AttachmentMarshaller'} {@code (javax.xml.bind.attachment.AttachmentMarshaller)} bound to an instance.</blockquote></li>
86   * <li>"{@link #getSchema schema}"<blockquote>
87   * Dependency on {@code 'javax.xml.validation.Schema'} {@code (javax.xml.validation.Schema)} bound to an instance.</blockquote></li>
88   * <li>"{@link #getValidationEventHandler validationEventHandler}"<blockquote>
89   * Dependency on {@code 'javax.xml.bind.ValidationEventHandler'} {@code (javax.xml.bind.ValidationEventHandler)} bound to an instance.</blockquote></li>
90   * </ul></p>
91   *
92   * @author <a href="mailto:schulte2005@users.sourceforge.net">Christian Schulte</a> 1.0
93   * @version $Id: JaxbMarshallerFactory.java 2234 2010-06-29 00:03:38Z schulte2005 $
94   */
95  // </editor-fold>
96  // SECTION-END
97  // SECTION-START[Annotations]
98  // <editor-fold defaultstate="collapsed" desc=" Generated Annotations ">
99  @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.0", comments = "See http://jomc.sourceforge.net/jomc/1.0/jomc-tools" )
100 // </editor-fold>
101 // SECTION-END
102 public final class JaxbMarshallerFactory
103 {
104     // SECTION-START[Marshaller]
105     // SECTION-END
106     // SECTION-START[JaxbMarshallerFactory]
107 
108     public Marshaller getObject() throws JAXBException, SAXException
109     {
110         Marshaller marshaller = null;
111         final StringBuilder schemaLocation = new StringBuilder();
112         final StringBuilder packageNames = new StringBuilder();
113 
114         for ( SchemaType s : this.getSchemas().getSchema() )
115         {
116             if ( s.getPublicId() != null )
117             {
118                 schemaLocation.append( " " ).append( s.getPublicId() ).append( " " ).append( s.getSystemId() );
119             }
120 
121             if ( s.getOtherAttributes().containsKey( XML_SCHEMA_JAVA_CONTEXT_ID_ATTRIBUTE ) )
122             {
123                 packageNames.append( ':' ).append( s.getOtherAttributes().get( XML_SCHEMA_JAVA_CONTEXT_ID_ATTRIBUTE ) );
124             }
125         }
126 
127         if ( packageNames.length() > 0 )
128         {
129             marshaller = JAXBContext.newInstance( packageNames.substring( 1 ) ).createMarshaller();
130             marshaller.setProperty( Marshaller.JAXB_ENCODING, this.getJaxbEncoding() );
131             marshaller.setProperty( Marshaller.JAXB_FORMATTED_OUTPUT, this.isJaxbFormattedOutput() );
132             marshaller.setProperty( Marshaller.JAXB_FRAGMENT, this.isJaxbFragment() );
133 
134             if ( this.getJaxbNoNamespaceSchemaLocation().length() > 0 )
135             {
136                 marshaller.setProperty( Marshaller.JAXB_NO_NAMESPACE_SCHEMA_LOCATION,
137                                         this.getJaxbNoNamespaceSchemaLocation() );
138 
139             }
140 
141             if ( this.isJaxbSchemaLocation() && schemaLocation.length() > 0 )
142             {
143                 marshaller.setProperty( Marshaller.JAXB_SCHEMA_LOCATION, schemaLocation.substring( 1 ) );
144             }
145 
146             marshaller.setAttachmentMarshaller( this.getAttachmentMarshaller() );
147             marshaller.setEventHandler( this.getValidationEventHandler() );
148             marshaller.setSchema( this.getSchema() );
149 
150             for ( Map.Entry<String, Object> e : this.getMarshallerProperties().entrySet() )
151             {
152                 marshaller.setProperty( e.getKey(), e.getValue() );
153             }
154         }
155 
156         return marshaller;
157     }
158 
159     // SECTION-END
160     // SECTION-START[Constructors]
161     // <editor-fold defaultstate="collapsed" desc=" Generated Constructors ">
162 
163     /** Creates a new {@code JaxbMarshallerFactory} instance. */
164     @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.0", comments = "See http://jomc.sourceforge.net/jomc/1.0/jomc-tools" )
165     public JaxbMarshallerFactory()
166     {
167         // SECTION-START[Default Constructor]
168         super();
169         // SECTION-END
170     }
171     // </editor-fold>
172     // SECTION-END
173     // SECTION-START[Dependencies]
174     // <editor-fold defaultstate="collapsed" desc=" Generated Dependencies ">
175 
176     /**
177      * Gets the {@code attachmentMarshaller} dependency.
178      * <p>This method returns the {@code 'JOMC SDK Model Default'} object of the {@code 'javax.xml.bind.attachment.AttachmentMarshaller'} {@code (javax.xml.bind.attachment.AttachmentMarshaller)} specification.</p>
179      * <p>That specification does not apply to any scope. A new object is returned whenever requested and bound to this instance.</p>
180      * @return The {@code attachmentMarshaller} dependency.
181      * {@code null} if no object is available.
182      * @throws org.jomc.ObjectManagementException if getting the dependency instance fails.
183      */
184     @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.0", comments = "See http://jomc.sourceforge.net/jomc/1.0/jomc-tools" )
185     private javax.xml.bind.attachment.AttachmentMarshaller getAttachmentMarshaller()
186     {
187         return (javax.xml.bind.attachment.AttachmentMarshaller) org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getDependency( this, "attachmentMarshaller" );
188     }
189 
190     /**
191      * Gets the {@code schema} dependency.
192      * <p>This method returns the {@code 'JOMC SDK Model Default'} object of the {@code 'javax.xml.validation.Schema'} {@code (javax.xml.validation.Schema)} specification.</p>
193      * <p>That specification does not apply to any scope. A new object is returned whenever requested and bound to this instance.</p>
194      * @return The {@code schema} dependency.
195      * {@code null} if no object is available.
196      * @throws org.jomc.ObjectManagementException if getting the dependency instance fails.
197      */
198     @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.0", comments = "See http://jomc.sourceforge.net/jomc/1.0/jomc-tools" )
199     private javax.xml.validation.Schema getSchema()
200     {
201         return (javax.xml.validation.Schema) org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getDependency( this, "schema" );
202     }
203 
204     /**
205      * Gets the {@code validationEventHandler} dependency.
206      * <p>This method returns the {@code 'JOMC SDK Model Default'} object of the {@code 'javax.xml.bind.ValidationEventHandler'} {@code (javax.xml.bind.ValidationEventHandler)} specification.</p>
207      * <p>That specification does not apply to any scope. A new object is returned whenever requested and bound to this instance.</p>
208      * @return The {@code validationEventHandler} dependency.
209      * {@code null} if no object is available.
210      * @throws org.jomc.ObjectManagementException if getting the dependency instance fails.
211      */
212     @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.0", comments = "See http://jomc.sourceforge.net/jomc/1.0/jomc-tools" )
213     private javax.xml.bind.ValidationEventHandler getValidationEventHandler()
214     {
215         return (javax.xml.bind.ValidationEventHandler) org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getDependency( this, "validationEventHandler" );
216     }
217     // </editor-fold>
218     // SECTION-END
219     // SECTION-START[Properties]
220     // <editor-fold defaultstate="collapsed" desc=" Generated Properties ">
221 
222     /**
223      * Gets the value of the {@code jaxbEncoding} property.
224      * @return See {@link javax.xml.bind.Marshaller#JAXB_ENCODING}.
225      * @throws org.jomc.ObjectManagementException if getting the property instance fails.
226      */
227     @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.0", comments = "See http://jomc.sourceforge.net/jomc/1.0/jomc-tools" )
228     private java.lang.String getJaxbEncoding()
229     {
230         final java.lang.String _p = (java.lang.String) org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getProperty( this, "jaxbEncoding" );
231         assert _p != null : "'jaxbEncoding' property not found.";
232         return _p;
233     }
234 
235     /**
236      * Gets the value of the {@code jaxbFormattedOutput} property.
237      * @return See {@link javax.xml.bind.Marshaller#JAXB_FORMATTED_OUTPUT}.
238      * @throws org.jomc.ObjectManagementException if getting the property instance fails.
239      */
240     @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.0", comments = "See http://jomc.sourceforge.net/jomc/1.0/jomc-tools" )
241     private java.lang.Boolean isJaxbFormattedOutput()
242     {
243         final java.lang.Boolean _p = (java.lang.Boolean) org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getProperty( this, "jaxbFormattedOutput" );
244         assert _p != null : "'jaxbFormattedOutput' property not found.";
245         return _p;
246     }
247 
248     /**
249      * Gets the value of the {@code jaxbFragment} property.
250      * @return See {@link javax.xml.bind.Marshaller#JAXB_FRAGMENT}.
251      * @throws org.jomc.ObjectManagementException if getting the property instance fails.
252      */
253     @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.0", comments = "See http://jomc.sourceforge.net/jomc/1.0/jomc-tools" )
254     private java.lang.Boolean isJaxbFragment()
255     {
256         final java.lang.Boolean _p = (java.lang.Boolean) org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getProperty( this, "jaxbFragment" );
257         assert _p != null : "'jaxbFragment' property not found.";
258         return _p;
259     }
260 
261     /**
262      * Gets the value of the {@code jaxbNoNamespaceSchemaLocation} property.
263      * @return See {@link javax.xml.bind.Marshaller#JAXB_NO_NAMESPACE_SCHEMA_LOCATION}.
264      * @throws org.jomc.ObjectManagementException if getting the property instance fails.
265      */
266     @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.0", comments = "See http://jomc.sourceforge.net/jomc/1.0/jomc-tools" )
267     private java.lang.String getJaxbNoNamespaceSchemaLocation()
268     {
269         final java.lang.String _p = (java.lang.String) org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getProperty( this, "jaxbNoNamespaceSchemaLocation" );
270         assert _p != null : "'jaxbNoNamespaceSchemaLocation' property not found.";
271         return _p;
272     }
273 
274     /**
275      * Gets the value of the {@code jaxbSchemaLocation} property.
276      * @return See {@link javax.xml.bind.Marshaller#JAXB_SCHEMA_LOCATION}.
277      * @throws org.jomc.ObjectManagementException if getting the property instance fails.
278      */
279     @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.0", comments = "See http://jomc.sourceforge.net/jomc/1.0/jomc-tools" )
280     private boolean isJaxbSchemaLocation()
281     {
282         final java.lang.Boolean _p = (java.lang.Boolean) org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getProperty( this, "jaxbSchemaLocation" );
283         assert _p != null : "'jaxbSchemaLocation' property not found.";
284         return _p.booleanValue();
285     }
286 
287     /**
288      * Gets the value of the {@code marshallerProperties} property.
289      * @return The value of the {@code marshallerProperties} property.
290      * @throws org.jomc.ObjectManagementException if getting the property instance fails.
291      */
292     @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.0", comments = "See http://jomc.sourceforge.net/jomc/1.0/jomc-tools" )
293     private java.util.Map<String,Object> getMarshallerProperties()
294     {
295         final java.util.Map<String,Object> _p = (java.util.Map<String,Object>) org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getProperty( this, "marshallerProperties" );
296         assert _p != null : "'marshallerProperties' property not found.";
297         return _p;
298     }
299 
300     /**
301      * Gets the value of the {@code schemas} property.
302      * @return List of XML schemas ('schemas' element from XML namespace 'http://jomc.org/sdk/model).
303      * @throws org.jomc.ObjectManagementException if getting the property instance fails.
304      */
305     @javax.annotation.Generated( value = "org.jomc.tools.SourceFileProcessor 1.0", comments = "See http://jomc.sourceforge.net/jomc/1.0/jomc-tools" )
306     private org.jomc.sdk.model.SchemasType getSchemas()
307     {
308         final org.jomc.sdk.model.SchemasType _p = (org.jomc.sdk.model.SchemasType) org.jomc.ObjectManagerFactory.getObjectManager( this.getClass().getClassLoader() ).getProperty( this, "schemas" );
309         assert _p != null : "'schemas' property not found.";
310         return _p;
311     }
312     // </editor-fold>
313     // SECTION-END
314     // SECTION-START[Messages]
315     // SECTION-END
316 }