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 5D225F892 for ; Thu, 4 Apr 2013 09:58:28 +0000 (UTC) Received: (qmail 25882 invoked by uid 500); 4 Apr 2013 09:58:27 -0000 Delivered-To: apmail-cxf-commits-archive@cxf.apache.org Received: (qmail 25757 invoked by uid 500); 4 Apr 2013 09:58:27 -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 25741 invoked by uid 99); 4 Apr 2013 09:58:26 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 04 Apr 2013 09:58:26 +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; Thu, 04 Apr 2013 09:58:25 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id E8CC023889E0; Thu, 4 Apr 2013 09:58:04 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1464412 - in /cxf/branches/2.5.x-fixes: ./ rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/wadl/ systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/ systests/jaxr... Date: Thu, 04 Apr 2013 09:58:04 -0000 To: commits@cxf.apache.org From: sergeyb@apache.org X-Mailer: svnmailer-1.0.8-patched Message-Id: <20130404095804.E8CC023889E0@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: sergeyb Date: Thu Apr 4 09:58:04 2013 New Revision: 1464412 URL: http://svn.apache.org/r1464412 Log: Merged revisions 1464411 via svnmerge from https://svn.apache.org/repos/asf/cxf/branches/2.6.x-fixes ................ r1464411 | sergeyb | 2013-04-04 12:54:07 +0300 (Thu, 04 Apr 2013) | 20 lines Merged revisions 1464314 via svnmerge from https://svn.apache.org/repos/asf/cxf/branches/2.7.x-fixes ................ r1464314 | sergeyb | 2013-04-04 10:28:15 +0300 (Thu, 04 Apr 2013) | 13 lines Merged revisions 1464017,1464302 via svnmerge from https://svn.apache.org/repos/asf/cxf/trunk ........ r1464017 | sergeyb | 2013-04-03 16:55:28 +0300 (Wed, 03 Apr 2013) | 1 line [CXF-4924] Initial update WADLGenerator to support the retrieval of the documents containing the referenced resource_types ........ r1464302 | sergeyb | 2013-04-04 10:09:14 +0300 (Thu, 04 Apr 2013) | 1 line [CXF-4924] Renaming the test resources to make it simpler to merge to 2.7.x ........ ................ ................ Added: cxf/branches/2.5.x-fixes/systests/jaxrs/src/test/resources/wadl/bookstoreImportResource.wadl - copied unchanged from r1464411, cxf/branches/2.6.x-fixes/systests/jaxrs/src/test/resources/wadl/bookstoreImportResource.wadl cxf/branches/2.5.x-fixes/systests/jaxrs/src/test/resources/wadl/bookstoreImportResourceType.wadl - copied unchanged from r1464411, cxf/branches/2.6.x-fixes/systests/jaxrs/src/test/resources/wadl/bookstoreImportResourceType.wadl Modified: cxf/branches/2.5.x-fixes/ (props changed) cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/RequestPreprocessor.java cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/wadl/WadlGenerator.java cxf/branches/2.5.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerSpringBookTest.java cxf/branches/2.5.x-fixes/systests/jaxrs/src/test/resources/jaxrs/WEB-INF/beans.xml Propchange: cxf/branches/2.5.x-fixes/ ------------------------------------------------------------------------------ --- svn:mergeinfo (added) +++ svn:mergeinfo Thu Apr 4 09:58:04 2013 @@ -0,0 +1,3 @@ +/cxf/branches/2.6.x-fixes:1464411 +/cxf/branches/2.7.x-fixes:1464314 +/cxf/trunk:1464017,1464302 Propchange: cxf/branches/2.5.x-fixes/ ------------------------------------------------------------------------------ Binary property 'svnmerge-integrated' - no diff available. Modified: cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/RequestPreprocessor.java URL: http://svn.apache.org/viewvc/cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/RequestPreprocessor.java?rev=1464412&r1=1464411&r2=1464412&view=diff ============================================================================== --- cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/RequestPreprocessor.java (original) +++ cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/RequestPreprocessor.java Thu Apr 4 09:58:04 2013 @@ -45,7 +45,8 @@ public class RequestPreprocessor { private static final String CTYPE_QUERY = "_ctype"; private static final String METHOD_QUERY = "_method"; private static final String METHOD_HEADER = "X-HTTP-Method-Override"; - + private static final String SCHEMA_EXTENSION = ".xsd"; + private static final String WADL_EXTENSION = ".wadl"; private static final Map SHORTCUTS; static { @@ -203,7 +204,8 @@ public class RequestPreprocessor { if (baseAddress.equals(requestURI)) { return handleMetadataRequest(m); } - } else if (originalRequestURI != null && originalRequestURI.endsWith(".xsd")) { + } else if (originalRequestURI != null && (originalRequestURI.endsWith(SCHEMA_EXTENSION) + || originalRequestURI.endsWith(WADL_EXTENSION))) { // trying WADLGenerator which may be caching schema resources won't // interfere with custom schema handlers if any return handleMetadataRequest(m); Modified: cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/wadl/WadlGenerator.java URL: http://svn.apache.org/viewvc/cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/wadl/WadlGenerator.java?rev=1464412&r1=1464411&r2=1464412&view=diff ============================================================================== --- cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/wadl/WadlGenerator.java (original) +++ cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/wadl/WadlGenerator.java Thu Apr 4 09:58:04 2013 @@ -138,7 +138,7 @@ public class WadlGenerator implements Re private List externalSchemaLinks; private Map> externalQnamesMap; - private ConcurrentHashMap schemaLocationMap = + private ConcurrentHashMap docLocationMap = new ConcurrentHashMap(); private ElementQNameResolver resolver; @@ -173,13 +173,13 @@ public class WadlGenerator implements Re UriInfo ui = new UriInfoImpl(m); if (!ui.getQueryParameters().containsKey(WADL_QUERY)) { - if (!schemaLocationMap.isEmpty()) { + if (!docLocationMap.isEmpty()) { String path = ui.getPath(false); if (path.startsWith("/") && path.length() > 0) { path = path.substring(1); } - if (schemaLocationMap.containsKey(path)) { - return getExistingSchema(m, ui, path); + if (docLocationMap.containsKey(path)) { + return getExistingResource(m, ui, path); } } return null; @@ -860,15 +860,21 @@ public class WadlGenerator implements Re WadlGenerator.WADL_NS, "grammars"); if (grammarEls.size() == 1) { - handleSchemaRefs(DOMUtils.getChildrenWithName(grammarEls.get(0), + handleExistingDocRefs(DOMUtils.getChildrenWithName(grammarEls.get(0), WadlGenerator.WADL_NS, "include"), "href", loc, "", m, ui); } - List resourceEls = DOMUtils.getChildrenWithName(appEl, + List resourcesEls = DOMUtils.getChildrenWithName(appEl, WadlGenerator.WADL_NS, "resources"); - if (resourceEls.size() == 1) { - DOMUtils.setAttribute(resourceEls.get(0), "base", getBaseURI(m, ui)); + if (resourcesEls.size() == 1) { + DOMUtils.setAttribute(resourcesEls.get(0), "base", getBaseURI(m, ui)); + + List resourceEls = DOMUtils.getChildrenWithName(resourcesEls.get(0), + WadlGenerator.WADL_NS, + "resource"); + handleExistingDocRefs(resourceEls, "type", loc, "", m, ui); + return Response.ok().type(mt).entity(new DOMSource(appEl)).build(); } @@ -882,18 +888,34 @@ public class WadlGenerator implements Re } //TODO: deal with caching later on - public Response getExistingSchema(Message m, UriInfo ui, String href) { - String loc = schemaLocationMap.get(href); + public Response getExistingResource(Message m, UriInfo ui, String href) { + String loc = docLocationMap.get(href); Endpoint ep = m.getExchange().get(Endpoint.class); if (ep != null && loc != null) { try { + int fragmentIndex = loc.lastIndexOf("#"); + if (fragmentIndex != -1) { + loc = loc.substring(0, fragmentIndex); + } InputStream is = ResourceUtils.getResourceStream(loc, (Bus)ep.get(Bus.class.getName())); if (is != null) { Element docEl = DOMUtils.readXml(is).getDocumentElement(); - handleSchemaRefs(DOMUtils.getChildrenWithName(docEl, - XmlSchemaConstants.XSD_NAMESPACE_URI, "import"), "schemaLocation", loc, href, m, ui); - handleSchemaRefs(DOMUtils.getChildrenWithName(docEl, - XmlSchemaConstants.XSD_NAMESPACE_URI, "include"), "schemaLocation", loc, href, m, ui); + if (fragmentIndex != -1) { + List grammarEls = DOMUtils.getChildrenWithName(docEl, + WadlGenerator.WADL_NS, + "grammars"); + if (grammarEls.size() == 1) { + handleExistingDocRefs(DOMUtils.getChildrenWithName(grammarEls.get(0), + WadlGenerator.WADL_NS, "include"), "href", loc, href, m, ui); + } + } else { + handleExistingDocRefs(DOMUtils.getChildrenWithName(docEl, + XmlSchemaConstants.XSD_NAMESPACE_URI, "import"), "schemaLocation", loc, href, m, ui); + handleExistingDocRefs(DOMUtils.getChildrenWithName(docEl, + XmlSchemaConstants.XSD_NAMESPACE_URI, "include"), "schemaLocation", loc, href, m, ui); + } + + return Response.ok().type(MediaType.APPLICATION_XML_TYPE).entity( new DOMSource(docEl)).build(); } @@ -905,7 +927,7 @@ public class WadlGenerator implements Re return null; } - private void handleSchemaRefs(List schemaRefEls, String attrName, + private void handleExistingDocRefs(List elements, String attrName, String parentDocLoc, String parentRef, Message m, UriInfo ui) { int index = parentDocLoc.lastIndexOf('/'); parentDocLoc = index == -1 ? parentDocLoc : parentDocLoc.substring(0, index + 1); @@ -913,13 +935,22 @@ public class WadlGenerator implements Re index = parentRef.lastIndexOf('/'); parentRef = index == -1 ? "" : parentRef.substring(0, index + 1); - for (Element schemaRefEl : schemaRefEls) { - String href = schemaRefEl.getAttribute(attrName); - if (!StringUtils.isEmpty(href)) { + for (Element element : elements) { + String href = element.getAttribute(attrName); + String originalRef = href; + if (!StringUtils.isEmpty(href) && !href.startsWith("#")) { + int fragmentIndex = href.lastIndexOf("#"); + String fragment = null; + if (fragmentIndex != -1) { + fragment = href.substring(fragmentIndex + 1); + href = href.substring(0, fragmentIndex); + } + String actualRef = parentRef + href; - schemaLocationMap.put(actualRef, parentDocLoc + href); - URI schemaURI = UriBuilder.fromUri(getBaseURI(m, ui)).path(actualRef).build(); - DOMUtils.setAttribute(schemaRefEl, attrName, schemaURI.toString()); + docLocationMap.put(actualRef, parentDocLoc + originalRef); + UriBuilder ub = UriBuilder.fromUri(getBaseURI(m, ui)).path(actualRef).fragment(fragment); + URI schemaURI = ub.build(); + DOMUtils.setAttribute(element, attrName, schemaURI.toString()); } } } @@ -1371,7 +1402,7 @@ public class WadlGenerator implements Re if (href.startsWith("classpath:")) { int index = href.lastIndexOf('/'); href = index == -1 ? href.substring(9) : href.substring(index + 1); - schemaLocationMap.put(href, s); + docLocationMap.put(href, s); } externalSchemaLinks.add(URI.create(href)); } catch (Exception ex) { Modified: cxf/branches/2.5.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerSpringBookTest.java URL: http://svn.apache.org/viewvc/cxf/branches/2.5.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerSpringBookTest.java?rev=1464412&r1=1464411&r2=1464412&view=diff ============================================================================== --- cxf/branches/2.5.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerSpringBookTest.java (original) +++ cxf/branches/2.5.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerSpringBookTest.java Thu Apr 4 09:58:04 2013 @@ -103,10 +103,18 @@ public class JAXRSClientServerSpringBook @Test public void testGetWadlFromWadlLocation() throws Exception { String address = "http://localhost:" + PORT + "/the/generated"; - checkWadlResourcesInfo(address, address + "/bookstore", "/schemas/book.xsd", 1); - + List resources = + checkWadlResourcesInfo(address, address + "/bookstore", "/schemas/book.xsd", 2); + assertEquals("", resources.get(0).getAttribute("type")); + String type = resources.get(1).getAttribute("type"); + String resourceTypeAddress = address + "/bookstoreImportResourceType.wadl#bookstoreType"; + assertEquals(resourceTypeAddress, type); + checkSchemas(address, "/schemas/book.xsd", "/schemas/chapter.xsd", "include"); checkSchemas(address, "/schemas/chapter.xsd", null, null); + + // check resource type resource + checkWadlResourcesType(address, resourceTypeAddress, "/schemas/book.xsd"); } @Test @@ -138,7 +146,31 @@ public class JAXRSClientServerSpringBook } - private void checkWadlResourcesInfo(String baseURI, String requestURI, + private void checkWadlResourcesType(String baseURI, String requestTypeURI, String schemaRef) throws Exception { + WebClient client = WebClient.create(requestTypeURI); + WebClient.getConfig(client).getHttpConduit().getClient().setReceiveTimeout(1000000); + + Document doc = DOMUtils.readXml(new InputStreamReader(client.get(InputStream.class), "UTF-8")); + Element root = doc.getDocumentElement(); + assertEquals(WadlGenerator.WADL_NS, root.getNamespaceURI()); + assertEquals("application", root.getLocalName()); + List grammarEls = DOMUtils.getChildrenWithName(root, + WadlGenerator.WADL_NS, "grammars"); + assertEquals(1, grammarEls.size()); + List includeEls = DOMUtils.getChildrenWithName(grammarEls.get(0), + WadlGenerator.WADL_NS, "include"); + assertEquals(1, includeEls.size()); + String href = includeEls.get(0).getAttribute("href"); + assertEquals(baseURI + schemaRef, href); + List resourcesEls = DOMUtils.getChildrenWithName(root, + WadlGenerator.WADL_NS, "resources"); + assertEquals(0, resourcesEls.size()); + List resourceTypeEls = + DOMUtils.getChildrenWithName(root, WadlGenerator.WADL_NS, "resource_type"); + assertEquals(1, resourceTypeEls.size()); + } + + private List checkWadlResourcesInfo(String baseURI, String requestURI, String schemaRef, int size) throws Exception { WebClient client = WebClient.create(requestURI + "?_wadl&_type=xml"); Document doc = DOMUtils.readXml(new InputStreamReader(client.get(InputStream.class), "UTF-8")); @@ -162,6 +194,8 @@ public class JAXRSClientServerSpringBook DOMUtils.getChildrenWithName(resourcesEl, WadlGenerator.WADL_NS, "resource"); assertEquals(size, resourceEls.size()); + return resourceEls; + } @Test @@ -177,7 +211,6 @@ public class JAXRSClientServerSpringBook String endpointAddress = "http://localhost:" + PORT + "/the/thebooks/bookstore/semicolon%3B"; WebClient client = WebClient.create(endpointAddress); - WebClient.getConfig(client).getHttpConduit().getClient().setReceiveTimeout(1000000); Book book = client.get(Book.class); assertEquals(333L, book.getId()); assertEquals(";", book.getName()); Modified: cxf/branches/2.5.x-fixes/systests/jaxrs/src/test/resources/jaxrs/WEB-INF/beans.xml URL: http://svn.apache.org/viewvc/cxf/branches/2.5.x-fixes/systests/jaxrs/src/test/resources/jaxrs/WEB-INF/beans.xml?rev=1464412&r1=1464411&r2=1464412&view=diff ============================================================================== --- cxf/branches/2.5.x-fixes/systests/jaxrs/src/test/resources/jaxrs/WEB-INF/beans.xml (original) +++ cxf/branches/2.5.x-fixes/systests/jaxrs/src/test/resources/jaxrs/WEB-INF/beans.xml Thu Apr 4 09:58:04 2013 @@ -203,7 +203,7 @@ http://cxf.apache.org/schemas/core.xsd"> + docLocation="classpath:/wadl/bookstoreImportResource.wadl">