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/06/16 19:05:40 UTC
svn commit: r785298 - in /cxf/branches/2.2.x-fixes: ./
rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java
Author: dkulp
Date: Tue Jun 16 17:05:39 2009
New Revision: 785298
URL: http://svn.apache.org/viewvc?rev=785298&view=rev
Log:
Merged revisions 785280 via svnmerge from
https://svn.apache.org/repos/asf/cxf/trunk
........
r785280 | dkulp | 2009-06-16 12:21:27 -0400 (Tue, 16 Jun 2009) | 2 lines
Make sure "built in" schemas can get included into generated wsdl's if
required.
........
Modified:
cxf/branches/2.2.x-fixes/ (props changed)
cxf/branches/2.2.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java
Propchange: cxf/branches/2.2.x-fixes/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Jun 16 17:05:39 2009
@@ -1 +1 @@
-/cxf/trunk:782728-782730,783097,783294,783396,784059,784181-784183,784895,785279
+/cxf/trunk:782728-782730,783097,783294,783396,784059,784181-784183,784895,785279-785280
Propchange: cxf/branches/2.2.x-fixes/
------------------------------------------------------------------------------
--- svnmerge-integrated (original)
+++ svnmerge-integrated Tue Jun 16 17:05:39 2009
@@ -1 +1 @@
-/cxf/trunk:1-782619,782728-782730,783097,783294,783396,784059,784181-784183,784895,785279
+/cxf/trunk:1-782619,782728-782730,783097,783294,783396,784059,784181-784183,784895,785279-785280
Modified: cxf/branches/2.2.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.2.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java?rev=785298&r1=785297&r2=785298&view=diff
==============================================================================
--- cxf/branches/2.2.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java (original)
+++ cxf/branches/2.2.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java Tue Jun 16 17:05:39 2009
@@ -50,6 +50,7 @@
import javax.xml.bind.ValidationEventHandler;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementDecl;
+import javax.xml.parsers.ParserConfigurationException;
import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLEventWriter;
import javax.xml.stream.XMLStreamReader;
@@ -61,6 +62,8 @@
import org.w3c.dom.Document;
import org.w3c.dom.Node;
+import org.xml.sax.SAXException;
+
import org.apache.cxf.common.i18n.Message;
import org.apache.cxf.common.logging.LogUtils;
import org.apache.cxf.common.util.CacheMap;
@@ -73,8 +76,10 @@
import org.apache.cxf.databinding.DataWriter;
import org.apache.cxf.databinding.WrapperCapableDatabinding;
import org.apache.cxf.databinding.WrapperHelper;
+import org.apache.cxf.helpers.XMLUtils;
import org.apache.cxf.jaxb.io.DataReaderImpl;
import org.apache.cxf.jaxb.io.DataWriterImpl;
+import org.apache.cxf.resource.URIResolver;
import org.apache.cxf.service.Service;
import org.apache.cxf.service.factory.ServiceConstructionException;
import org.apache.cxf.service.model.ServiceInfo;
@@ -141,6 +146,80 @@
private static final Map<Package, CachedClassOrNull> OBJECT_FACTORY_CACHE
= new CacheMap<Package, CachedClassOrNull>();
+
+ private static final Map<String, DOMResult> BUILT_IN_SCHEMAS = new HashMap<String, DOMResult>();
+ static {
+ URIResolver resolver = new URIResolver();
+ try {
+ resolver.resolve("", "classpath:/schemas/wsdl/ws-addr-wsdl.xsd", JAXBDataBinding.class);
+ if (resolver.isResolved()) {
+ InputStream ins = resolver.getInputStream();
+ Document doc = XMLUtils.parse(ins);
+ ins.close();
+ DOMResult dr = new DOMResult(doc, "classpath:/schemas/wsdl/ws-addr-wsdl.xsd");
+ BUILT_IN_SCHEMAS.put("http://www.w3.org/2005/02/addressing/wsdl", dr);
+ resolver.unresolve();
+ }
+ } catch (IOException e) {
+ //IGNORE
+ } catch (ParserConfigurationException e) {
+ //IGNORE
+ } catch (SAXException e) {
+ //IGNORE
+ }
+ try {
+ resolver.resolve("", "classpath:/schemas/wsdl/ws-addr.xsd", JAXBDataBinding.class);
+ if (resolver.isResolved()) {
+ InputStream ins = resolver.getInputStream();
+ Document doc = XMLUtils.parse(ins);
+ ins.close();
+ DOMResult dr = new DOMResult(doc, "classpath:/schemas/wsdl/ws-addr.xsd");
+ BUILT_IN_SCHEMAS.put("http://www.w3.org/2005/08/addressing", dr);
+ resolver.unresolve();
+ }
+ } catch (IOException e) {
+ //IGNORE
+ } catch (ParserConfigurationException e) {
+ //IGNORE
+ } catch (SAXException e) {
+ //IGNORE
+ }
+ try {
+ resolver.resolve("", "classpath:/schemas/wsdl/wsrm.xsd", JAXBDataBinding.class);
+ if (resolver.isResolved()) {
+ InputStream ins = resolver.getInputStream();
+ Document doc = XMLUtils.parse(ins);
+ ins.close();
+ DOMResult dr = new DOMResult(doc, "classpath:/schemas/wsdl/wsrm.xsd");
+ BUILT_IN_SCHEMAS.put("http://schemas.xmlsoap.org/ws/2005/02/rm", dr);
+ resolver.unresolve();
+ }
+ } catch (IOException e) {
+ //IGNORE
+ } catch (ParserConfigurationException e) {
+ //IGNORE
+ } catch (SAXException e) {
+ //IGNORE
+ }
+ try {
+ resolver.resolve("", "classpath:/schemas/wsdl/wsrm.xsd", JAXBDataBinding.class);
+ if (resolver.isResolved()) {
+ InputStream ins = resolver.getInputStream();
+ Document doc = XMLUtils.parse(ins);
+ ins.close();
+ DOMResult dr = new DOMResult(doc, "classpath:/schemas/wsdl/wsrm.xsd");
+ BUILT_IN_SCHEMAS.put("http://schemas.xmlsoap.org/ws/2005/02/rm", dr);
+ resolver.unresolve();
+ }
+ } catch (IOException e) {
+ //IGNORE
+ } catch (ParserConfigurationException e) {
+ //IGNORE
+ } catch (SAXException e) {
+ //IGNORE
+ }
+ }
+
Class[] extraClass;
@@ -309,17 +388,32 @@
} else {
schemasFromCache = true;
}
+ Set<DOMSource> bi = new LinkedHashSet<DOMSource>();
if (schemas == null) {
- schemas = new HashSet<DOMSource>();
+ schemas = new LinkedHashSet<DOMSource>();
try {
for (DOMResult r : generateJaxbSchemas()) {
- schemas.add(new DOMSource(r.getNode(), r.getSystemId()));
+ DOMSource src = new DOMSource(r.getNode(), r.getSystemId());
+ if (BUILT_IN_SCHEMAS.containsValue(r)) {
+ bi.add(src);
+ } else {
+ schemas.add(src);
+ }
}
+ //put any builtins at the end. Anything that DOES import them
+ //will cause it to load automatically and we'll skip them later
+ schemas.addAll(bi);
} catch (IOException e) {
throw new ServiceConstructionException(new Message("SCHEMA_GEN_EXC", LOG), e);
}
}
for (DOMSource r : schemas) {
+ if (bi.contains(r)) {
+ String ns = ((Document)r.getNode()).getDocumentElement().getAttribute("targetNamespace");
+ if (serviceInfo.getSchema(ns) != null) {
+ continue;
+ }
+ }
addSchemaDocument(serviceInfo,
col,
(Document)r.getNode(),
@@ -361,21 +455,15 @@
final List<DOMResult> results = new ArrayList<DOMResult>();
context.generateSchema(new SchemaOutputResolver() {
- private Map<String, String> builtIns = new HashMap<String, String>();
- {
- builtIns.put("http://www.w3.org/2005/02/addressing/wsdl",
- "classpath:/schemas/wsdl/ws-addr-wsdl.xsd");
- builtIns.put("http://www.w3.org/2005/08/addressing", "classpath:/schemas/wsdl/ws-addr.xsd");
- builtIns.put("http://schemas.xmlsoap.org/ws/2005/02/rm", "classpath:/schemas/wsdl/wsrm.xsd");
- builtIns.put("http://www.w3.org/2005/05/xmlmime", "classpath:/schemas/wsdl/ws-addr.xsd");
- }
@Override
public Result createOutput(String ns, String file) throws IOException {
DOMResult result = new DOMResult();
- if (builtIns.containsKey(ns)) {
- result.setSystemId(builtIns.get(ns));
+ if (BUILT_IN_SCHEMAS.containsKey(ns)) {
+ DOMResult dr = BUILT_IN_SCHEMAS.get(ns);
+ result.setSystemId(dr.getSystemId());
+ results.add(dr);
return result;
}
result.setSystemId(file);