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