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 2012/01/17 21:37:32 UTC

svn commit: r1232564 - in /cxf/trunk: common/common/src/main/java/org/apache/cxf/common/jaxb/ rt/databinding/jaxb/src/main/java/org/apache/cxf/endpoint/dynamic/ systests/databinding/src/test/java/org/apache/cxf/systest/aegis/ systests/transports/src/te...

Author: dkulp
Date: Tue Jan 17 20:37:31 2012
New Revision: 1232564

URL: http://svn.apache.org/viewvc?rev=1232564&view=rev
Log:
[CXF-4037] Allow dynamic client to use already parsed and processed
schemas like the tooling does.

Added:
    cxf/trunk/testutils/src/main/resources/wsdl/hello_world_types.xsd   (with props)
    cxf/trunk/testutils/src/main/resources/wsdl/hello_world_types_include.xsd   (with props)
Modified:
    cxf/trunk/common/common/src/main/java/org/apache/cxf/common/jaxb/JAXBUtils.java
    cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/endpoint/dynamic/DynamicClientFactory.java
    cxf/trunk/systests/databinding/src/test/java/org/apache/cxf/systest/aegis/AegisClientServerTest.java
    cxf/trunk/systests/transports/src/test/java/org/apache/cxf/systest/http/HTTPSClientTest.java
    cxf/trunk/systests/transports/src/test/java/org/apache/cxf/systest/http/resources/resource-key-spec-url.xml
    cxf/trunk/testutils/src/main/resources/wsdl/hello_world_messages.wsdl.xml

Modified: cxf/trunk/common/common/src/main/java/org/apache/cxf/common/jaxb/JAXBUtils.java
URL: http://svn.apache.org/viewvc/cxf/trunk/common/common/src/main/java/org/apache/cxf/common/jaxb/JAXBUtils.java?rev=1232564&r1=1232563&r2=1232564&view=diff
==============================================================================
--- cxf/trunk/common/common/src/main/java/org/apache/cxf/common/jaxb/JAXBUtils.java (original)
+++ cxf/trunk/common/common/src/main/java/org/apache/cxf/common/jaxb/JAXBUtils.java Tue Jan 17 20:37:31 2012
@@ -943,6 +943,7 @@ public final class JAXBUtils {
         void parseSchema(InputSource source);
 
         void parseSchema(String key, Element el);
+        void parseSchema(String key, XMLStreamReader el);
 
         @WrapReturn(Options.class)
         Options getOptions();

Modified: cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/endpoint/dynamic/DynamicClientFactory.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/endpoint/dynamic/DynamicClientFactory.java?rev=1232564&r1=1232563&r2=1232564&view=diff
==============================================================================
--- cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/endpoint/dynamic/DynamicClientFactory.java (original)
+++ cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/endpoint/dynamic/DynamicClientFactory.java Tue Jan 17 20:37:31 2012
@@ -23,15 +23,18 @@ import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.UnsupportedEncodingException;
+import java.lang.reflect.Field;
 import java.lang.reflect.Method;
+import java.lang.reflect.Proxy;
 import java.net.MalformedURLException;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.net.URL;
 import java.net.URLClassLoader;
 import java.net.URLDecoder;
-import java.util.Collection;
+import java.util.ArrayList;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
@@ -41,37 +44,57 @@ import java.util.jar.JarFile;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
+import javax.xml.XMLConstants;
 import javax.xml.bind.JAXBContext;
 import javax.xml.bind.JAXBException;
 import javax.xml.namespace.QName;
 import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+import javax.xml.stream.util.StreamReaderDelegate;
 
+import org.w3c.dom.Attr;
+import org.w3c.dom.DOMException;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
 
 import org.xml.sax.EntityResolver;
 import org.xml.sax.InputSource;
+import org.xml.sax.Locator;
 import org.xml.sax.SAXException;
 import org.xml.sax.SAXParseException;
+import org.xml.sax.helpers.XMLFilterImpl;
+
+import com.sun.tools.xjc.ErrorReceiver;
+import com.sun.tools.xjc.reader.internalizer.AbstractReferenceFinderImpl;
+import com.sun.tools.xjc.reader.internalizer.DOMForest;
+import com.sun.tools.xjc.reader.xmlschema.parser.XMLSchemaInternalizationLogic;
 
 import org.apache.cxf.Bus;
 import org.apache.cxf.bus.CXFBusFactory;
+import org.apache.cxf.catalog.OASISCatalogManager;
+import org.apache.cxf.catalog.OASISCatalogManagerHelper;
+import org.apache.cxf.common.WSDLConstants;
 import org.apache.cxf.common.classloader.ClassLoaderUtils;
 import org.apache.cxf.common.i18n.Message;
 import org.apache.cxf.common.jaxb.JAXBUtils;
 import org.apache.cxf.common.jaxb.JAXBUtils.JCodeModel;
 import org.apache.cxf.common.jaxb.JAXBUtils.JDefinedClass;
 import org.apache.cxf.common.jaxb.JAXBUtils.JPackage;
+import org.apache.cxf.common.jaxb.JAXBUtils.Options;
 import org.apache.cxf.common.jaxb.JAXBUtils.S2JJAXBModel;
 import org.apache.cxf.common.jaxb.JAXBUtils.SchemaCompiler;
 import org.apache.cxf.common.logging.LogUtils;
 import org.apache.cxf.common.util.ReflectionInvokationHandler;
 import org.apache.cxf.common.util.StringUtils;
 import org.apache.cxf.common.util.SystemPropertyAction;
+import org.apache.cxf.common.xmlschema.SchemaCollection;
 import org.apache.cxf.endpoint.Client;
 import org.apache.cxf.endpoint.ClientImpl;
 import org.apache.cxf.endpoint.EndpointImplFactory;
 import org.apache.cxf.endpoint.SimpleEndpointImplFactory;
+import org.apache.cxf.helpers.DOMUtils;
 import org.apache.cxf.helpers.FileUtils;
 import org.apache.cxf.jaxb.JAXBDataBinding;
 import org.apache.cxf.resource.URIResolver;
@@ -81,6 +104,9 @@ import org.apache.cxf.service.model.Sche
 import org.apache.cxf.service.model.ServiceInfo;
 import org.apache.cxf.staxutils.StaxUtils;
 import org.apache.cxf.wsdl11.WSDLServiceFactory;
+import org.apache.ws.commons.schema.XmlSchema;
+import org.apache.ws.commons.schema.XmlSchemaSerializer;
+import org.apache.ws.commons.schema.XmlSchemaSerializer.XmlSchemaSerializerException;
 /**
  * This class reads a WSDL and creates a dynamic client from it.
  * 
@@ -271,7 +297,7 @@ public class DynamicClientFactory {
                                            getEndpointImplFactory());
 
         //all SI's should have the same schemas
-        Collection<SchemaInfo> schemas = svc.getServiceInfos().get(0).getSchemas();
+        SchemaCollection schemas = svc.getServiceInfos().get(0).getXmlSchemaCollection();
 
         SchemaCompiler compiler = 
             JAXBUtils.createSchemaCompilerWithDefaultAllocator(new HashSet<String>());
@@ -283,7 +309,10 @@ public class DynamicClientFactory {
         
         compiler.setErrorListener(elForRun);
         
-        addSchemas(wsdlUrl, schemas, compiler);
+        OASISCatalogManager catalog = bus.getExtension(OASISCatalogManager.class);
+        hackInNewInternalizationLogic(compiler, catalog);
+
+        addSchemas(compiler.getOptions(), compiler, svc.getServiceInfos(), schemas);
         addBindingFiles(bindingFiles, compiler);
         S2JJAXBModel intermediateModel = compiler.bind();
         
@@ -423,34 +452,117 @@ public class DynamicClientFactory {
         return false;
     }
 
-    private void addSchemas(String wsdlUrl, Collection<SchemaInfo> schemas, SchemaCompiler compiler) {
-        int num = 1;
-        for (SchemaInfo schema : schemas) {
-            Element el = schema.getElement();
-            String key = schema.getSystemId();
-            if (StringUtils.isEmpty(key)) {
-                key = wsdlUrl + "#types" + num;
+    
+    private void addSchemas(Options opts,
+                            SchemaCompiler schemaCompiler,
+                            List<ServiceInfo> serviceList,
+                            SchemaCollection schemaCollection) {
+
+        Map<String, Element> done = new HashMap<String, Element>();
+        Map<String, Element> notDone = new HashMap<String, Element>();
+        OASISCatalogManager catalog = bus.getExtension(OASISCatalogManager.class);
+        for (XmlSchema schema : schemaCollection.getXmlSchemas()) {
+            if (XMLConstants.W3C_XML_SCHEMA_NS_URI.equals(schema.getTargetNamespace())) {
+                continue;
             }
+            String key = schema.getSourceURI();
+            if (done.containsKey(key)) {
+                continue;
+            }
+            if (!key.startsWith("file:") && !key.startsWith("jar:")) {
+                XmlSchemaSerializer xser = new XmlSchemaSerializer();
+                xser.setExtReg(schemaCollection.getExtReg());
+                Document[] docs;
+                try {
+                    docs = xser.serializeSchema(schema, false);
+                } catch (XmlSchemaSerializerException e) {
+                    throw new RuntimeException(e);
+                }
+                Element ele = docs[0].getDocumentElement();
+                ele = removeImportElement(ele, key, catalog, done, notDone);
+                try {
+                    docs[0].setDocumentURI(key);
+                } catch (Throwable t) {
+                    //ignore - DOM level 3
+                }
+                if (ele != null) {
+                    InputSource is = new InputSource((InputStream)null);
+                    //key = key.replaceFirst("#types[0-9]+$", "");
+                    is.setSystemId(key);
+                    is.setPublicId(key);
+                    opts.addGrammar(is);
+                    schemaCompiler.parseSchema(key, ele);
+                }
+            }
+        }
+        for (XmlSchema schema : schemaCollection.getXmlSchemas()) {
+            if (XMLConstants.W3C_XML_SCHEMA_NS_URI.equals(schema.getTargetNamespace())) {
+                continue;
+            }
+            String key = schema.getSourceURI();
+            if (done.containsKey(key)) {
+                continue;
+            }
+            if (key.startsWith("file:") || key.startsWith("jar:")) {
+                InputStream in = null;
+                try {
+                    if (key.startsWith("file:")) {
+                        in = new FileInputStream(new File(new URI(key)));
+                    } else {
+                        in = new URL(key).openStream();
+                    }
 
-            //For JAXB 2.1.8
-            InputSource is = new InputSource((InputStream)null);
-            is.setSystemId(key);
-            is.setPublicId(key);
-            compiler.getOptions().addGrammar(is);
-
-            compiler.parseSchema(key, el);
-            num++;
-        }
-        if (simpleBindingEnabled) {
-            String id = "/org/apache/cxf/endpoint/dynamic/simple-binding.xjb";
-            LOG.fine("Loading the JAXB 2.1 simple binding for client.");
-            try {
-                Document doc = StaxUtils.read(getClass().getResourceAsStream(id));
-                compiler.parseSchema(id, doc.getDocumentElement());
-            } catch (XMLStreamException e) {
-                LOG.log(Level.WARNING, "Could not parse simple-binding.xsd", e);
+                    XMLStreamReader reader = StaxUtils.createXMLStreamReader(key, in);
+                    reader = new LocationFilterReader(reader, catalog);
+                    InputSource is = new InputSource(key);
+                    opts.addGrammar(is);
+                    schemaCompiler.parseSchema(key, reader);
+                    reader.close();
+                } catch (RuntimeException ex) {
+                    throw ex;
+                } catch (Exception ex) {
+                    throw new RuntimeException(ex);
+                } finally {
+                    if (in != null) {
+                        try {
+                            in.close();
+                        } catch (IOException e) {
+                            //ignore
+                        }
+                    }
+                }
             }
         }
+        for (ServiceInfo si : serviceList) {
+            for (SchemaInfo sci : si.getSchemas()) {
+                String key = sci.getSystemId();
+                if (done.containsKey(key)) {
+                    continue;
+                }
+                Element ele = sci.getElement();
+                ele = removeImportElement(ele, key, catalog, done, notDone);
+                if (ele != null) {
+                    InputSource is = new InputSource((InputStream)null);
+                    //key = key.replaceFirst("#types[0-9]+$", "");
+                    is.setSystemId(key);
+                    is.setPublicId(key);
+                    opts.addGrammar(is);
+                    schemaCompiler.parseSchema(key, StaxUtils.createXMLStreamReader(ele, key));
+                }
+            }
+        }
+        for (Map.Entry<String, Element> el : notDone.entrySet()) {
+            InputSource is = new InputSource((InputStream)null);
+            //key = key.replaceFirst("#types[0-9]+$", "");
+            is.setSystemId(el.getKey());
+            is.setPublicId(el.getKey());
+            opts.addGrammar(is);
+            schemaCompiler.parseSchema(el.getKey(),
+                                       StaxUtils.createXMLStreamReader(el.getValue(),
+                                                                       el.getKey()));
+
+        }
+
     }
     
     public boolean isSimpleBindingEnabled() {
@@ -662,4 +774,280 @@ public class DynamicClientFactory {
         this.jaxbContextProperties = jaxbContextProperties;
     }
     
+    
+    private void hackInNewInternalizationLogic(SchemaCompiler schemaCompiler,
+                                               final OASISCatalogManager catalog) {
+        try {
+            Object o = ((ReflectionInvokationHandler)Proxy.getInvocationHandler(schemaCompiler)).getTarget();
+            Field f = o.getClass().getDeclaredField("forest");
+            f.setAccessible(true);
+            DOMForest forest = new DOMForest(new XMLSchemaInternalizationLogic() {
+                public XMLFilterImpl createExternalReferenceFinder(DOMForest parent) {
+                    return new ReferenceFinder(parent, catalog);
+                }
+
+            });
+            forest.setErrorHandler((ErrorReceiver)o);
+            f.set(o, forest);
+        } catch (Throwable ex)  {
+            //ignore
+        }
+    }
+    
+    private static final class ReferenceFinder extends AbstractReferenceFinderImpl {
+        private Locator locator;
+        private OASISCatalogManager catalog;
+
+        ReferenceFinder(DOMForest parent, OASISCatalogManager cat) {
+            super(parent);
+            catalog = cat;
+        }
+
+        public void setDocumentLocator(Locator loc) {
+            super.setDocumentLocator(loc);
+            this.locator = loc;
+        }
+        protected String findExternalResource(String nsURI, String localName, org.xml.sax.Attributes atts) {
+            if (XMLConstants.W3C_XML_SCHEMA_NS_URI.equals(nsURI)
+                && ("import".equals(localName)
+                    || "include".equals(localName))) {
+                String s = atts.getValue("schemaLocation");
+                if (!StringUtils.isEmpty(s)) {
+                    s = mapSchemaLocation(s, locator.getSystemId(), catalog);
+                }
+                return s;
+            }
+            return null;
+        }
+    }
+    static String mapSchemaLocation(String target, String base, OASISCatalogManager catalog) {
+        try {
+            String resolvedLocation = new OASISCatalogManagerHelper().resolve(catalog, 
+                                                                              target, base);
+            if (resolvedLocation != null) {
+                return resolvedLocation;
+            }
+
+        } catch (Exception ex) {
+            //ignore
+        }
+        
+
+        try {
+            URIResolver resolver = new URIResolver(base, target);
+            if (resolver.isResolved()) {
+                target = resolver.getURI().toString();
+            }
+        } catch (Exception ex) {
+            //ignore
+        }
+        return target;
+    }
+    private Element removeImportElement(Element element,
+                                        String sysId,
+                                        OASISCatalogManager catalog,
+                                        Map<String, Element> done,
+                                        Map<String, Element> notDone) {
+        List<Element> impElemList = DOMUtils.findAllElementsByTagNameNS(element,
+                                                                        "http://www.w3.org/2001/XMLSchema",
+                                                                     "import");
+        List<Element> incElemList = DOMUtils.findAllElementsByTagNameNS(element,
+                                                                        "http://www.w3.org/2001/XMLSchema",
+                                                                     "include");
+        if (impElemList.size() == 0 && incElemList.size() == 0) {
+            return element;
+        }
+        element = (Element)cloneNode(element.getOwnerDocument(), element, true);
+        List<Node> ns = new ArrayList<Node>();
+
+        impElemList = DOMUtils.findAllElementsByTagNameNS(element,
+                                                          "http://www.w3.org/2001/XMLSchema",
+                                                           "import");
+        for (Element elem : impElemList) {
+            Node importNode = elem;
+            ns.add(importNode);
+        }
+        for (Node item : ns) {
+            Node schemaNode = item.getParentNode();
+            schemaNode.removeChild(item);
+        }
+
+        incElemList = DOMUtils.findAllElementsByTagNameNS(element,
+                                                          "http://www.w3.org/2001/XMLSchema",
+                                                          "include");
+        
+        boolean addedToNotDone = false;
+        for (Element elem : incElemList) {
+            Attr val = elem.getAttributeNode("schemaLocation");
+            String s = mapSchemaLocation(val.getNodeValue(), sysId, catalog);
+            val.setNodeValue(s);
+            if (!done.containsKey(s)) {
+                notDone.put(sysId, element);
+                addedToNotDone = true;
+            }
+        }
+
+        return addedToNotDone ? null : element;
+    }
+
+    public Node cloneNode(Document document, Node node, boolean deep) throws DOMException {
+        if (document == null || node == null) {
+            return null;
+        }
+        int type = node.getNodeType();
+
+        if (node.getOwnerDocument() == document) {
+            return node.cloneNode(deep);
+        }
+        Node clone;
+        switch (type) {
+        case Node.CDATA_SECTION_NODE:
+            clone = document.createCDATASection(node.getNodeValue());
+            break;
+        case Node.COMMENT_NODE:
+            clone = document.createComment(node.getNodeValue());
+            break;
+        case Node.ENTITY_REFERENCE_NODE:
+            clone = document.createEntityReference(node.getNodeName());
+            break;
+        case Node.ELEMENT_NODE:
+            clone = document.createElement(node.getNodeName());
+            NamedNodeMap attributes = node.getAttributes();
+            for (int i = 0; i < attributes.getLength(); i++) {
+                ((Element)clone).setAttribute(attributes.item(i).getNodeName(), attributes.item(i)
+                    .getNodeValue());
+            }
+            break;
+
+        case Node.TEXT_NODE:
+            clone = document.createTextNode(node.getNodeValue());
+            break;
+        default:
+            return null;
+        }
+        if (deep && type == Node.ELEMENT_NODE) {
+            Node child = node.getFirstChild();
+            while (child != null) {
+                clone.appendChild(cloneNode(document, child, true));
+                child = child.getNextSibling();
+            }
+        }
+        return clone;
+    }
+    public class LocationFilterReader extends StreamReaderDelegate implements XMLStreamReader {
+        boolean isImport;
+        boolean isInclude;
+        int locIdx = -1;
+        OASISCatalogManager catalog;
+
+        LocationFilterReader(XMLStreamReader read, OASISCatalogManager catalog) {
+            super(read);
+            this.catalog = catalog;
+        }
+
+        public int next() throws XMLStreamException {
+            int i = super.next();
+            if (i == XMLStreamReader.START_ELEMENT) {
+                QName qn = super.getName();
+                isInclude = qn.equals(WSDLConstants.QNAME_SCHEMA_INCLUDE);
+                isImport = qn.equals(WSDLConstants.QNAME_SCHEMA_IMPORT);
+                if (isImport) {
+                    findLocation();
+                } else {
+                    locIdx = -1;
+                }
+            } else {
+                isImport = false;
+                locIdx = -1;
+            }
+            return i;
+        }
+
+        public int nextTag() throws XMLStreamException {
+            int i = super.nextTag();
+            if (i == XMLStreamReader.START_ELEMENT) {
+                QName qn = super.getName();
+                isInclude = qn.equals(WSDLConstants.QNAME_SCHEMA_INCLUDE);
+                isImport = qn.equals(WSDLConstants.QNAME_SCHEMA_IMPORT);
+                if (isImport) {
+                    findLocation();
+                } else {
+                    locIdx = -1;
+                }
+            } else {
+                isImport = false;
+                locIdx = -1;
+            }
+            return i;
+        }
+        private void findLocation() {
+            locIdx = -1;
+            for (int x = super.getAttributeCount(); x > 0; --x) {
+                String nm = super.getAttributeLocalName(x - 1);
+                if ("schemaLocation".equals(nm)) {
+                    locIdx = x - 1;
+                }
+            }
+        }
+        public int getAttributeCount() {
+            int i = super.getAttributeCount();
+            if (locIdx != -1) {
+                --i;
+            }
+            return i;
+        }
+        private int mapIdx(int index) {
+            if (locIdx != -1
+                && index >= locIdx) {
+                ++index;
+            }
+            return index;
+        }
+
+        private String mapSchemaLocation(String target) {
+            return DynamicClientFactory.mapSchemaLocation(target, this.getLocation().getSystemId(), catalog);
+        }
+
+        public String getAttributeValue(String namespaceURI, String localName) {
+            if (isInclude && "schemaLocation".equals(localName)) {
+                return mapSchemaLocation(super.getAttributeValue(namespaceURI, localName));
+            }
+            return super.getAttributeValue(namespaceURI, localName);
+        }
+        public String getAttributeValue(int index) {
+            if (isInclude) {
+                String n = getAttributeLocalName(index);
+                if ("schemaLocation".equals(n)) {
+                    return mapSchemaLocation(super.getAttributeValue(index));
+                }
+            }
+            return super.getAttributeValue(mapIdx(index));
+        }
+
+        public QName getAttributeName(int index) {
+            return super.getAttributeName(mapIdx(index));
+        }
+
+        public String getAttributePrefix(int index) {
+            return super.getAttributePrefix(mapIdx(index));
+        }
+
+        public String getAttributeNamespace(int index) {
+            return super.getAttributeNamespace(mapIdx(index));
+        }
+
+        public String getAttributeLocalName(int index) {
+            return super.getAttributeLocalName(mapIdx(index));
+        }
+
+        public String getAttributeType(int index) {
+            return super.getAttributeType(mapIdx(index));
+        }
+
+
+        public boolean isAttributeSpecified(int index) {
+            return super.isAttributeSpecified(mapIdx(index));
+        }
+    }
+
 }

Modified: cxf/trunk/systests/databinding/src/test/java/org/apache/cxf/systest/aegis/AegisClientServerTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/databinding/src/test/java/org/apache/cxf/systest/aegis/AegisClientServerTest.java?rev=1232564&r1=1232563&r2=1232564&view=diff
==============================================================================
--- cxf/trunk/systests/databinding/src/test/java/org/apache/cxf/systest/aegis/AegisClientServerTest.java (original)
+++ cxf/trunk/systests/databinding/src/test/java/org/apache/cxf/systest/aegis/AegisClientServerTest.java Tue Jan 17 20:37:31 2012
@@ -259,7 +259,7 @@ public class AegisClientServerTest exten
     @Test
     public void testDynamicClient() throws Exception {
         DynamicClientFactory dcf = DynamicClientFactory.newInstance();
-        Client client = dcf.createClient("http://localhost:" + PORT + "/jaxwsAndAegisSports?wsdl");
+        Client client = dcf.createClient("http://localhost:" + PORT + "/jaxwsAndAegisSports?wsdl&dynamic");
 
         Object r = client.invoke("getAttributeBean")[0];
         Method getAddrPlainString = r.getClass().getMethod("getAttrPlainString");

Modified: cxf/trunk/systests/transports/src/test/java/org/apache/cxf/systest/http/HTTPSClientTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/transports/src/test/java/org/apache/cxf/systest/http/HTTPSClientTest.java?rev=1232564&r1=1232563&r2=1232564&view=diff
==============================================================================
--- cxf/trunk/systests/transports/src/test/java/org/apache/cxf/systest/http/HTTPSClientTest.java (original)
+++ cxf/trunk/systests/transports/src/test/java/org/apache/cxf/systest/http/HTTPSClientTest.java Tue Jan 17 20:37:31 2012
@@ -25,6 +25,7 @@ import javax.xml.ws.BindingProvider;
 
 import org.apache.cxf.BusFactory;
 import org.apache.cxf.configuration.Configurer;
+import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
 import org.apache.cxf.testutil.common.AbstractBusClientServerTestBase;
 import org.apache.hello_world.Greeter;
 import org.apache.hello_world.services.SOAPService;
@@ -89,11 +90,28 @@ public class HTTPSClientTest extends Abs
     public final void testSuccessfulCall(String configuration,
                                          String address,
                                          URL url) throws Exception {
+        testSuccessfulCall(configuration, address, url, false);
+    }
+    public final void testSuccessfulCall(String configuration,
+                                         String address,
+                                         URL url, 
+                                         boolean dynamicClient) throws Exception {
         setTheConfiguration(configuration);
         startServers();
         if (url == null) {
             url = SOAPService.WSDL_LOCATION;
         }
+        
+        //CXF-4037 - dynamic client isn't using the conduit settings to resolve schemas
+        if (dynamicClient) {
+            ClassLoader loader = Thread.currentThread().getContextClassLoader();
+            JaxWsDynamicClientFactory.newInstance(BusFactory.getDefaultBus())
+                .createClient(url.toExternalForm());
+            Thread.currentThread().setContextClassLoader(loader);
+        }
+
+        
+        
         SOAPService service = new SOAPService(url, SOAPService.SERVICE);
         assertNotNull("Service is null", service);   
         final Greeter port = service.getHttpsPort();
@@ -105,6 +123,8 @@ public class HTTPSClientTest extends Abs
               address);
         
         assertEquals(port.greetMe("Kitty"), "Hello Kitty");
+        
+        
         stopServers();
     }
     
@@ -139,6 +159,8 @@ public class HTTPSClientTest extends Abs
     public final void testResourceKeySpecEndpointURL() throws Exception {
         testSuccessfulCall("resources/resource-key-spec-url.xml",
                            "https://localhost:" + PORT5 + "/SoapContext/HttpsPort",
-                           new URL("https://localhost:" + PORT5 + "/SoapContext/HttpsPort?wsdl"));
+                           new URL("https://localhost:" + PORT5 + "/SoapContext/HttpsPort?wsdl"),
+                           true);
+        
     }
 }

Modified: cxf/trunk/systests/transports/src/test/java/org/apache/cxf/systest/http/resources/resource-key-spec-url.xml
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/transports/src/test/java/org/apache/cxf/systest/http/resources/resource-key-spec-url.xml?rev=1232564&r1=1232563&r2=1232564&view=diff
==============================================================================
--- cxf/trunk/systests/transports/src/test/java/org/apache/cxf/systest/http/resources/resource-key-spec-url.xml (original)
+++ cxf/trunk/systests/transports/src/test/java/org/apache/cxf/systest/http/resources/resource-key-spec-url.xml Tue Jan 17 20:37:31 2012
@@ -22,9 +22,11 @@ under the License.
        xmlns:http="http://cxf.apache.org/transports/http/configuration"
        xmlns:httpj="http://cxf.apache.org/transports/http-jetty/configuration"
        xmlns:jaxws="http://cxf.apache.org/jaxws"
+       xmlns:cxf="http://cxf.apache.org/core"
        xmlns:sec="http://cxf.apache.org/configuration/security"
        xsi:schemaLocation="
         http://www.springframework.org/schema/beans                 http://www.springframework.org/schema/beans/spring-beans.xsd
+        http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd
         http://cxf.apache.org/jaxws                                 http://cxf.apache.org/schemas/jaxws.xsd
         http://cxf.apache.org/transports/http/configuration         http://cxf.apache.org/schemas/configuration/http-conf.xsd
         http://cxf.apache.org/transports/http-jetty/configuration   http://cxf.apache.org/schemas/configuration/http-jetty.xsd
@@ -52,9 +54,14 @@ under the License.
         address="https://localhost:${testutil.ports.BusServer.5}/SoapContext/HttpsPort"
         serviceName="s:SOAPService"
         endpointName="e:HttpsPort"
+        wsdlLocation="/wsdl/hello_world_services.wsdl"
         xmlns:e="http://apache.org/hello_world/services"
         xmlns:s="http://apache.org/hello_world/services"
-        depends-on="port-9005-tls-config"/>
+        depends-on="port-9005-tls-config">
+        <jaxws:features>
+            <cxf:logging/>
+        </jaxws:features>
+    </jaxws:endpoint>
 
     <!-- -->
     <!-- TLS Port configuration parameters for port 9005 -->

Modified: cxf/trunk/testutils/src/main/resources/wsdl/hello_world_messages.wsdl.xml
URL: http://svn.apache.org/viewvc/cxf/trunk/testutils/src/main/resources/wsdl/hello_world_messages.wsdl.xml?rev=1232564&r1=1232563&r2=1232564&view=diff
==============================================================================
--- cxf/trunk/testutils/src/main/resources/wsdl/hello_world_messages.wsdl.xml (original)
+++ cxf/trunk/testutils/src/main/resources/wsdl/hello_world_messages.wsdl.xml Tue Jan 17 20:37:31 2012
@@ -27,48 +27,8 @@
     targetNamespace="http://apache.org/hello_world/messages">
     <wsdl:types>
         <schema
-            xmlns="http://www.w3.org/2001/XMLSchema"
-            xmlns:x1="http://apache.org/hello_world/types"
-            targetNamespace="http://apache.org/hello_world/types"
-            elementFormDefault="qualified">
-            <element name="sayHi">
-                <complexType/>
-            </element>
-            <element name="sayHiResponse">
-                <complexType>
-                    <sequence>
-                        <element name="responseType" type="string"/>
-                    </sequence>
-                </complexType>
-            </element>
-            <element name="greetMe">
-                <complexType>
-                    <sequence>
-                        <element name="requestType" type="string"/>
-                    </sequence>
-                </complexType>
-            </element>
-            <element name="greetMeResponse">
-                <complexType>
-                    <sequence>
-                        <element name="responseType" type="string"/>
-                    </sequence>
-                </complexType>
-            </element>
-            <element name="pingMe">
-                <complexType/>
-            </element>
-            <element name="pingMeResponse">
-                <complexType/>
-            </element>
-            <element name="faultDetail">
-                <complexType>
-                    <sequence>
-                        <element name="minor" type="short" form="qualified" minOccurs="0"/>
-                        <element name="major" type="short" form="qualified" minOccurs="0"/>
-                    </sequence>
-                </complexType>
-            </element>
+            xmlns="http://www.w3.org/2001/XMLSchema">
+            <import namespace="http://apache.org/hello_world/types" schemaLocation="hello_world_types.xsd"/>
         </schema>
     </wsdl:types>
     <wsdl:message name="sayHiRequest">

Added: cxf/trunk/testutils/src/main/resources/wsdl/hello_world_types.xsd
URL: http://svn.apache.org/viewvc/cxf/trunk/testutils/src/main/resources/wsdl/hello_world_types.xsd?rev=1232564&view=auto
==============================================================================
--- cxf/trunk/testutils/src/main/resources/wsdl/hello_world_types.xsd (added)
+++ cxf/trunk/testutils/src/main/resources/wsdl/hello_world_types.xsd Tue Jan 17 20:37:31 2012
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements. See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership. The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License. You may obtain a copy of the License at
+ 
+  http://www.apache.org/licenses/LICENSE-2.0
+ 
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied. See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+<schema
+    xmlns="http://www.w3.org/2001/XMLSchema"
+    xmlns:x1="http://apache.org/hello_world/types"
+    targetNamespace="http://apache.org/hello_world/types"
+    elementFormDefault="qualified">
+    <include schemaLocation="hello_world_types_include.xsd"/>
+    <element name="sayHi">
+        <complexType/>
+    </element>
+    <element name="sayHiResponse">
+        <complexType>
+            <sequence>
+                <element name="responseType" type="string"/>
+            </sequence>
+        </complexType>
+    </element>
+</schema>
+

Propchange: cxf/trunk/testutils/src/main/resources/wsdl/hello_world_types.xsd
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/trunk/testutils/src/main/resources/wsdl/hello_world_types.xsd
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Propchange: cxf/trunk/testutils/src/main/resources/wsdl/hello_world_types.xsd
------------------------------------------------------------------------------
    svn:mime-type = text/xml

Added: cxf/trunk/testutils/src/main/resources/wsdl/hello_world_types_include.xsd
URL: http://svn.apache.org/viewvc/cxf/trunk/testutils/src/main/resources/wsdl/hello_world_types_include.xsd?rev=1232564&view=auto
==============================================================================
--- cxf/trunk/testutils/src/main/resources/wsdl/hello_world_types_include.xsd (added)
+++ cxf/trunk/testutils/src/main/resources/wsdl/hello_world_types_include.xsd Tue Jan 17 20:37:31 2012
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements. See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership. The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License. You may obtain a copy of the License at
+ 
+  http://www.apache.org/licenses/LICENSE-2.0
+ 
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied. See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+<schema
+    xmlns="http://www.w3.org/2001/XMLSchema"
+    xmlns:x1="http://apache.org/hello_world/types"
+    targetNamespace="http://apache.org/hello_world/types"
+    elementFormDefault="qualified">
+
+    <element name="greetMe">
+        <complexType>
+            <sequence>
+                <element name="requestType" type="string"/>
+            </sequence>
+        </complexType>
+    </element>
+    <element name="greetMeResponse">
+        <complexType>
+            <sequence>
+                <element name="responseType" type="string"/>
+            </sequence>
+        </complexType>
+    </element>
+    <element name="pingMe">
+        <complexType/>
+    </element>
+    <element name="pingMeResponse">
+        <complexType/>
+    </element>
+    <element name="faultDetail">
+        <complexType>
+            <sequence>
+                <element name="minor" type="short" form="qualified" minOccurs="0"/>
+                <element name="major" type="short" form="qualified" minOccurs="0"/>
+            </sequence>
+        </complexType>
+    </element>
+</schema>
+

Propchange: cxf/trunk/testutils/src/main/resources/wsdl/hello_world_types_include.xsd
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/trunk/testutils/src/main/resources/wsdl/hello_world_types_include.xsd
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Propchange: cxf/trunk/testutils/src/main/resources/wsdl/hello_world_types_include.xsd
------------------------------------------------------------------------------
    svn:mime-type = text/xml