You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by dj...@apache.org on 2005/07/20 01:00:13 UTC
svn commit: r219798 - in /geronimo/trunk/modules:
axis-builder/src/java/org/apache/geronimo/axis/builder/
j2ee-schema/src/java/org/apache/geronimo/schema/
Author: djencks
Date: Tue Jul 19 16:00:12 2005
New Revision: 219798
URL: http://svn.apache.org/viewcvs?rev=219798&view=rev
Log:
GERONIMO-779. Fix schema reading in ws deployment
Modified:
geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/builder/AxisServiceBuilder.java
geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/builder/HeavyweightTypeInfoBuilder.java
geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/builder/SchemaInfoBuilder.java
geronimo/trunk/modules/j2ee-schema/src/java/org/apache/geronimo/schema/SchemaConversionUtils.java
Modified: geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/builder/AxisServiceBuilder.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/builder/AxisServiceBuilder.java?rev=219798&r1=219797&r2=219798&view=diff
==============================================================================
--- geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/builder/AxisServiceBuilder.java (original)
+++ geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/builder/AxisServiceBuilder.java Tue Jul 19 16:00:12 2005
@@ -62,18 +62,21 @@
import org.apache.geronimo.xbeans.wsdl.TService;
import org.apache.geronimo.xbeans.wsdl.TTypes;
import org.apache.xmlbeans.XmlCursor;
+import org.apache.xmlbeans.XmlObject;
import org.apache.xmlbeans.impl.xb.xsdschema.SchemaDocument;
import org.apache.xmlbeans.impl.xb.xsdschema.ImportDocument;
import org.apache.xmlbeans.impl.xb.xsdschema.IncludeDocument;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
/**
* @version $Rev$ $Date$
*/
public class AxisServiceBuilder {
+ private static final Log log = LogFactory.getLog(AxisServiceBuilder.class);
+
public static final String XSD_NS = "http://www.w3.org/2001/XMLSchema";
public static final QName SCHEMA_QNAME = new QName(XSD_NS, "schema");
- private static final String SOAP_NS = "http://schemas.xmlsoap.org/wsdl/soap/";
-// private static final String LOCATION_REPLACEMENT_TOKEN = AxisWebServiceContainer.LOCATION_REPLACEMENT_TOKEN;
private static void validateLightweightMapping(Definition definition) throws DeploymentException {
@@ -238,57 +241,6 @@
rewriteSchema(schema, contextURI, key);
String schemaString = schemaDocument.toString();
wsdlMap.put(key.toString(), schemaString);
-// } else if (value instanceof Definition) {
-// Definition definition = (Definition) value;
-// Map imports = definition.getImports();
-// for (Iterator iterator2 = imports.values().iterator(); iterator2.hasNext();) {
-// List importList = (List) iterator2.next();
-// for (Iterator iterator3 = importList.iterator(); iterator3.hasNext();) {
-// Import anImport = (Import) iterator3.next();
-// String importLocation = anImport.getLocationURI();
-// if (!importLocation.startsWith("http://")) {
-// URI updated = buildQueryURI(contextURI, key, importLocation);
-// anImport.setLocationURI(updated.toString());
-// }
-// }
-// }
-// Types types = definition.getTypes();
-// Map namespaceMap = definition.getNamespaces();
-// if (null != types) {
-// List schemaList = types.getExtensibilityElements();
-// for (Iterator iterator1 = schemaList.iterator(); iterator1.hasNext();) {
-// Object o = iterator1.next();
-// if (o instanceof Schema) {
-// Schema schemaType = (Schema) o;
-// Element e = schemaType.getElement();
-// try {
-// SchemaDocument.Schema schema = (SchemaDocument.Schema) XmlObject.Factory.parse(e);
-// rewriteSchema(schema, contextURI, key);
-// Element e2 = (Element) schema.newDomNode();
-// schemaType.setElement(e2);
-// } catch (XmlException e1) {
-// throw new DeploymentException("Could not parse included schema", e1);
-// }
-// } else if (o instanceof UnknownExtensibilityElement) {
-// UnknownExtensibilityElement u = (UnknownExtensibilityElement) o;
-// QName elementType = u.getElementType();
-// if (SCHEMA_QNAME.equals(elementType)) {
-// Element e = u.getElement();
-// try {
-// SchemaDocument schemaDocument = (SchemaDocument) SchemaInfoBuilder.parseWithNamespaces(e, namespaceMap);
-// SchemaDocument.Schema schema = schemaDocument.getSchema();
-// rewriteSchema(schema, contextURI, key);
-// Node node = schema.newDomNode();
-// Element e2 = (Element) node.getFirstChild();
-// u.setElement(e2);
-// } catch (XmlException e1) {
-// throw new DeploymentException("Could not parse included schema", e1);
-// }
-// }
-// }
-// }
-// }
-// wsdlMap.put(key.toString(), definition);
} else if (value instanceof DefinitionsDocument) {
DefinitionsDocument doc = (DefinitionsDocument) ((DefinitionsDocument) value).copy();
TDefinitions definitions = doc.getDefinitions();
@@ -316,25 +268,6 @@
typeCursor.dispose();
}
}
- //now done in SchemaInfoBuilder
- //prepare for location substitution
-// TService[] services = definitions.getServiceArray();
-// for (int i = 0; i < services.length; i++) {
-// TService service = services[i];
-// TPort[] ports = service.getPortArray();
-// for (int j = 0; j < ports.length; j++) {
-// TPort port = ports[j];
-// XmlCursor portCursor = port.newCursor();
-// try {
-// if (portCursor.toChild(ADDRESS_QNAME)) {
-// //TODO rewrite the path from the actual deployed location, and just replace the schema/host/port
-// portCursor.setAttributeText(LOCATION_QNAME, LOCATION_REPLACEMENT_TOKEN);
-// }
-// } finally {
-// portCursor.dispose();
-// }
-// }
-// }
wsdlMap.put(key.toString(), doc.toString());
} else {
throw new DeploymentException("Unexpected element in wsdlMap at location: " + key + ", value: " + value);
Modified: geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/builder/HeavyweightTypeInfoBuilder.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/builder/HeavyweightTypeInfoBuilder.java?rev=219798&r1=219797&r2=219798&view=diff
==============================================================================
--- geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/builder/HeavyweightTypeInfoBuilder.java (original)
+++ geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/builder/HeavyweightTypeInfoBuilder.java Tue Jul 19 16:00:12 2005
@@ -129,7 +129,9 @@
SchemaType schemaType = (SchemaType) schemaTypeKeyToSchemaTypeMap.get(key);
if (schemaType == null) {
- throw new DeploymentException("Schema type key " + key + " not found in analyzed schema: " + schemaTypeKeyToSchemaTypeMap);
+// throw new DeploymentException("Schema type key " + key + " not found in analyzed schema: " + schemaTypeKeyToSchemaTypeMap);
+ log.warn("Schema type key " + key + " not found in analyzed schema: " + schemaTypeKeyToSchemaTypeMap);
+ continue;
}
mappedTypeQNames.add(key.getqName());
Modified: geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/builder/SchemaInfoBuilder.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/builder/SchemaInfoBuilder.java?rev=219798&r1=219797&r2=219798&view=diff
==============================================================================
--- geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/builder/SchemaInfoBuilder.java (original)
+++ geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/builder/SchemaInfoBuilder.java Tue Jul 19 16:00:12 2005
@@ -89,15 +89,15 @@
if (is == null) {
throw new RuntimeException("Could not locate soap encoding schema");
}
- Collection errors = new ArrayList();
- XmlOptions xmlOptions = new XmlOptions();
- xmlOptions.setErrorListener(errors);
+ ArrayList errors = new ArrayList();
+ XmlOptions xmlOptions = SchemaConversionUtils.createXmlOptions(errors);
try {
- XmlObject xmlObject = SchemaConversionUtils.parse(is);
- if (!(xmlObject instanceof SchemaDocument)) {
- xmlObject = xmlObject.changeType(SchemaDocument.type);
+ SchemaDocument parsed = SchemaDocument.Factory.parse(is, xmlOptions);
+ if (errors.size() != 0) {
+ throw new XmlException(errors.toArray().toString());
}
- basicTypeSystem = XmlBeans.compileXsd(new XmlObject[]{xmlObject}, XmlBeans.getBuiltinTypeSystem(), xmlOptions);
+
+ basicTypeSystem = XmlBeans.compileXsd(new XmlObject[]{parsed}, XmlBeans.getBuiltinTypeSystem(), xmlOptions);
if (errors.size() > 0) {
throw new RuntimeException("Could not compile schema type system: errors: " + errors);
}
@@ -282,7 +282,7 @@
}
return schemaTypeSystem;
} catch (XmlException e) {
- throw new DeploymentException("Could not compile schema type system", e);
+ throw new DeploymentException("Could not compile schema type system: " + schemaList, e);
}
}
@@ -354,8 +354,13 @@
}
static XmlObject parseWithNamespaces(Element element, Map namespaceMap) throws XmlException {
- XmlObject xmlObject = SchemaConversionUtils.parse(element);
- XmlCursor cursor = xmlObject.newCursor();
+ ArrayList errors = new ArrayList();
+ XmlOptions xmlOptions = SchemaConversionUtils.createXmlOptions(errors);
+ SchemaDocument parsed = SchemaDocument.Factory.parse(element, xmlOptions);
+ if (errors.size() != 0) {
+ throw new XmlException(errors.toArray().toString());
+ }
+ XmlCursor cursor = parsed.newCursor();
try {
cursor.toFirstContentToken();
for (Iterator namespaces = namespaceMap.entrySet().iterator(); namespaces.hasNext();) {
@@ -365,7 +370,7 @@
} finally {
cursor.dispose();
}
- return xmlObject;
+ return parsed;
}
/**
@@ -532,13 +537,23 @@
extensionRegistry.registerSerializer(Types.class, SchemaConstants.Q_ELEM_XSD_2001,
extensionRegistry.getDefaultSerializer());
wsdlReaderNoImport.setExtensionRegistry(extensionRegistry);
- JarWSDLLocator wsdlLocator = new JarWSDLLocator(wsdlURI, wsdlReaderNoImport);
+
+ JarWSDLLocator wsdlLocator = new JarWSDLLocator(wsdlURI);
WSDLReader wsdlReader = wsdlFactory.newWSDLReader();
+
+ Thread thread = Thread.currentThread();
+ ClassLoader oldCl = thread.getContextClassLoader();
+ thread.setContextClassLoader(this.getClass().getClassLoader());
try {
- definition = wsdlReader.readWSDL(wsdlLocator);
- } catch (WSDLException e) {
- throw new DeploymentException("Failed to read wsdl document", e);
+ try {
+ definition = wsdlReader.readWSDL(wsdlLocator);
+ } catch (WSDLException e) {
+ throw new DeploymentException("Failed to read wsdl document", e);
+ }
+ } finally {
+ thread.setContextClassLoader(oldCl);
}
+
return definition;
}
@@ -626,12 +641,10 @@
class JarWSDLLocator implements WSDLLocator {
private final URI wsdlURI;
-// private final WSDLReader wsdlReader;
private URI latestImportURI;
- public JarWSDLLocator(URI wsdlURI, WSDLReader wsdlReader) {
+ public JarWSDLLocator(URI wsdlURI) {
this.wsdlURI = wsdlURI;
-// this.wsdlReader = wsdlReader;
}
public InputSource getBaseInputSource() {
@@ -639,7 +652,6 @@
try {
ZipEntry entry = moduleFile.getEntry(wsdlURI.toString());
wsdlInputStream = moduleFile.getInputStream(entry);
-// Definition definition = wsdlReader.readWSDL(wsdlURI.toString(), new InputSource(wsdlInputStream));
DefinitionsDocument definition = DefinitionsDocument.Factory.parse(wsdlInputStream);
wsdlMap.put(wsdlURI, definition);
wsdlInputStream.close();
Modified: geronimo/trunk/modules/j2ee-schema/src/java/org/apache/geronimo/schema/SchemaConversionUtils.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/j2ee-schema/src/java/org/apache/geronimo/schema/SchemaConversionUtils.java?rev=219798&r1=219797&r2=219798&view=diff
==============================================================================
--- geronimo/trunk/modules/j2ee-schema/src/java/org/apache/geronimo/schema/SchemaConversionUtils.java (original)
+++ geronimo/trunk/modules/j2ee-schema/src/java/org/apache/geronimo/schema/SchemaConversionUtils.java Tue Jul 19 16:00:12 2005
@@ -90,7 +90,7 @@
return parsed;
}
- private static XmlOptions createXmlOptions(ArrayList errors) {
+ public static XmlOptions createXmlOptions(ArrayList errors) {
XmlOptions options = new XmlOptions();
options.setLoadLineNumbers();
options.setErrorListener(errors);