You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@beehive.apache.org by Julie Zhuo <jz...@bea.com> on 2005/02/11 22:10:02 UTC

RE: svn commit: r153454 - in incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/wsdl: ./ Schema.java Utilities.java WSDLParser.java

Thanks Michael for fixing this. It is all working like charm now. :)

Julie

-----Original Message-----
From: mmerz@apache.org [mailto:mmerz@apache.org] 
Sent: Friday, February 11, 2005 1:17 PM
To: beehive-cvs@incubator.apache.org
Subject: svn commit: r153454 - in
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/wsdl: ./
Schema.java Utilities.java WSDLParser.java

Author: mmerz
Date: Fri Feb 11 12:17:15 2005
New Revision: 153454

URL: http://svn.apache.org/viewcvs?view=rev&rev=153454
Log:
added new classes to deal with WSDL

Contributor: Daryoush Mehrtash

Added:
    incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/wsdl/
 
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/wsdl/Sche
ma.java
 
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/wsdl/Util
ities.java
 
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/wsdl/WSDL
Parser.java

Added:
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/wsdl/Sche
ma.java
URL:
http://svn.apache.org/viewcvs/incubator/beehive/trunk/wsm/src/runtime/or
g/apache/beehive/wsm/wsdl/Schema.java?view=auto&rev=153454
========================================================================
======
---
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/wsdl/Sche
ma.java (added)
+++
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/wsdl/Sche
ma.java Fri Feb 11 12:17:15 2005
@@ -0,0 +1,102 @@
+/*
+ * 
+ * Copyright 2001-2004 The Apache Software Foundation.
+ * 
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * 
+ * 
+ */
+package org.apache.beehive.wsm.wsdl;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import javax.xml.namespace.QName;
+
+import org.apache.xmlbeans.XmlException;
+import org.apache.xmlbeans.XmlObject;
+import org.w3.x2001.xmlSchema.SchemaDocument;
+import org.w3.x2001.xmlSchema.TopLevelComplexType;
+import org.w3.x2001.xmlSchema.TopLevelElement;
+import org.w3.x2001.xmlSchema.TopLevelSimpleType;
+import org.xmlsoap.schemas.wsdl.TTypes;
+
+
+public class Schema {
+    SchemaDocument.Schema[] schemas;
+
+    /**
+     * @param tt
+     * @throws NoSuchFieldException
+     * @throws IllegalAccessException
+     */
+    public Schema(TTypes tt) throws IllegalAccessException,
NoSuchFieldException {
+        
+        schemas = Utilities.selectChildren(tt,
SchemaDocument.Schema.class);
+    }
+    
+    /**
+     * @param stream
+     * @throws IOException
+     * @throws XmlException
+     */
+    public Schema(InputStream stream) throws XmlException, IOException
{
+        SchemaDocument schemaDoc =
SchemaDocument.Factory.parse(stream);
+        schemas = new SchemaDocument.Schema[1];
+        schemas[0] = schemaDoc.getSchema();
+       }
+
+    public XmlObject getTypeNode(QName q) {
+        // first find the schema with matching namespace
+        SchemaDocument.Schema schema = null;
+        for (SchemaDocument.Schema nxtSchema : schemas) {
+            if (nxtSchema.getTargetNamespace() != null
+                    && nxtSchema.getTargetNamespace().equals(
+                            q.getNamespaceURI())) {
+                schema = nxtSchema;
+                break;
+            }
+        }
+        if (null == schema)
+            return null; // namespace is not found in this schema.
+
+        
+        // look in complex types
+        TopLevelComplexType[] tlComplexTypes =
schema.getComplexTypeArray();
+        for( TopLevelComplexType nxtComplexType : tlComplexTypes) {
+            if( nxtComplexType.getName().equals(q.getLocalPart())) {
+                return nxtComplexType;
+            }
+        }
+
+        // look in simple types
+        TopLevelSimpleType[] tlSimpleTypes =
schema.getSimpleTypeArray();
+        for( TopLevelSimpleType nxtSimpleType : tlSimpleTypes) {
+            if( nxtSimpleType.getName().equals(q.getLocalPart())) {
+                return nxtSimpleType;
+            }
+        }
+        
+        // look in element types
+        TopLevelElement[] tlElementTypes = schema.getElementArray();
+        for( TopLevelElement nxtElement : tlElementTypes) {
+            if( nxtElement.getName().equals(q.getLocalPart())) {
+                return nxtElement;
+            }
+        }
+         
+        return null;  // it is not in comlex or simple types!
+    }
+
+}

Added:
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/wsdl/Util
ities.java
URL:
http://svn.apache.org/viewcvs/incubator/beehive/trunk/wsm/src/runtime/or
g/apache/beehive/wsm/wsdl/Utilities.java?view=auto&rev=153454
========================================================================
======
---
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/wsdl/Util
ities.java (added)
+++
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/wsdl/Util
ities.java Fri Feb 11 12:17:15 2005
@@ -0,0 +1,82 @@
+/*
+ * 
+ * Copyright 2001-2004 The Apache Software Foundation.
+ * 
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * 
+ * 
+ */
+package org.apache.beehive.wsm.wsdl;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.lang.reflect.Array;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.xmlbeans.SchemaType;
+import org.apache.xmlbeans.XmlException;
+import org.apache.xmlbeans.XmlObject;
+
+public class Utilities {
+
+    public static <T extends XmlObject> T[] selectChildren(XmlObject
parent,
+            Class<T> childClass) throws IllegalAccessException,
+            NoSuchFieldException {
+        // retrieve the SchemaType from the static type field
+        SchemaType st = (SchemaType)
childClass.getField("type").get(null);
+        XmlObject[] kids =
parent.selectChildren(st.getDocumentElementName());
+        T[] castKids = (T[]) Array.newInstance(childClass,
kids.length);
+        for (int j = 0; j < castKids.length; j++) {
+            castKids[j] = childClass.cast(kids[j]);
+        }
+        return castKids;
+    }
+
+    /**
+     * @param docType
+     * @return
+     * @throws XmlException
+     * @throws IOException
+     * @throws IllegalAccessException
+     * @throws NoSuchFieldException
+     */
+
+    // Keep a cache of schemas that have been read.
+    static Map<String, Schema> schemaCache = new HashMap<String,
Schema>();
+    public static Schema findtSchemaDocument(SchemaType docType)
+            throws XmlException, IOException, IllegalAccessException,
+            NoSuchFieldException {
+        Schema mySchema = null;
+        if (null != (mySchema = schemaCache.get(docType.getName()
+                .getNamespaceURI()))) {
+            return mySchema;
+        }
+        String schemaSrc = docType.getSourceName();
+        InputStream stream = docType.getTypeSystem().getSourceAsStream(
+                schemaSrc);
+
+        if (null == stream) {
+            throw new RuntimeException("WSDL file not found: " +
schemaSrc);
+        }
+        if (schemaSrc.endsWith(".wsdl") || schemaSrc.endsWith(".WSDL"))
{
+            mySchema = new WSDLParser(stream).getSchema();
+        } else {
+            mySchema = new Schema(stream);
+        }
+        schemaCache.put(docType.getName().getNamespaceURI(), mySchema);
+        return mySchema;
+    }
+
+}

Added:
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/wsdl/WSDL
Parser.java
URL:
http://svn.apache.org/viewcvs/incubator/beehive/trunk/wsm/src/runtime/or
g/apache/beehive/wsm/wsdl/WSDLParser.java?view=auto&rev=153454
========================================================================
======
---
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/wsdl/WSDL
Parser.java (added)
+++
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/wsdl/WSDL
Parser.java Fri Feb 11 12:17:15 2005
@@ -0,0 +1,70 @@
+/*
+ * 
+ * Copyright 2001-2004 The Apache Software Foundation.
+ * 
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * 
+ * 
+ */
+package org.apache.beehive.wsm.wsdl;
+
+
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.lang.reflect.Array;
+
+import javax.xml.namespace.QName;
+
+import org.apache.xmlbeans.SchemaType;
+import org.apache.xmlbeans.XmlException;
+import org.apache.xmlbeans.XmlObject;
+import org.w3.x2001.xmlSchema.SchemaDocument;
+import org.w3.x2001.xmlSchema.TopLevelComplexType;
+import org.w3.x2001.xmlSchema.TopLevelElement;
+import org.w3.x2001.xmlSchema.TopLevelSimpleType;
+import org.xmlsoap.schemas.wsdl.DefinitionsDocument;
+import org.xmlsoap.schemas.wsdl.TTypes;
+
+public class WSDLParser {
+
+ 
+    InputStream stream;
+    DefinitionsDocument defDoc;
+    TTypes tt;
+    Schema schema;
+ 
+    /**
+     * @param stream
+     * @throws IOException
+     * @throws XmlException
+     * @throws NoSuchFieldException
+     * @throws IllegalAccessException
+     */
+    public WSDLParser(InputStream stream) throws XmlException,
IOException, IllegalAccessException, NoSuchFieldException {
+        super();
+        this.stream = stream;
+
+        defDoc = DefinitionsDocument.Factory.parse(stream);
+        tt = defDoc.getDefinitions().getTypesArray(0);
+        schema = new Schema(tt);
+    }
+    /**
+     * @return Returns the schema.
+     */
+    public Schema getSchema() {
+        return schema;
+    }
+
+}