import com.sun.xml.internal.bind.v2.util.TypeCast; //导入依赖的package包/类
/**
* The API will invoke this method via reflection
*/
public static JAXBContext createContext( Class[] classes, Map<String,Object> properties ) throws JAXBException {
// fool-proof check, and copy the map to make it easier to find unrecognized properties.
if(properties==null)
properties = Collections.emptyMap();
else
properties = new HashMap<String,Object>(properties);
String defaultNsUri = getPropertyValue(properties,JAXBRIContext.DEFAULT_NAMESPACE_REMAP,String.class);
Boolean c14nSupport = getPropertyValue(properties,JAXBRIContext.CANONICALIZATION_SUPPORT,Boolean.class);
if(c14nSupport==null)
c14nSupport = false;
Boolean allNillable = getPropertyValue(properties,JAXBRIContext.TREAT_EVERYTHING_NILLABLE,Boolean.class);
if(allNillable==null)
allNillable = false;
Boolean retainPropertyInfo = getPropertyValue(properties, JAXBRIContext.RETAIN_REFERENCE_TO_INFO, Boolean.class);
if(retainPropertyInfo==null)
retainPropertyInfo = false;
Boolean supressAccessorWarnings = getPropertyValue(properties, JAXBRIContext.SUPRESS_ACCESSOR_WARNINGS, Boolean.class);
if(supressAccessorWarnings==null)
supressAccessorWarnings = false;
Boolean improvedXsiTypeHandling = getPropertyValue(properties, JAXBRIContext.IMPROVED_XSI_TYPE_HANDLING, Boolean.class);
if(improvedXsiTypeHandling == null)
improvedXsiTypeHandling = true;
Boolean xmlAccessorFactorySupport = getPropertyValue(properties,
JAXBRIContext.XMLACCESSORFACTORY_SUPPORT,Boolean.class);
if(xmlAccessorFactorySupport==null){
xmlAccessorFactorySupport = false;
Util.getClassLogger().log(Level.FINE, "Property " +
JAXBRIContext.XMLACCESSORFACTORY_SUPPORT +
"is not active. Using JAXB's implementation");
}
RuntimeAnnotationReader ar = getPropertyValue(properties,JAXBRIContext.ANNOTATION_READER,RuntimeAnnotationReader.class);
Map<Class,Class> subclassReplacements;
try {
subclassReplacements = TypeCast.checkedCast(
getPropertyValue(properties, JAXBRIContext.SUBCLASS_REPLACEMENTS, Map.class), Class.class, Class.class);
} catch (ClassCastException e) {
throw new JAXBException(Messages.INVALID_TYPE_IN_MAP.format(),e);
}
if(!properties.isEmpty()) {
throw new JAXBException(Messages.UNSUPPORTED_PROPERTY.format(properties.keySet().iterator().next()));
}
JAXBContextImpl.JAXBContextBuilder builder = new JAXBContextImpl.JAXBContextBuilder();
builder.setClasses(classes);
builder.setTypeRefs(Collections.<TypeReference>emptyList());
builder.setSubclassReplacements(subclassReplacements);
builder.setDefaultNsUri(defaultNsUri);
builder.setC14NSupport(c14nSupport);
builder.setAnnotationReader(ar);
builder.setXmlAccessorFactorySupport(xmlAccessorFactorySupport);
builder.setAllNillable(allNillable);
builder.setRetainPropertyInfo(retainPropertyInfo);
builder.setSupressAccessorWarnings(supressAccessorWarnings);
builder.setImprovedXsiTypeHandling(improvedXsiTypeHandling);
return builder.build();
}
请发表评论