You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by dk...@apache.org on 2009/12/07 23:21:00 UTC
svn commit: r888159 - in /cxf/trunk:
common/common/src/main/java/org/apache/cxf/staxutils/StaxUtils.java
tools/wsdlto/databinding/jaxb/src/main/java/org/apache/cxf/tools/wsdlto/databinding/jaxb/JAXBDataBinding.java
Author: dkulp
Date: Mon Dec 7 22:20:55 2009
New Revision: 888159
URL: http://svn.apache.org/viewvc?rev=888159&view=rev
Log:
[CXF-2571] Set systemId on the dom things for xjc
Workaround bug in xjc not resolving jar: urls
Modified:
cxf/trunk/common/common/src/main/java/org/apache/cxf/staxutils/StaxUtils.java
cxf/trunk/tools/wsdlto/databinding/jaxb/src/main/java/org/apache/cxf/tools/wsdlto/databinding/jaxb/JAXBDataBinding.java
Modified: cxf/trunk/common/common/src/main/java/org/apache/cxf/staxutils/StaxUtils.java
URL: http://svn.apache.org/viewvc/cxf/trunk/common/common/src/main/java/org/apache/cxf/staxutils/StaxUtils.java?rev=888159&r1=888158&r2=888159&view=diff
==============================================================================
--- cxf/trunk/common/common/src/main/java/org/apache/cxf/staxutils/StaxUtils.java (original)
+++ cxf/trunk/common/common/src/main/java/org/apache/cxf/staxutils/StaxUtils.java Mon Dec 7 22:20:55 2009
@@ -1034,6 +1034,13 @@
public static XMLStreamReader createXMLStreamReader(Document doc) {
return new W3CDOMStreamReader(doc.getDocumentElement());
}
+ public static XMLStreamReader createXMLStreamReader(Element el, String sysId) {
+ return new W3CDOMStreamReader(el, sysId);
+ }
+ public static XMLStreamReader createXMLStreamReader(Document doc, String sysId) {
+ return new W3CDOMStreamReader(doc.getDocumentElement(), sysId);
+ }
+
public static XMLStreamReader createXMLStreamReader(Source source) {
try {
if (source instanceof DOMSource) {
Modified: cxf/trunk/tools/wsdlto/databinding/jaxb/src/main/java/org/apache/cxf/tools/wsdlto/databinding/jaxb/JAXBDataBinding.java
URL: http://svn.apache.org/viewvc/cxf/trunk/tools/wsdlto/databinding/jaxb/src/main/java/org/apache/cxf/tools/wsdlto/databinding/jaxb/JAXBDataBinding.java?rev=888159&r1=888158&r2=888159&view=diff
==============================================================================
--- cxf/trunk/tools/wsdlto/databinding/jaxb/src/main/java/org/apache/cxf/tools/wsdlto/databinding/jaxb/JAXBDataBinding.java (original)
+++ cxf/trunk/tools/wsdlto/databinding/jaxb/src/main/java/org/apache/cxf/tools/wsdlto/databinding/jaxb/JAXBDataBinding.java Mon Dec 7 22:20:55 2009
@@ -99,6 +99,7 @@
public class LocationFilterReader extends StreamReaderDelegate implements XMLStreamReader {
boolean isImport;
+ boolean isInclude;
int locIdx = -1;
LocationFilterReader(XMLStreamReader read) {
super(read);
@@ -108,6 +109,10 @@
int i = super.next();
if (i == XMLStreamReader.START_ELEMENT) {
QName qn = super.getName();
+ isInclude = qn.equals(WSDLConstants.QNAME_SCHEMA_INCLUDE);
+ if (isInclude) {
+ return nextTag();
+ }
isImport = qn.equals(WSDLConstants.QNAME_SCHEMA_IMPORT);
if (isImport) {
findLocation();
@@ -124,7 +129,13 @@
public int nextTag() throws XMLStreamException {
int i = super.nextTag();
if (i == XMLStreamReader.START_ELEMENT) {
- isImport = super.getName().equals(WSDLConstants.QNAME_SCHEMA_IMPORT);
+ QName qn = super.getName();
+ isInclude = qn.equals(WSDLConstants.QNAME_SCHEMA_INCLUDE);
+ if (isInclude) {
+ return super.nextTag();
+ }
+
+ isImport = qn.equals(WSDLConstants.QNAME_SCHEMA_IMPORT);
if (isImport) {
findLocation();
} else {
@@ -145,10 +156,6 @@
}
}
}
- public String getAttributeValue(String namespaceURI, String localName) {
- return super.getAttributeValue(namespaceURI, localName);
- }
-
public int getAttributeCount() {
int i = super.getAttributeCount();
if (locIdx != -1) {
@@ -163,7 +170,22 @@
}
return index;
}
-
+ public String getAttributeValue(String namespaceURI, String localName) {
+ if (isInclude && "schemaLocation".equals(localName)) {
+ return null;
+ }
+ return super.getAttributeValue(namespaceURI, localName);
+ }
+ public String getAttributeValue(int index) {
+ if (isInclude) {
+ String n = getAttributeLocalName(index);
+ if ("schemaLocation".equals(n)) {
+ return null;
+ }
+ }
+ return super.getAttributeValue(mapIdx(index));
+ }
+
public QName getAttributeName(int index) {
return super.getAttributeName(mapIdx(index));
}
@@ -184,16 +206,10 @@
return super.getAttributeType(mapIdx(index));
}
- public String getAttributeValue(int index) {
- return super.getAttributeValue(mapIdx(index));
- }
public boolean isAttributeSpecified(int index) {
return super.isAttributeSpecified(mapIdx(index));
}
-
-
-
}
@@ -378,7 +394,7 @@
continue;
}
- if (!key.startsWith("file:")) {
+ if (!key.startsWith("file:") && !key.startsWith("jar:")) {
XmlSchemaSerializer xser = new XmlSchemaSerializer();
xser.setExtReg(schemaCollection.getExtReg());
Document[] docs;
@@ -393,21 +409,25 @@
String uri = null;
try {
uri = docs[0].getDocumentURI();
- } catch (Exception ex) {
+ } catch (Throwable ex) {
//ignore - DOM level 3
}
validateSchema(ele, uri);
}
+ try {
+ docs[0].setDocumentURI(key);
+ } catch (Throwable t) {
+ //ignore - DOM level 3
+ }
InputSource is = new InputSource((InputStream)null);
//key = key.replaceFirst("#types[0-9]+$", "");
is.setSystemId(key);
is.setPublicId(key);
opts.addGrammar(is);
try {
- schemaCompiler.parseSchema(key, StaxUtils.createXMLStreamReader(ele));
+ schemaCompiler.parseSchema(key, StaxUtils.createXMLStreamReader(ele, key));
} catch (XMLStreamException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
+ throw new ToolException(e);
}
}
}
@@ -419,10 +439,15 @@
if (ids.contains(key)) {
continue;
}
- if (key.startsWith("file:")) {
+ if (key.startsWith("file:") || key.startsWith("jar:")) {
+ InputStream in = null;
try {
- FileInputStream fin = new FileInputStream(new File(new URI(key)));
- XMLStreamReader reader = StaxUtils.createXMLStreamReader(key, fin);
+ if (key.startsWith("file:")) {
+ in = new FileInputStream(new File(new URI(key)));
+ } else {
+ in = new URL(key).openStream();
+ }
+ XMLStreamReader reader = StaxUtils.createXMLStreamReader(key, in);
reader = new LocationFilterReader(reader);
InputSource is = new InputSource(key);
opts.addGrammar(is);
@@ -432,6 +457,14 @@
throw ex;
} catch (Exception ex) {
throw new RuntimeException(ex);
+ } finally {
+ if (in != null) {
+ try {
+ in.close();
+ } catch (IOException e) {
+ //ignore
+ }
+ }
}
}
}
@@ -454,7 +487,7 @@
is.setPublicId(key);
opts.addGrammar(is);
try {
- schemaCompiler.parseSchema(key, StaxUtils.createXMLStreamReader(ele));
+ schemaCompiler.parseSchema(key, StaxUtils.createXMLStreamReader(ele, key));
} catch (XMLStreamException e) {
// TODO Auto-generated catch block
e.printStackTrace();
@@ -587,21 +620,34 @@
}
private Element removeImportElement(Element element) {
- List<Element> elemList = DOMUtils.findAllElementsByTagNameNS(element,
+ List<Element> impElemList = DOMUtils.findAllElementsByTagNameNS(element,
ToolConstants.SCHEMA_URI,
"import");
- if (elemList.size() == 0) {
+ List<Element> incElemList = DOMUtils.findAllElementsByTagNameNS(element,
+ ToolConstants.SCHEMA_URI,
+ "include");
+ if (impElemList.size() == 0 && incElemList.size() == 0) {
return element;
}
element = (Element)cloneNode(element.getOwnerDocument(), element, true);
- elemList = DOMUtils.findAllElementsByTagNameNS(element,
+ List<Node> ns = new ArrayList<Node>();
+
+ impElemList = DOMUtils.findAllElementsByTagNameNS(element,
ToolConstants.SCHEMA_URI,
"import");
- List<Node> ns = new ArrayList<Node>();
- for (Element elem : elemList) {
+ for (Element elem : impElemList) {
Node importNode = elem;
ns.add(importNode);
}
+ incElemList = DOMUtils.findAllElementsByTagNameNS(element,
+ ToolConstants.SCHEMA_URI,
+ "include");
+ for (Element elem : incElemList) {
+ Node importNode = elem;
+ ns.add(importNode);
+ }
+
+
for (Node item : ns) {
Node schemaNode = item.getParentNode();
schemaNode.removeChild(item);