74 import javax.xml.transform.Source;
75 import javax.xml.transform.Transformer;
76 import javax.xml.transform.TransformerException;
77 import javax.xml.transform.stream.StreamResult;
78
79 import com.sun.istack.internal.ByteArrayDataSource;
80 import com.sun.xml.internal.bind.DatatypeConverterImpl;
81 import com.sun.xml.internal.bind.WhiteSpaceProcessor;
82 import com.sun.xml.internal.bind.api.AccessorException;
83 import com.sun.xml.internal.bind.v2.TODO;
84 import com.sun.xml.internal.bind.v2.WellKnownNamespace;
85 import com.sun.xml.internal.bind.v2.model.runtime.RuntimeBuiltinLeafInfo;
86 import com.sun.xml.internal.bind.v2.runtime.Name;
87 import com.sun.xml.internal.bind.v2.runtime.Transducer;
88 import com.sun.xml.internal.bind.v2.runtime.XMLSerializer;
89 import com.sun.xml.internal.bind.v2.runtime.output.Pcdata;
90 import com.sun.xml.internal.bind.v2.runtime.unmarshaller.Base64Data;
91 import com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext;
92 import com.sun.xml.internal.bind.v2.util.ByteArrayOutputStreamEx;
93 import com.sun.xml.internal.bind.v2.util.DataSourceSource;
94
95 import org.xml.sax.SAXException;
96
97 /**
98 * {@link BuiltinLeafInfoImpl} with a support for runtime.
99 *
100 * <p>
101 * In particular this class defines {@link Transducer}s for the built-in types.
102 *
103 * @author Kohsuke Kawaguchi
104 */
105 public abstract class RuntimeBuiltinLeafInfoImpl<T> extends BuiltinLeafInfoImpl<Type,Class>
106 implements RuntimeBuiltinLeafInfo, Transducer<T> {
107
108 private RuntimeBuiltinLeafInfoImpl(Class type, QName... typeNames) {
109 super(type, typeNames);
110 LEAVES.put(type,this);
111 }
112
113 public final Class getClazz() {
114 return (Class)getType();
115 }
116
117
118 public final Transducer getTransducer() {
119 return this;
120 }
121
122 public boolean useNamespace() {
123 return false;
124 }
125
126 public final boolean isDefault() {
127 return true;
179 public static final Map<Type,RuntimeBuiltinLeafInfoImpl<?>> LEAVES = new HashMap<Type, RuntimeBuiltinLeafInfoImpl<?>>();
180
181 private static QName createXS(String typeName) {
182 return new QName(WellKnownNamespace.XML_SCHEMA,typeName);
183 }
184
185 public static final RuntimeBuiltinLeafInfoImpl<String> STRING;
186
187 private static final String DATE = "date";
188
189 /**
190 * List of all {@link RuntimeBuiltinLeafInfoImpl}s.
191 *
192 * <p>
193 * This corresponds to the built-in Java classes that are specified to be
194 * handled differently than ordinary classes. See table 8-2 "Mapping of Standard Java classes".
195 */
196 public static final List<RuntimeBuiltinLeafInfoImpl<?>> builtinBeanInfos;
197
198 public static final String MAP_ANYURI_TO_URI = "mapAnyUriToUri";
199
200 static {
201
202 QName[] qnames = (System.getProperty(MAP_ANYURI_TO_URI) == null) ? new QName[] {
203 createXS("string"),
204 createXS("anySimpleType"),
205 createXS("normalizedString"),
206 createXS("anyURI"),
207 createXS("token"),
208 createXS("language"),
209 createXS("Name"),
210 createXS("NCName"),
211 createXS("NMTOKEN"),
212 createXS("ENTITY")}
213 :
214 new QName[] {
215 createXS("string"),
216 createXS("anySimpleType"),
217 createXS("normalizedString"),
218 createXS("token"),
943 }
944 }
945 if (buf.length() > 0){
946 throw new javax.xml.bind.MarshalException(
947 Messages.XMLGREGORIANCALENDAR_INVALID.format(type.getLocalPart())
948 + buf.toString());
949 }
950 }
951
952 /**
953 * Format string for the {@link XMLGregorianCalendar}.
954 */
955 private static final Map<QName,String> xmlGregorianCalendarFormatString = new HashMap<QName, String>();
956
957 static {
958 Map<QName,String> m = xmlGregorianCalendarFormatString;
959 // See 4971612: be careful for SCCS substitution
960 m.put(DatatypeConstants.DATETIME, "%Y-%M-%DT%h:%m:%s"+ "%z");
961 m.put(DatatypeConstants.DATE, "%Y-%M-%D" +"%z");
962 m.put(DatatypeConstants.TIME, "%h:%m:%s"+ "%z");
963 m.put(DatatypeConstants.GMONTH, "--%M--%z");
964 m.put(DatatypeConstants.GDAY, "---%D" + "%z");
965 m.put(DatatypeConstants.GYEAR, "%Y" + "%z");
966 m.put(DatatypeConstants.GYEARMONTH, "%Y-%M" + "%z");
967 m.put(DatatypeConstants.GMONTHDAY, "--%M-%D" +"%z");
968 }
969
970 /**
971 * Field designations for XMLGregorianCalendar format string.
972 * sec 0x0000001
973 * min 0x0000010
974 * hrs 0x0000100
975 * day 0x0001000
976 * month 0x0010000
977 * year 0x0100000
978 * timezone 0x1000000
979 */
980 private static final Map<QName, Integer> xmlGregorianCalendarFieldRef =
981 new HashMap<QName, Integer>();
982 static {
983 Map<QName, Integer> f = xmlGregorianCalendarFieldRef;
|
74 import javax.xml.transform.Source;
75 import javax.xml.transform.Transformer;
76 import javax.xml.transform.TransformerException;
77 import javax.xml.transform.stream.StreamResult;
78
79 import com.sun.istack.internal.ByteArrayDataSource;
80 import com.sun.xml.internal.bind.DatatypeConverterImpl;
81 import com.sun.xml.internal.bind.WhiteSpaceProcessor;
82 import com.sun.xml.internal.bind.api.AccessorException;
83 import com.sun.xml.internal.bind.v2.TODO;
84 import com.sun.xml.internal.bind.v2.WellKnownNamespace;
85 import com.sun.xml.internal.bind.v2.model.runtime.RuntimeBuiltinLeafInfo;
86 import com.sun.xml.internal.bind.v2.runtime.Name;
87 import com.sun.xml.internal.bind.v2.runtime.Transducer;
88 import com.sun.xml.internal.bind.v2.runtime.XMLSerializer;
89 import com.sun.xml.internal.bind.v2.runtime.output.Pcdata;
90 import com.sun.xml.internal.bind.v2.runtime.unmarshaller.Base64Data;
91 import com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext;
92 import com.sun.xml.internal.bind.v2.util.ByteArrayOutputStreamEx;
93 import com.sun.xml.internal.bind.v2.util.DataSourceSource;
94 import java.util.logging.Logger;
95 import com.sun.xml.internal.bind.Util;
96 import java.util.logging.Level;
97
98 import org.xml.sax.SAXException;
99
100 /**
101 * {@link BuiltinLeafInfoImpl} with a support for runtime.
102 *
103 * <p>
104 * In particular this class defines {@link Transducer}s for the built-in types.
105 *
106 * @author Kohsuke Kawaguchi
107 */
108 public abstract class RuntimeBuiltinLeafInfoImpl<T> extends BuiltinLeafInfoImpl<Type,Class>
109 implements RuntimeBuiltinLeafInfo, Transducer<T> {
110
111 private static final Logger logger = Util.getClassLogger();
112
113 private RuntimeBuiltinLeafInfoImpl(Class type, QName... typeNames) {
114 super(type, typeNames);
115 LEAVES.put(type,this);
116 }
117
118 public final Class getClazz() {
119 return (Class)getType();
120 }
121
122
123 public final Transducer getTransducer() {
124 return this;
125 }
126
127 public boolean useNamespace() {
128 return false;
129 }
130
131 public final boolean isDefault() {
132 return true;
184 public static final Map<Type,RuntimeBuiltinLeafInfoImpl<?>> LEAVES = new HashMap<Type, RuntimeBuiltinLeafInfoImpl<?>>();
185
186 private static QName createXS(String typeName) {
187 return new QName(WellKnownNamespace.XML_SCHEMA,typeName);
188 }
189
190 public static final RuntimeBuiltinLeafInfoImpl<String> STRING;
191
192 private static final String DATE = "date";
193
194 /**
195 * List of all {@link RuntimeBuiltinLeafInfoImpl}s.
196 *
197 * <p>
198 * This corresponds to the built-in Java classes that are specified to be
199 * handled differently than ordinary classes. See table 8-2 "Mapping of Standard Java classes".
200 */
201 public static final List<RuntimeBuiltinLeafInfoImpl<?>> builtinBeanInfos;
202
203 public static final String MAP_ANYURI_TO_URI = "mapAnyUriToUri";
204 public static final String USE_OLD_GMONTH_MAPPING = "jaxb.ri.useOldGmonthMapping";
205
206 static {
207
208 QName[] qnames = (System.getProperty(MAP_ANYURI_TO_URI) == null) ? new QName[] {
209 createXS("string"),
210 createXS("anySimpleType"),
211 createXS("normalizedString"),
212 createXS("anyURI"),
213 createXS("token"),
214 createXS("language"),
215 createXS("Name"),
216 createXS("NCName"),
217 createXS("NMTOKEN"),
218 createXS("ENTITY")}
219 :
220 new QName[] {
221 createXS("string"),
222 createXS("anySimpleType"),
223 createXS("normalizedString"),
224 createXS("token"),
949 }
950 }
951 if (buf.length() > 0){
952 throw new javax.xml.bind.MarshalException(
953 Messages.XMLGREGORIANCALENDAR_INVALID.format(type.getLocalPart())
954 + buf.toString());
955 }
956 }
957
958 /**
959 * Format string for the {@link XMLGregorianCalendar}.
960 */
961 private static final Map<QName,String> xmlGregorianCalendarFormatString = new HashMap<QName, String>();
962
963 static {
964 Map<QName,String> m = xmlGregorianCalendarFormatString;
965 // See 4971612: be careful for SCCS substitution
966 m.put(DatatypeConstants.DATETIME, "%Y-%M-%DT%h:%m:%s"+ "%z");
967 m.put(DatatypeConstants.DATE, "%Y-%M-%D" +"%z");
968 m.put(DatatypeConstants.TIME, "%h:%m:%s"+ "%z");
969 if (System.getProperty(USE_OLD_GMONTH_MAPPING) == null) {
970 m.put(DatatypeConstants.GMONTH, "--%M%z"); // E2-12 Error. http://www.w3.org/2001/05/xmlschema-errata#e2-12
971 } else { // backw. compatibility
972 if (logger.isLoggable(Level.FINE)) {
973 logger.log(Level.FINE, "Old GMonth mapping used.");
974 }
975 m.put(DatatypeConstants.GMONTH, "--%M--%z");
976 }
977 m.put(DatatypeConstants.GDAY, "---%D" + "%z");
978 m.put(DatatypeConstants.GYEAR, "%Y" + "%z");
979 m.put(DatatypeConstants.GYEARMONTH, "%Y-%M" + "%z");
980 m.put(DatatypeConstants.GMONTHDAY, "--%M-%D" +"%z");
981 }
982
983 /**
984 * Field designations for XMLGregorianCalendar format string.
985 * sec 0x0000001
986 * min 0x0000010
987 * hrs 0x0000100
988 * day 0x0001000
989 * month 0x0010000
990 * year 0x0100000
991 * timezone 0x1000000
992 */
993 private static final Map<QName, Integer> xmlGregorianCalendarFieldRef =
994 new HashMap<QName, Integer>();
995 static {
996 Map<QName, Integer> f = xmlGregorianCalendarFieldRef;
|