You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by rf...@apache.org on 2007/07/25 23:54:22 UTC

svn commit: r559627 - in /incubator/tuscany/java/sca/modules/interface-wsdl-xml/src: main/java/org/apache/tuscany/sca/interfacedef/wsdl/xml/XMLDocumentHelper.java test/java/org/apache/tuscany/sca/interfacedef/wsdl/xml/XMLDocumentHelperTestCase.java

Author: rfeng
Date: Wed Jul 25 14:54:21 2007
New Revision: 559627

URL: http://svn.apache.org/viewvc?view=rev&rev=559627
Log:
Add readTargetNamespace() in XMLDocumentHelper and a test case

Added:
    incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/test/java/org/apache/tuscany/sca/interfacedef/wsdl/xml/XMLDocumentHelperTestCase.java   (with props)
Modified:
    incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/xml/XMLDocumentHelper.java

Modified: incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/xml/XMLDocumentHelper.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/xml/XMLDocumentHelper.java?view=diff&rev=559627&r1=559626&r2=559627
==============================================================================
--- incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/xml/XMLDocumentHelper.java (original)
+++ incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/xml/XMLDocumentHelper.java Wed Jul 25 14:54:21 2007
@@ -25,6 +25,12 @@
 import java.io.UnsupportedEncodingException;
 import java.net.URL;
 
+import javax.xml.namespace.QName;
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLStreamConstants;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+
 import org.apache.ws.commons.schema.resolver.URIResolver;
 import org.xml.sax.InputSource;
 
@@ -32,8 +38,11 @@
  * @version $Rev$ $Date$
  */
 public class XMLDocumentHelper {
+    public static final QName WSDL11 = new QName("http://schemas.xmlsoap.org/wsdl/", "definitions");
+    public static final QName XSD = new QName("http://www.w3.org/2001/XMLSchema", "schema");
+    public static final QName WSDL20 = new QName("http://www.w3.org/ns/wsdl", "description");
 
-   protected static final int BUFFER_SIZE = 256;
+    protected static final int BUFFER_SIZE = 256;
 
     /**
      * Detect the XML encoding of the WSDL document
@@ -45,7 +54,7 @@
     public static String getEncoding(InputStream is) throws IOException {
         if (!is.markSupported())
             is = new BufferedInputStream(is);
-    
+
         byte[] buffer = readBuffer(is);
         return getXMLEncoding(buffer);
     }
@@ -55,7 +64,7 @@
      */
     protected static String getXMLEncoding(byte[] bytes) {
         String javaEncoding = null;
-    
+
         if (bytes.length >= 4) {
             if (((bytes[0] == -2) && (bytes[1] == -1)) || ((bytes[0] == 0) && (bytes[1] == 60)))
                 javaEncoding = "UnicodeBig";
@@ -64,9 +73,9 @@
             else if ((bytes[0] == -17) && (bytes[1] == -69) && (bytes[2] == -65))
                 javaEncoding = "UTF8";
         }
-    
+
         String header = null;
-    
+
         try {
             if (javaEncoding != null)
                 header = new String(bytes, 0, bytes.length, javaEncoding);
@@ -75,25 +84,25 @@
         } catch (UnsupportedEncodingException e) {
             return null;
         }
-    
+
         if (!header.startsWith("<?xml"))
             return "UTF-8";
-    
+
         int endOfXMLPI = header.indexOf("?>");
         int encodingIndex = header.indexOf("encoding", 6);
-    
+
         if ((encodingIndex == -1) || (encodingIndex > endOfXMLPI))
             return "UTF-8";
-    
+
         int firstQuoteIndex = header.indexOf("\"", encodingIndex);
         int lastQuoteIndex;
-    
+
         if ((firstQuoteIndex == -1) || (firstQuoteIndex > endOfXMLPI)) {
             firstQuoteIndex = header.indexOf("'", encodingIndex);
             lastQuoteIndex = header.indexOf("'", firstQuoteIndex + 1);
         } else
             lastQuoteIndex = header.indexOf("\"", firstQuoteIndex + 1);
-    
+
         return header.substring(firstQuoteIndex + 1, lastQuoteIndex);
     }
 
@@ -101,25 +110,25 @@
         if (is.available() == 0) {
             return new byte[0];
         }
-    
+
         byte[] buffer = new byte[BUFFER_SIZE];
         is.mark(BUFFER_SIZE);
         int bytesRead = is.read(buffer, 0, BUFFER_SIZE);
         int totalBytesRead = bytesRead;
-    
+
         while (bytesRead != -1 && (totalBytesRead < BUFFER_SIZE)) {
             bytesRead = is.read(buffer, totalBytesRead, BUFFER_SIZE - totalBytesRead);
-    
+
             if (bytesRead != -1)
                 totalBytesRead += bytesRead;
         }
-    
+
         if (totalBytesRead < BUFFER_SIZE) {
             byte[] smallerBuffer = new byte[totalBytesRead];
             System.arraycopy(buffer, 0, smallerBuffer, 0, totalBytesRead);
             smallerBuffer = buffer;
         }
-    
+
         is.reset();
         return buffer;
     }
@@ -138,12 +147,39 @@
         inputSource.setSystemId(url.toString());
         return inputSource;
     }
-    
+
+    private final static XMLInputFactory inputFactory = XMLInputFactory.newInstance();
+
+    public static String readTargetNamespace(URL doc, QName element, String attribute) throws IOException,
+        XMLStreamException {
+        if (attribute == null) {
+            attribute = "targetNamespace";
+        }
+        InputStream is = doc.openStream();
+        try {
+            XMLStreamReader reader = inputFactory.createXMLStreamReader(is);
+            int eventType = reader.getEventType();
+            while (true) {
+                if (eventType == XMLStreamConstants.START_ELEMENT && element.equals(reader.getName())) {
+                    return reader.getAttributeValue(null, attribute);
+                }
+                if (reader.hasNext()) {
+                    eventType = reader.next();
+                } else {
+                    break;
+                }
+            }
+            return null;
+        } finally {
+            is.close();
+        }
+    }
+
     /**
      * URI resolver implementation for xml schema
      */
     public static class URIResolverImpl implements URIResolver {
-    
+
         public org.xml.sax.InputSource resolveEntity(java.lang.String targetNamespace,
                                                      java.lang.String schemaLocation,
                                                      java.lang.String baseUri) {
@@ -159,5 +195,4 @@
         }
     }
 
- 
 }

Added: incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/test/java/org/apache/tuscany/sca/interfacedef/wsdl/xml/XMLDocumentHelperTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/test/java/org/apache/tuscany/sca/interfacedef/wsdl/xml/XMLDocumentHelperTestCase.java?view=auto&rev=559627
==============================================================================
--- incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/test/java/org/apache/tuscany/sca/interfacedef/wsdl/xml/XMLDocumentHelperTestCase.java (added)
+++ incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/test/java/org/apache/tuscany/sca/interfacedef/wsdl/xml/XMLDocumentHelperTestCase.java Wed Jul 25 14:54:21 2007
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.tuscany.sca.interfacedef.wsdl.xml;
+
+import java.net.URL;
+
+import junit.framework.Assert;
+
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class XMLDocumentHelperTestCase {
+    private URL wsdl;
+    private URL xsd;
+
+    /**
+     * @throws java.lang.Exception
+     */
+    @Before
+    public void setUp() throws Exception {
+        wsdl = getClass().getResource("/wsdl/helloworld-interface.wsdl");
+        xsd = getClass().getResource("/xsd/greeting.xsd");
+    }
+
+    @Test
+    public void testReadTNS() throws Exception {
+        String tns = XMLDocumentHelper.readTargetNamespace(wsdl, XMLDocumentHelper.WSDL11, "targetNamespace");
+        Assert.assertEquals("http://helloworld", tns);
+        String tns2 = XMLDocumentHelper.readTargetNamespace(xsd, XMLDocumentHelper.XSD, null);
+        Assert.assertEquals("http://greeting", tns2);
+    }
+
+}

Propchange: incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/test/java/org/apache/tuscany/sca/interfacedef/wsdl/xml/XMLDocumentHelperTestCase.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/test/java/org/apache/tuscany/sca/interfacedef/wsdl/xml/XMLDocumentHelperTestCase.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date



---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org