Author: dkulp Date: Wed Dec 9 02:14:15 2009 New Revision: 888677 URL: http://svn.apache.org/viewvc?rev=888677&view=rev Log: Merged revisions 888581 via svnmerge from https://svn.apache.org/repos/asf/cxf/branches/2.2.x-fixes
................ r888581 | dkulp | 2009-12-08 16:48:49 -0500 (Tue, 08 Dec 2009) | 9 lines Merged revisions 888567 via svnmerge from https://svn.apache.org/repos/asf/cxf/trunk ........ r888567 | dkulp | 2009-12-08 16:00:28 -0500 (Tue, 08 Dec 2009) | 1 line [CXF-2571] ANother attempt at a fix for jar URL's with xjc ........ ................ Modified: cxf/branches/2.1.x-fixes/ (props changed) cxf/branches/2.1.x-fixes/tools/wsdlto/databinding/jaxb/src/main/java/org/apache/cxf/tools/wsdlto/databinding/jaxb/JAXBDataBinding.java Propchange: cxf/branches/2.1.x-fixes/ ------------------------------------------------------------------------------ Binary property 'svnmerge-integrated' - no diff available. Modified: cxf/branches/2.1.x-fixes/tools/wsdlto/databinding/jaxb/src/main/java/org/apache/cxf/tools/wsdlto/databinding/jaxb/JAXBDataBinding.java URL: http://svn.apache.org/viewvc/cxf/branches/2.1.x-fixes/tools/wsdlto/databinding/jaxb/src/main/java/org/apache/cxf/tools/wsdlto/databinding/jaxb/JAXBDataBinding.java?rev=888677&r1=888676&r2=888677&view=diff ============================================================================== --- cxf/branches/2.1.x-fixes/tools/wsdlto/databinding/jaxb/src/main/java/org/apache/cxf/tools/wsdlto/databinding/jaxb/JAXBDataBinding.java (original) +++ cxf/branches/2.1.x-fixes/tools/wsdlto/databinding/jaxb/src/main/java/org/apache/cxf/tools/wsdlto/databinding/jaxb/JAXBDataBinding.java Wed Dec 9 02:14:15 2009 @@ -40,6 +40,7 @@ import javax.xml.validation.SchemaFactory; +import org.w3c.dom.Attr; import org.w3c.dom.DOMException; import org.w3c.dom.Document; import org.w3c.dom.Element; @@ -65,7 +66,8 @@ import com.sun.tools.xjc.api.TypeAndAnnotation; import com.sun.tools.xjc.api.XJC; - +import org.apache.cxf.Bus; +import org.apache.cxf.catalog.OASISCatalogManager; import org.apache.cxf.common.i18n.Message; import org.apache.cxf.common.logging.LogUtils; import org.apache.cxf.common.util.StringUtils; @@ -242,7 +244,9 @@ Map<String, Element> schemaLists) { for (String key : schemaLists.keySet()) { Element ele = schemaLists.get(key); - ele = removeImportElement(ele); + Bus bus = context.get(Bus.class); + OASISCatalogManager catalog = bus.getExtension(OASISCatalogManager.class); + ele = removeImportElement(ele, key, catalog); if (context.get(ToolConstants.CFG_VALIDATE_WSDL) != null) { validateSchema(ele); } @@ -375,7 +379,7 @@ return null; } - private Element removeImportElement(Element element) { + private Element removeImportElement(Element element, String sysId, OASISCatalogManager catalog) { List<Element> impElemList = DOMUtils.findAllElementsByTagNameNS(element, ToolConstants.SCHEMA_URI, "import"); @@ -395,18 +399,17 @@ Node importNode = elem; ns.add(importNode); } + for (Node item : ns) { + Node schemaNode = item.getParentNode(); + schemaNode.removeChild(item); + } + 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); + Attr val = elem.getAttributeNode("schemaLocation"); + val.setNodeValue(mapSchemaLocation(val.getNodeValue(), sysId, catalog)); } return element; } @@ -741,6 +744,35 @@ } } } - + private static String mapSchemaLocation(String target, String base, OASISCatalogManager catalog) { + if (catalog != null) { + try { + String resolvedLocation = catalog.getCatalog().resolveSystem(target); + + if (resolvedLocation == null) { + resolvedLocation = catalog.getCatalog().resolveURI(target); + } + if (resolvedLocation == null) { + resolvedLocation = catalog.getCatalog().resolvePublic(target, base); + } + if (resolvedLocation != null) { + return resolvedLocation; + } + + } catch (Exception ex) { + //ignore + } + } + try { + //JAXB xjc cannot properly do this for "jar" URL's so we'll go ahead and do + //the resolving ourselves. + URL url = new URL(base); + url = new URL(url, target); + return url.toString(); + } catch (Exception ex) { + //ignore + } + return target; + } }
