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);
