Return-Path: X-Original-To: apmail-cxf-commits-archive@www.apache.org Delivered-To: apmail-cxf-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 664CF9E30 for ; Tue, 17 Jan 2012 20:38:02 +0000 (UTC) Received: (qmail 47649 invoked by uid 500); 17 Jan 2012 20:38:01 -0000 Delivered-To: apmail-cxf-commits-archive@cxf.apache.org Received: (qmail 47549 invoked by uid 500); 17 Jan 2012 20:38:01 -0000 Mailing-List: contact commits-help@cxf.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@cxf.apache.org Delivered-To: mailing list commits@cxf.apache.org Received: (qmail 47536 invoked by uid 99); 17 Jan 2012 20:38:01 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 17 Jan 2012 20:38:01 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 17 Jan 2012 20:37:54 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id AFDD423889B8 for ; Tue, 17 Jan 2012 20:37:32 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: 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... Date: Tue, 17 Jan 2012 20:37:32 -0000 To: commits@cxf.apache.org From: dkulp@apache.org X-Mailer: svnmailer-1.0.8-patched Message-Id: <20120117203732.AFDD423889B8@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org 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 schemas = svc.getServiceInfos().get(0).getSchemas(); + SchemaCollection schemas = svc.getServiceInfos().get(0).getXmlSchemaCollection(); SchemaCompiler compiler = JAXBUtils.createSchemaCompilerWithDefaultAllocator(new HashSet()); @@ -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 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 serviceList, + SchemaCollection schemaCollection) { + + Map done = new HashMap(); + Map notDone = new HashMap(); + 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 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 done, + Map notDone) { + List impElemList = DOMUtils.findAllElementsByTagNameNS(element, + "http://www.w3.org/2001/XMLSchema", + "import"); + List 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 ns = new ArrayList(); + + 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"> + + + + 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"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + xmlns="http://www.w3.org/2001/XMLSchema"> + 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 @@ + + + + + + + + + + + + + + + + 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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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