codegenerationutility.java
来自「开源的axis2框架的源码。用于开发WEBSERVER」· Java 代码 · 共 697 行 · 第 1/2 页
JAVA
697 行
if (org.apache.axis2.namespace.Constants.XMIME_CONTENT_TYPE_QNAME
.equals(properties[j].getName())) {
//add this only if it is a document type ??
if (outerType.isDocumentType()) {
base64ElementQNamesList.add(outerType.getDocumentElementName());
}
break;
}
}
}
}
//add any of the child types if there are any
allSeenTypes.addAll(Arrays.asList(sType.getAnonymousTypes()));
}
return base64ElementQNamesList;
}
/**
* @param sts
* @return array list
*/
private static List findPlainBase64Types(SchemaTypeSystem sts) {
ArrayList allSeenTypes = new ArrayList();
allSeenTypes.addAll(Arrays.asList(sts.documentTypes()));
allSeenTypes.addAll(Arrays.asList(sts.globalTypes()));
ArrayList base64Types = new ArrayList();
for (Iterator iterator = allSeenTypes.iterator(); iterator.hasNext();) {
SchemaType stype = (SchemaType)iterator.next();
findPlainBase64Types(stype, base64Types, new ArrayList());
}
return base64Types;
}
/**
* @param stype
* @param base64Types
*/
private static void findPlainBase64Types(SchemaType stype,
ArrayList base64Types,
ArrayList processedTypes) {
SchemaProperty[] elementProperties = stype.getElementProperties();
QName name;
SchemaType schemaType;
for (int i = 0; i < elementProperties.length; i++) {
schemaType = elementProperties[i].getType();
name = elementProperties[i].getName();
if (!base64Types.contains(name) && !processedTypes.contains(schemaType.getName())) {
processedTypes.add(stype.getName());
if (schemaType.isPrimitiveType()) {
SchemaType primitiveType = schemaType.getPrimitiveType();
if (org.apache.axis2.namespace.Constants.BASE_64_CONTENT_QNAME
.equals(primitiveType.getName())) {
base64Types.add(name);
}
} else {
findPlainBase64Types(schemaType, base64Types, processedTypes);
}
}
}
}
/** Private class to generate the filer */
private static class Axis2Filer implements Filer {
private File location;
private boolean flatten = false;
private String resourceDirName;
private String srcDirName;
private static final String JAVA_FILE_EXTENSION = ".java";
private Axis2Filer(CodeGenConfiguration config) {
location = config.getOutputLocation();
flatten = config.isFlattenFiles();
resourceDirName = config.getResourceLocation();
srcDirName = config.getSourceLocation();
}
public OutputStream createBinaryFile(String typename)
throws IOException {
File resourcesDirectory =
flatten ?
location :
new File(location, resourceDirName);
if (!resourcesDirectory.exists()) {
resourcesDirectory.mkdirs();
}
File file = new File(resourcesDirectory, typename);
file.getParentFile().mkdirs();
file.createNewFile();
return new FileOutputStream(file);
}
public Writer createSourceFile(String typename)
throws IOException {
typename =
typename.replace('.', File.separatorChar);
File outputDir =
flatten ?
location :
new File(location, srcDirName);
if (!outputDir.exists()) {
outputDir.mkdirs();
}
File file = new File(outputDir,
typename + JAVA_FILE_EXTENSION);
file.getParentFile().mkdirs();
file.createNewFile();
return new FileWriter(file);
}
}
/**
* Convert schema into a String
*
* @param schema
*/
private static String getSchemaAsString(XmlSchema schema) throws IOException {
StringWriter writer = new StringWriter();
schema.write(writer);
return writer.toString();
}
/**
* Custom binding configuration for the code generator. This controls how the namespaces are
* suffixed/prefixed
*/
private static class Axis2BindingConfig extends BindingConfig {
private Map uri2packageMappings = null;
private XSDConfig xsdConfig = null;
public Axis2BindingConfig(Map uri2packageMappings, String xsdConfigfile) {
this.uri2packageMappings = uri2packageMappings;
if (this.uri2packageMappings == null) {
//make an empty one to avoid nasty surprises
this.uri2packageMappings = new HashMap();
}
// Do we have an xsdconfig file?
if (xsdConfigfile != null) {
xsdConfig = new XSDConfig(xsdConfigfile);
}
}
public String lookupPackageForNamespace(String uri) {
/* If the xsdconfig file has mappings, we'll use them instead of the -p option.
* If we have an xsdconfig file but no namespace to package mappings, then we'll
* defer to the -p option.
*/
if (xsdConfig != null) {
if (xsdConfig.hasNamespaceToJavaPackageMappings) {
log.debug("RETURNING " + uri + " = " +
xsdConfig.getNamespacesToJavaPackages().get(uri));
return (String)xsdConfig.getNamespacesToJavaPackages().get(uri);
}
}
if (uri2packageMappings.containsKey(uri)) {
return (String)uri2packageMappings.get(uri);
} else {
return URLProcessor.makePackageName(uri);
}
}
public String lookupJavanameForQName(QName qname) {
/* The mappings are stored in the format:
* NAMESPACE:LOCAL_NAME, i.e.
* urn:weegietech:minerva:moduleType
*/
if (xsdConfig != null) {
String key = qname.getNamespaceURI() + ":" + qname.getLocalPart();
if (xsdConfig.getSchemaTypesToJavaNames().containsKey(key)) {
log.debug("RETURNING " + qname.getLocalPart() + " = " +
xsdConfig.getSchemaTypesToJavaNames().get(key));
return (String)xsdConfig.getSchemaTypesToJavaNames().get(key);
} else {
return null;
}
} else {
return super.lookupJavanameForQName(qname);
}
}
}
/**
* Converts a given vector of schemaDocuments to XmlBeans processable schema objects. One
* drawback we have here is the non-inclusion of untargeted namespaces
*
* @param vec
* @return schema array
*/
private static SchemaDocument.Schema[] convertToSchemaArray(List vec) {
SchemaDocument[] schemaDocuments =
(SchemaDocument[])vec.toArray(new SchemaDocument[vec.size()]);
//remove duplicates
Vector uniqueSchemas = new Vector(schemaDocuments.length);
Vector uniqueSchemaTns = new Vector(schemaDocuments.length);
SchemaDocument.Schema s;
for (int i = 0; i < schemaDocuments.length; i++) {
s = schemaDocuments[i].getSchema();
if (!uniqueSchemaTns.contains(s.getTargetNamespace())) {
uniqueSchemas.add(s);
uniqueSchemaTns.add(s.getTargetNamespace());
} else if (s.getTargetNamespace() == null) {
uniqueSchemas.add(s);
}
}
return (SchemaDocument.Schema[])
uniqueSchemas.toArray(
new SchemaDocument.Schema[uniqueSchemas.size()]);
}
/** Axis2 specific entity resolver */
private static class Axis2EntityResolver implements EntityResolver {
private XmlSchema[] schemas;
private String baseUri;
/**
* @param publicId - this is the target namespace
* @param systemId - this is the location (value of schemaLocation)
* @return
* @see EntityResolver#resolveEntity(String, String)
*/
public InputSource resolveEntity(String publicId, String systemId)
throws SAXException, IOException {
if (systemId.startsWith("project://local/")) {
systemId = systemId.substring("project://local/".length());
}
StringTokenizer pathElements = new StringTokenizer(systemId, "/");
Stack pathElementStack = new Stack();
while (pathElements.hasMoreTokens()) {
String pathElement = pathElements.nextToken();
if (".".equals(pathElement)) {
} else if ("..".equals(pathElement)) {
if (!pathElementStack.isEmpty())
pathElementStack.pop();
} else {
pathElementStack.push(pathElement);
}
}
StringBuffer pathBuilder = new StringBuffer();
for (Iterator iter = pathElementStack.iterator(); iter.hasNext();) {
pathBuilder.append(File.separator + iter.next());
}
systemId = pathBuilder.toString().substring(1);
log.info("Resolving schema with publicId [" + publicId + "] and systemId [" + systemId +
"]");
try {
for (int i = 0; i < schemas.length; i++) {
XmlSchema schema = schemas[i];
if (schema.getSourceURI() != null &&
schema.getSourceURI().endsWith(systemId.replaceAll("\\\\", "/"))) {
String path = schema.getSourceURI();
File f = getFileFromURI(path);
if(f.exists()){
InputSource source = new InputSource();
source.setSystemId(schema.getSourceURI());
return source;
} else {
return new InputSource(getSchemaAsInputStream(schemas[i]));
}
}
}
for (int i = 0; i < schemas.length; i++) {
XmlSchema schema = schemas[i];
if (schema.getTargetNamespace() != null &&
schema.getTargetNamespace().equals(publicId)) {
return new InputSource(getSchemaAsInputStream(schemas[i]));
}
}
if (systemId.indexOf(':') == -1) {
//if the base URI is missing then attache the file:/// to it
//if the systemId actually had a scheme then as per the URL
//constructor, the context URL scheme should be ignored
baseUri = (baseUri == null) ? "file:///" : baseUri;
URL url = new URL(baseUri + systemId);
InputSource source = new InputSource();
source.setSystemId(url.toString());
return source;
}
return XMLUtils.getEmptyInputSource();
} catch (Exception e) {
throw new SAXException(e);
}
}
private File getFileFromURI(String path) {
if(path.startsWith("file:///")){
path = path.substring(8);
} else if(path.startsWith("file://")){
path = path.substring(7);
} else if(path.startsWith("file:/")){
path = path.substring(6);
}
return new File(path);
}
public XmlSchema[] getSchemas() {
return schemas;
}
public void setSchemas(XmlSchema[] schemas) {
this.schemas = schemas;
}
public String getBaseUri() {
return baseUri;
}
public void setBaseUri(String baseUri) {
this.baseUri = baseUri;
}
/**
* Convert schema into a InputStream
*
* @param schema
*/
private InputStream getSchemaAsInputStream(XmlSchema schema){
ByteArrayOutputStream baos = new ByteArrayOutputStream();
schema.write(baos);
return new ByteArrayInputStream(baos.toByteArray());
}
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?