Author: sergeyb
Date: Fri Sep 30 12:02:27 2011
New Revision: 1177620
URL: http://svn.apache.org/viewvc?rev=1177620&view=rev
Log:
Merged revisions 1177618 via svnmerge from
https://svn.apache.org/repos/asf/cxf/trunk
........
r1177618 | sergeyb | 2011-09-30 12:57:31 +0100 (Fri, 30 Sep 2011) | 1 line
[CXF-3797] Fixing a bug to do with subresource locator parameter generation
plus few more improvements, thanks to Christos Fragoulides
........
Modified:
cxf/branches/2.4.x-fixes/ (props changed)
cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/codegen/SourceGenerator.java
cxf/branches/2.4.x-fixes/tools/wadlto/jaxrs/src/test/resources/wadl/bookstore.xml
Propchange: cxf/branches/2.4.x-fixes/
------------------------------------------------------------------------------
svn:mergeinfo = /cxf/trunk:1177618
Propchange: cxf/branches/2.4.x-fixes/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.
Modified:
cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/codegen/SourceGenerator.java
URL:
http://svn.apache.org/viewvc/cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/codegen/SourceGenerator.java?rev=1177620&r1=1177619&r2=1177620&view=diff
==============================================================================
---
cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/codegen/SourceGenerator.java
(original)
+++
cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/codegen/SourceGenerator.java
Fri Sep 30 12:02:27 2011
@@ -104,6 +104,7 @@ public class SourceGenerator {
private static final Map<String, Class<?>> HTTP_METHOD_ANNOTATIONS;
private static final Map<String, Class<?>> PARAM_ANNOTATIONS;
+ private static final Set<String> RESOURCE_LEVEL_PARAMS;
static {
HTTP_METHOD_ANNOTATIONS = new HashMap<String, Class<?>>();
@@ -119,6 +120,10 @@ public class SourceGenerator {
PARAM_ANNOTATIONS.put("header", HeaderParam.class);
PARAM_ANNOTATIONS.put("query", QueryParam.class);
PARAM_ANNOTATIONS.put("matrix", MatrixParam.class);
+
+ RESOURCE_LEVEL_PARAMS = new HashSet<String>();
+ RESOURCE_LEVEL_PARAMS.add("template");
+ RESOURCE_LEVEL_PARAMS.add("matrix");
}
private Comparator<String> importsComparator;
@@ -254,7 +259,7 @@ public class SourceGenerator {
GrammarInfo gInfoBase = generateSchemaCodeAndInfo(refApp,
typeClassNames, srcDir);
if (gInfoBase != null) {
gInfo.getElementTypeMap().putAll(gInfoBase.getElementTypeMap());
- gInfo.getNsMap().putAll(gInfo.getNsMap());
+ gInfo.getNsMap().putAll(gInfoBase.getNsMap());
}
return getResourceElement(refApp, resElement, gInfo,
typeClassNames,
"#" + wadlRef.getFragment(), srcDir);
@@ -512,8 +517,8 @@ public class SourceGenerator {
ContextInfo info,
boolean isRoot,
String currentPath) {
- Element resourceEl = "resource".equals(methodEl.getLocalName())
- ? methodEl : (Element)methodEl.getParentNode();
+ boolean isResourceElement = "resource".equals(methodEl.getLocalName());
+ Element resourceEl = isResourceElement ? methodEl :
(Element)methodEl.getParentNode();
String methodName = methodEl.getAttribute("name");
String methodNameLowerCase = methodName.toLowerCase();
@@ -576,9 +581,10 @@ public class SourceGenerator {
}
sbCode.append("(");
- List<Element> inParamElements = new LinkedList<Element>();
- inParamElements.addAll(DOMUtils.getChildrenWithName(resourceEl,
-
WadlGenerator.WADL_NS, "param"));
+
+ List<Element> inParamElements = getParameters(resourceEl,
+ !isRoot && !isResourceElement &&
resourceEl.getAttribute("id").length() > 0);
+
writeRequestTypes(firstRequestEl, inParamElements, sbCode, imports,
info);
sbCode.append(")");
if (info.isInterfaceGenerated()) {
@@ -589,6 +595,20 @@ public class SourceGenerator {
sbCode.append(getLineSep()).append(getLineSep());
}
+ private List<Element> getParameters(Element resourceEl, boolean
isSubresourceMethod) {
+ List<Element> inParamElements = new LinkedList<Element>();
+ List<Element> allParamElements =
DOMUtils.getChildrenWithName(resourceEl,
+ WadlGenerator.WADL_NS, "param");
+ for (Element el : allParamElements) {
+ if (isSubresourceMethod &&
RESOURCE_LEVEL_PARAMS.contains(el.getAttribute("style"))) {
+ continue;
+ }
+ inParamElements.add(el);
+ }
+ return inParamElements;
+ }
+
+
private String possiblyConvertNamespaceURI(String nsURI, boolean
expandedQName) {
return expandedQName ? getPackageFromNamespace(nsURI) : nsURI;
}
@@ -686,19 +706,16 @@ public class SourceGenerator {
formParamsAvailable = currentSize < inParamEls.size();
}
- if (form && !formParamsAvailable) {
- addImport(imports, MultivaluedMap.class.getName());
- sbCode.append("MultivaluedMap map");
- }
for (int i = 0; i < inParamEls.size(); i++) {
Element paramEl = inParamEls.get(i);
-
+ Class<?> paramAnn =
PARAM_ANNOTATIONS.get(paramEl.getAttribute("style"));
+ if (paramAnn == QueryParam.class && form) {
+ paramAnn = FormParam.class;
+ }
String name = paramEl.getAttribute("name");
if (writeAnnotations(info.isInterfaceGenerated())) {
- Class<?> paramAnnotation = form ? FormParam.class
- : PARAM_ANNOTATIONS.get(paramEl.getAttribute("style"));
- writeAnnotation(sbCode, imports, paramAnnotation, name, false,
false);
+ writeAnnotation(sbCode, imports, paramAnn, name, false, false);
sbCode.append(" ");
}
String type = getPrimitiveType(paramEl);
@@ -714,24 +731,30 @@ public class SourceGenerator {
}
}
}
+ String elementParamType = null;
+ String elementParamName = null;
if (!form) {
- String elementName = null;
-
List<Element> repElements = requestEl != null
? DOMUtils.getChildrenWithName(requestEl,
WadlGenerator.WADL_NS, "representation")
: CastUtils.cast(Collections.emptyList(), Element.class);
if (repElements.size() > 0) {
- elementName = getElementRefName(repElements,
info.getTypeClassNames(),
+ elementParamType = getElementRefName(repElements,
info.getTypeClassNames(),
info.getGrammarInfo(), imports);
- }
- if (elementName != null) {
- if (inParamEls.size() > 0) {
- sbCode.append(", ");
+ if (elementParamType != null) {
+ elementParamName = elementParamType.toLowerCase();
}
- sbCode.append(elementName).append("
").append(elementName.toLowerCase());
}
+ } else if (!formParamsAvailable) {
+ addImport(imports, MultivaluedMap.class.getName());
+ elementParamType = MultivaluedMap.class.getSimpleName();
+ elementParamName = "map";
+ }
+ if (elementParamType != null) {
+ if (inParamEls.size() > 0) {
+ sbCode.append(", ");
+ }
+ sbCode.append(elementParamType).append("
").append(elementParamName);
}
-
}
private String getPrimitiveType(Element paramEl) {
Modified:
cxf/branches/2.4.x-fixes/tools/wadlto/jaxrs/src/test/resources/wadl/bookstore.xml
URL:
http://svn.apache.org/viewvc/cxf/branches/2.4.x-fixes/tools/wadlto/jaxrs/src/test/resources/wadl/bookstore.xml?rev=1177620&r1=1177619&r2=1177620&view=diff
==============================================================================
---
cxf/branches/2.4.x-fixes/tools/wadlto/jaxrs/src/test/resources/wadl/bookstore.xml
(original)
+++
cxf/branches/2.4.x-fixes/tools/wadlto/jaxrs/src/test/resources/wadl/bookstore.xml
Fri Sep 30 12:02:27 2011
@@ -219,6 +219,13 @@
<resource path="/recursive"
id="org.apache.cxf.jaxrs.model.wadl.FormInterface"/>
<resource path="/c">
<resource path="/formSub"
id="org.apache.cxf.jaxrs.model.wadl.FormInterface2">
+ <param name="formid" style="template" type="xs:int"/>
+ <method name="POST" id="formSub">
+ <request>
+ <representation
mediaType="application/x-www-form-urlencoded"/>
+ </request>
+ <response status="204"></response>
+ </method>
<resource path="/recursive"
id="org.apache.cxf.jaxrs.model.wadl.FormInterface"/>
<resource path="/subform1">
<method name="POST" id="form1">
@@ -231,6 +238,7 @@
</resource>
</resource>
<resource path="/form1">
+ <param name="formid" style="template" type="xs:int"/>
<method name="POST" id="form1">
<request>
<representation mediaType="application/x-www-form-urlencoded"/>