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:24:16 UTC
svn commit: r785307 - in /cxf/branches/2.1.x-fixes: ./
rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java
Author: dkulp
Date: Tue Jun 16 17:24:16 2009
New Revision: 785307
URL: http://svn.apache.org/viewvc?rev=785307&view=rev
Log:
Merged revisions 785298 via svnmerge from
https://svn.apache.org/repos/asf/cxf/branches/2.2.x-fixes
................
r785298 | dkulp | 2009-06-16 13:05:39 -0400 (Tue, 16 Jun 2009) | 10 lines
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.1.x-fixes/ (props changed)
cxf/branches/2.1.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java
Propchange: cxf/branches/2.1.x-fixes/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Jun 16 17:24:16 2009
@@ -1,2 +1,2 @@
-/cxf/branches/2.2.x-fixes:743446,753380,753397,753421,754585,755365,757499,757859,757899,757935,757951,758195,758303,758308,758378,758690,758910,759890,759961,759963-759964,759966,760029,760073,760150,760171,760178,760198,760212,760456,760468,760582,760938,761094,761113,761120,761317,761759,761789,762393,762518,762567,763200,763272,763495,763854,763931,763942,763953,764033-764034,764581,764599-764606,764887,765357,766013,766058,766100-766101,766763,766770,766860,766962-766963,767159,767191,767927,771416,772143,772402,772658,772714,773009-773010,773027,773049,773146,773581,773691,773693,774446-774496,774558,774760,774851,774979,775423,776024-776025,776218,776429,776459,777189,777224,777243,777481,777505,777572,777580,780033,780184,780213,780421,780664,780800,780902,780911,781497,781841,782733,782735-782736,783099,783407,784064,784197,785293,785296
-/cxf/trunk:782181,782728-782730,783097,783396,784059,784181,784895,785279
+/cxf/branches/2.2.x-fixes:743446,753380,753397,753421,754585,755365,757499,757859,757899,757935,757951,758195,758303,758308,758378,758690,758910,759890,759961,759963-759964,759966,760029,760073,760150,760171,760178,760198,760212,760456,760468,760582,760938,761094,761113,761120,761317,761759,761789,762393,762518,762567,763200,763272,763495,763854,763931,763942,763953,764033-764034,764581,764599-764606,764887,765357,766013,766058,766100-766101,766763,766770,766860,766962-766963,767159,767191,767927,771416,772143,772402,772658,772714,773009-773010,773027,773049,773146,773581,773691,773693,774446-774496,774558,774760,774851,774979,775423,776024-776025,776218,776429,776459,777189,777224,777243,777481,777505,777572,777580,780033,780184,780213,780421,780664,780800,780902,780911,781497,781841,782733,782735-782736,783099,783407,784064,784197,785293,785296,785298
+/cxf/trunk:782181,782728-782730,783097,783396,784059,784181,784895,785279-785280
Propchange: cxf/branches/2.1.x-fixes/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.
Modified: cxf/branches/2.1.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.1.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java?rev=785307&r1=785306&r2=785307&view=diff
==============================================================================
--- cxf/branches/2.1.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java (original)
+++ cxf/branches/2.1.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java Tue Jun 16 17:24:16 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;
@@ -308,17 +387,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(),
@@ -360,21 +454,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);