Update wadl generator to use the prefix that the JAXB implementation chose for the targetNamespace.
Project: http://git-wip-us.apache.org/repos/asf/cxf/repo Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/364ef774 Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/364ef774 Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/364ef774 Branch: refs/heads/master Commit: 364ef7745af0e0d89ed65ec4d199978f595e6526 Parents: 3a662d4 Author: Daniel Kulp <[email protected]> Authored: Wed Mar 26 17:00:27 2014 -0400 Committer: Daniel Kulp <[email protected]> Committed: Wed Mar 26 17:00:27 2014 -0400 ---------------------------------------------------------------------- .../cxf/jaxrs/model/wadl/WadlGenerator.java | 11 ++++++++--- .../cxf/jaxrs/model/wadl/WadlGeneratorTest.java | 20 ++++++++++++++------ 2 files changed, 22 insertions(+), 9 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cxf/blob/364ef774/rt/rs/description/src/main/java/org/apache/cxf/jaxrs/model/wadl/WadlGenerator.java ---------------------------------------------------------------------- diff --git a/rt/rs/description/src/main/java/org/apache/cxf/jaxrs/model/wadl/WadlGenerator.java b/rt/rs/description/src/main/java/org/apache/cxf/jaxrs/model/wadl/WadlGenerator.java index 64f0665..a773a9f 100644 --- a/rt/rs/description/src/main/java/org/apache/cxf/jaxrs/model/wadl/WadlGenerator.java +++ b/rt/rs/description/src/main/java/org/apache/cxf/jaxrs/model/wadl/WadlGenerator.java @@ -1124,9 +1124,14 @@ public class WadlGenerator implements ContainerRequestFilter { ElementQNameResolver theResolver = createElementQNameResolver(context); String tns = doc.getDocumentElement().getAttribute("targetNamespace"); - String tnsDecl = - doc.getDocumentElement().getAttribute("xmlns:tns"); - String tnsPrefix = tnsDecl != null && tnsDecl.equals(tns) ? "tns:" : ""; + String tnsPrefix = doc.getDocumentElement().lookupPrefix(tns); + if (tnsPrefix == null) { + String tnsDecl = + doc.getDocumentElement().getAttribute("xmlns:tns"); + tnsPrefix = tnsDecl != null && tnsDecl.equals(tns) ? "tns:" : ""; + } else { + tnsPrefix += ":"; + } if (supportJaxbXmlType) { for (Class<?> cls : resourceTypes.getAllTypes().keySet()) { http://git-wip-us.apache.org/repos/asf/cxf/blob/364ef774/rt/rs/description/src/test/java/org/apache/cxf/jaxrs/model/wadl/WadlGeneratorTest.java ---------------------------------------------------------------------- diff --git a/rt/rs/description/src/test/java/org/apache/cxf/jaxrs/model/wadl/WadlGeneratorTest.java b/rt/rs/description/src/test/java/org/apache/cxf/jaxrs/model/wadl/WadlGeneratorTest.java index b0bcf18..5362003 100644 --- a/rt/rs/description/src/test/java/org/apache/cxf/jaxrs/model/wadl/WadlGeneratorTest.java +++ b/rt/rs/description/src/test/java/org/apache/cxf/jaxrs/model/wadl/WadlGeneratorTest.java @@ -401,14 +401,24 @@ public class WadlGeneratorTest extends Assert { return false; } + private boolean checkTypeName(Element el, String typeName, String name) { + String pfx = ""; + String tn = typeName; + if (tn.contains(":")) { + pfx = tn.substring(0, tn.indexOf(':')); + tn = tn.substring(tn.indexOf(':') + 1); + } + pfx = el.lookupNamespaceURI(pfx); + + return tn.equals(name) && pfx.length() > 5; + } + private boolean checkElement(List<Element> els, String name, String localTypeName) { for (Element e : els) { if (name.equals(e.getAttribute("name"))) { String type = e.getAttribute("type"); if (!StringUtils.isEmpty(type)) { - String expectedType1 = "tns:" + localTypeName; - String expectedType2 = "os:" + localTypeName; - if (type.equals(expectedType1) || type.equals(expectedType2)) { + if (checkTypeName(e, type, localTypeName)) { return true; } } else if ("books".equals(name) || "thebook2s".equals(name)) { @@ -423,9 +433,7 @@ public class WadlGeneratorTest extends Assert { (Element)seqElement.getElementsByTagNameNS(Constants.URI_2001_SCHEMA_XSD, "element").item(0); String ref = xsElement.getAttribute("ref"); - String expectedRef = thebooks2 ? "tns:thebook2" : "tns:thebook"; - String expectedRef2 = thebooks2 ? "os:thebook2" : "os:thebook"; - if (ref.equals(expectedRef) || ref.equals(expectedRef2)) { + if (checkTypeName(e, ref, thebooks2 ? "thebook2" : "thebook")) { return true; } }
