javabeanwriter.java
来自「开源的axis2框架的源码。用于开发WEBSERVER」· Java 代码 · 共 1,368 行 · 第 1/4 页
JAVA
1,368 行
else if (writeClasses)
packagePrefix = packageName;
if (packagePrefix != null)
fullyqualifiedClassName = packagePrefix
+ (packagePrefix.endsWith(".") ? "" : ".") + className;
else
fullyqualifiedClassName = className;
// return the fully qualified class name
return fullyqualifiedClassName;
}
private String getPackage(String namespaceURI) {
String basePackageName;
if ((ns2packageNameMap != null) && ns2packageNameMap.containsKey(namespaceURI)) {
basePackageName = (String) ns2packageNameMap.get(namespaceURI);
} else {
basePackageName = URLProcessor.makePackageName(namespaceURI);
}
return this.packageName == null ? basePackageName
: this.packageName + basePackageName;
}
/**
* A util method that holds common code for the complete schema that the
* generated XML complies to look under other/beanGenerationSchema.xsd
*
* @param qName
* @param metainf
* @param typeMap
* @param isElement
* @param fullyQualifiedClassName the name returned by makeFullyQualifiedClassName() or null if
* it wasn't called
* @return Returns String.
* @throws Exception
*/
private String process(QName qName,
BeanWriterMetaInfoHolder metainf,
Map typeMap,
boolean isElement,
boolean isAbstract)
throws Exception {
String fullyQualifiedClassName = metainf.getOwnClassName();
if (fullyQualifiedClassName == null)
fullyQualifiedClassName = makeFullyQualifiedClassName(qName);
String className = fullyQualifiedClassName
.substring(1 + fullyQualifiedClassName.lastIndexOf('.'));
String basePackageName;
if (fullyQualifiedClassName.lastIndexOf('.') == -1) {// no 'dots' so
// the package
// is not there
basePackageName = "";
} else {
basePackageName = fullyQualifiedClassName.substring(0,
fullyQualifiedClassName.lastIndexOf('.'));
}
String originalName = qName == null ? "" : qName.getLocalPart();
ArrayList propertyNames = new ArrayList();
if (!templateLoaded) {
loadTemplate();
}
// if wrapped then do not write the classes now but add the models to a
// global document. However in order to write the
// global class that is generated, one needs to call the writeBatch()
// method
if (wrapClasses) {
globalWrappedDocument.getDocumentElement().appendChild(
getBeanElement(globalWrappedDocument, className,
originalName, basePackageName, qName, isElement,isAbstract,
metainf, propertyNames, typeMap));
} else {
// create the model
Document model = XSLTUtils.getDocument();
// make the XML
model.appendChild(getBeanElement(model, className, originalName,
basePackageName, qName, isElement,isAbstract, metainf, propertyNames,
typeMap));
if (writeClasses) {
// create the file
File out = createOutFile(basePackageName, className);
// parse with the template and create the files
if (isHelperMode) {
XSLTUtils.addAttribute(model, "helperMode", "yes", model.getDocumentElement());
// Generate bean classes
parse(model, out);
// Generating the helper classes
out = createOutFile(basePackageName, className + "Helper");
XSLTUtils.addAttribute(model, "helper", "yes", model
.getDocumentElement());
parse(model, out);
} else {
//No helper mode - just generate the classes
parse(model, out);
}
}
// add the model to the model map
modelMap.put(new QName(qName.getNamespaceURI(), className), model);
}
// return the fully qualified class name
return fullyQualifiedClassName;
}
/**
* @param model
* @param className
* @param originalName
* @param packageName
* @param qName
* @param isElement
* @param metainf
* @param propertyNames
* @param typeMap
* @return Returns Element.
* @throws SchemaCompilationException
*/
private Element getBeanElement(Document model,
String className,
String originalName,
String packageName,
QName qName,
boolean isElement,
boolean isAbstract,
BeanWriterMetaInfoHolder metainf,
ArrayList propertyNames,
Map typeMap)
throws SchemaCompilationException {
Element rootElt = XSLTUtils.getElement(model, "bean");
XSLTUtils.addAttribute(model, "name", className, rootElt);
XSLTUtils.addAttribute(model, "originalName", originalName, rootElt);
XSLTUtils.addAttribute(model, "package", packageName, rootElt);
XSLTUtils.addAttribute(model, "nsuri", qName.getNamespaceURI(), rootElt);
XSLTUtils.addAttribute(model, "nsprefix", isSuppressPrefixesMode ? "" : getPrefixForURI(qName
.getNamespaceURI(), qName.getPrefix()), rootElt);
if (!wrapClasses) {
XSLTUtils.addAttribute(model, "unwrapped", "yes", rootElt);
}
if (isAbstract){
XSLTUtils.addAttribute(model, "isAbstract", "yes", rootElt);
}
if (!writeClasses) {
XSLTUtils.addAttribute(model, "skip-write", "yes", rootElt);
}
if (!isElement) {
XSLTUtils.addAttribute(model, "type", "yes", rootElt);
}
if (metainf.isAnonymous()) {
XSLTUtils.addAttribute(model, "anon", "yes", rootElt);
}
if (metainf.isExtension()) {
XSLTUtils.addAttribute(model, "extension", metainf
.getExtensionClassName(), rootElt);
}
if (metainf.isRestriction()) {
XSLTUtils.addAttribute(model, "restriction", metainf
.getRestrictionClassName(), rootElt);
}
//add the mapper class name
XSLTUtils.addAttribute(model, "mapperClass", getFullyQualifiedMapperClassName(), rootElt);
if (metainf.isChoice()) {
XSLTUtils.addAttribute(model, "choice", "yes", rootElt);
}
if (metainf.isSimple()) {
XSLTUtils.addAttribute(model, "simple", "yes", rootElt);
}
if (metainf.isUnion()) {
XSLTUtils.addAttribute(model, "union", "yes", rootElt);
}
if (metainf.isList()) {
XSLTUtils.addAttribute(model, "list", "yes", rootElt);
}
if (metainf.isOrdered()) {
XSLTUtils.addAttribute(model, "ordered", "yes", rootElt);
}
if (isElement && metainf.isNillable(qName)) {
XSLTUtils.addAttribute(model, "nillable", "yes", rootElt);
}
if (metainf.isParticleClass()) {
XSLTUtils.addAttribute(model, "particleClass", "yes", rootElt);
}
if (metainf.isHasParticleType()){
XSLTUtils.addAttribute(model, "hasParticleType", "yes", rootElt);
}
// populate all the information
populateInfo(metainf, model, rootElt, propertyNames, typeMap, false);
if (metainf.isSimple() && metainf.isUnion()) {
populateMemberInfo(metainf, model, rootElt, typeMap);
}
if (metainf.isSimple() && metainf.isList()) {
populateListInfo(metainf, model, rootElt, typeMap);
}
//////////////////////////////////////////////////////////
// System.out.println(DOM2Writer.nodeToString(rootElt));
////////////////////////////////////////////////////////////
return rootElt;
}
protected void populateListInfo(BeanWriterMetaInfoHolder metainf,
Document model,
Element rootElement,
Map typeMap) {
String javaName = makeUniqueJavaClassName(new ArrayList(), metainf.getItemTypeQName().getLocalPart());
Element itemType = XSLTUtils.addChildElement(model, "itemtype", rootElement);
XSLTUtils.addAttribute(model, "type", metainf.getItemTypeClassName(), itemType);
XSLTUtils.addAttribute(model, "nsuri", metainf.getItemTypeQName().getNamespaceURI(), itemType);
XSLTUtils.addAttribute(model, "originalName", metainf.getItemTypeQName().getLocalPart(), itemType);
XSLTUtils.addAttribute(model, "javaname", javaName, itemType);
if (typeMap.containsKey(metainf.getItemTypeQName())) {
XSLTUtils.addAttribute(model, "ours", "true", itemType);
}
if (PrimitiveTypeFinder.isPrimitive(metainf.getItemTypeClassName())) {
XSLTUtils.addAttribute(model, "primitive", "yes", itemType);
}
String shortTypeName = getShortTypeName(metainf.getItemTypeClassName());
XSLTUtils.addAttribute(model, "shorttypename", shortTypeName, itemType);
}
protected void populateMemberInfo(BeanWriterMetaInfoHolder metainf,
Document model,
Element rootElement,
Map typeMap) {
Map memberTypes = metainf.getMemberTypes();
QName memberQName;
for (Iterator iter = memberTypes.keySet().iterator(); iter.hasNext();) {
memberQName = (QName) iter.next();
String memberClass = (String) memberTypes.get(memberQName);
if (PrimitiveTypeFinder.isPrimitive(memberClass)) {
memberClass = PrimitiveTypeWrapper.getWrapper(memberClass);
}
// add member type element
Element memberType = XSLTUtils.addChildElement(model, "memberType", rootElement);
XSLTUtils.addAttribute(model, "type", memberClass, memberType);
XSLTUtils.addAttribute(model, "nsuri", memberQName.getNamespaceURI(), memberType);
XSLTUtils.addAttribute(model, "originalName", memberQName.getLocalPart(), memberType);
if (typeMap.containsKey(memberQName)) {
XSLTUtils.addAttribute(model, "ours", "true", memberType);
}
String shortTypeName = getShortTypeName(memberClass);
XSLTUtils.addAttribute(model, "shorttypename", shortTypeName, memberType);
}
}
/**
* @param metainf
* @param model
* @param rootElt
* @param propertyNames
* @param typeMap
* @throws SchemaCompilationException
*/
private void populateInfo(BeanWriterMetaInfoHolder metainf, Document model,
Element rootElt, ArrayList propertyNames, Map typeMap,
boolean isInherited) throws SchemaCompilationException {
// we should add parent class details only if it is
// an extension or simple restriction
// should not in complex restrictions
if (metainf.getParent() != null && (!metainf.isRestriction() || (metainf.isRestriction() && metainf.isSimple())))
{
populateInfo(metainf.getParent(), model, rootElt, propertyNames,
typeMap, true);
}
addPropertyEntries(metainf, model, rootElt, propertyNames, typeMap,
isInherited);
}
/**
* @param metainf
* @param model
* @param rootElt
* @param propertyNames
* @param typeMap
* @throws SchemaCompilationException
*/
private void addPropertyEntries(BeanWriterMetaInfoHolder metainf,
Document model, Element rootElt, ArrayList propertyNames,
Map typeMap, boolean isInherited) throws SchemaCompilationException {
// go in the loop and add the part elements
QName[] qName;
String javaClassNameForElement;
ArrayList missingQNames = new ArrayList();
ArrayList qNames = new ArrayList();
BeanWriterMetaInfoHolder parentMetaInf = metainf.getParent();
if (metainf.isOrdered()) {
qName = metainf.getOrderedQNameArray();
} else {
qName = metainf.getQNameArray();
}
for (int i = 0; i < qName.length; i++) {
qNames.add(qName[i]);
}
//adding missing QNames to the end, including elements & attributes.
// for the simple types we have already add the parent elements
// it is almost consider as an extension
if (metainf.isRestriction() && !metainf.isSimple()) {
addMissingQNames(metainf, qNames, missingQNames);
}
QName name;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?