You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by se...@apache.org on 2015/02/23 16:54:50 UTC
cxf git commit: [CXF-6264] Prototyping Swagger to UserModel converters
Repository: cxf
Updated Branches:
refs/heads/master 2cfa9011a -> 992e3d604
[CXF-6264] Prototyping Swagger to UserModel converters
Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/992e3d60
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/992e3d60
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/992e3d60
Branch: refs/heads/master
Commit: 992e3d604089e02863a24112f2cbd1db4cf09591
Parents: 2cfa901
Author: Sergey Beryozkin <sb...@talend.com>
Authored: Mon Feb 23 15:54:34 2015 +0000
Committer: Sergey Beryozkin <sb...@talend.com>
Committed: Mon Feb 23 15:54:34 2015 +0000
----------------------------------------------------------------------
.../apache/cxf/jaxrs/model/UserResource.java | 9 +-
rt/rs/description/pom.xml | 12 +
.../apache/cxf/jaxrs/swagger/SwaggerUtils.java | 233 +++++++++++++++++++
.../cxf/jaxrs/model/wadl/BookChapters.java | 37 +++
.../apache/cxf/jaxrs/model/wadl/Chapter.java | 58 +++++
.../jaxrs/model/wadl/WadlGeneratorJsonTest.java | 137 +++++++++++
.../cxf/jaxrs/swagger/SwaggerUtilsTest.java | 70 ++++++
.../description/src/test/resources/json.schema | 27 +++
.../src/test/resources/swagger12.json | 27 +++
.../src/test/resources/swagger20.json | 31 +++
rt/rs/extensions/providers/pom.xml | 6 -
.../json/JsonMapObjectReaderWriter.java | 2 +-
.../jaxrs/provider/ProviderFactoryAllTest.java | 6 +-
.../jaxrs/provider/json/WadlGeneratorTest.java | 138 -----------
.../apache/cxf/jaxrs/resources/BookStore.java | 37 ---
.../org/apache/cxf/jaxrs/resources/Chapter.java | 59 -----
.../providers/src/test/resources/json.schema | 27 ---
...AXRSClientServerUserResourceDefaultTest.java | 6 +-
.../cxf/tools/wadlto/jaxrs/SourceGenerator.java | 2 +-
19 files changed, 646 insertions(+), 278 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cxf/blob/992e3d60/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/UserResource.java
----------------------------------------------------------------------
diff --git a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/UserResource.java b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/UserResource.java
index c8d1ec3..39e2417 100644
--- a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/UserResource.java
+++ b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/UserResource.java
@@ -23,6 +23,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import org.apache.cxf.common.util.StringUtils;
import org.apache.cxf.helpers.CastUtils;
public class UserResource {
@@ -59,13 +60,13 @@ public class UserResource {
}
public void setConsumes(String types) {
- if (!"".equals(types)) {
+ if (!StringUtils.isEmpty(types)) {
consumesTypes = types;
}
}
public void setProduces(String types) {
- if (!"".equals(types)) {
+ if (!StringUtils.isEmpty(types)) {
producesTypes = types;
}
}
@@ -75,7 +76,7 @@ public class UserResource {
}
public void setName(String name) {
- if (!"".equals(name)) {
+ if (!StringUtils.isEmpty(name)) {
className = name;
}
}
@@ -85,7 +86,7 @@ public class UserResource {
}
public void setPath(String path) {
- if (!"".equals(path)) {
+ if (!StringUtils.isEmpty(path)) {
pathValue = path;
}
}
http://git-wip-us.apache.org/repos/asf/cxf/blob/992e3d60/rt/rs/description/pom.xml
----------------------------------------------------------------------
diff --git a/rt/rs/description/pom.xml b/rt/rs/description/pom.xml
index 4d40eab..49bf4d8 100644
--- a/rt/rs/description/pom.xml
+++ b/rt/rs/description/pom.xml
@@ -66,6 +66,18 @@
</exclusions>
</dependency>
<dependency>
+ <groupId>org.apache.cxf</groupId>
+ <artifactId>cxf-rt-rs-extension-providers</artifactId>
+ <version>${project.version}</version>
+ <scope>provided</scope>
+ <optional>true</optional>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.jettison</groupId>
+ <artifactId>jettison</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
<groupId>org.easymock</groupId>
<artifactId>easymock</artifactId>
<scope>test</scope>
http://git-wip-us.apache.org/repos/asf/cxf/blob/992e3d60/rt/rs/description/src/main/java/org/apache/cxf/jaxrs/swagger/SwaggerUtils.java
----------------------------------------------------------------------
diff --git a/rt/rs/description/src/main/java/org/apache/cxf/jaxrs/swagger/SwaggerUtils.java b/rt/rs/description/src/main/java/org/apache/cxf/jaxrs/swagger/SwaggerUtils.java
new file mode 100644
index 0000000..7532361
--- /dev/null
+++ b/rt/rs/description/src/main/java/org/apache/cxf/jaxrs/swagger/SwaggerUtils.java
@@ -0,0 +1,233 @@
+/**
+ * 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.
+ */
+package org.apache.cxf.jaxrs.swagger;
+
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.logging.Logger;
+
+import org.apache.cxf.Bus;
+import org.apache.cxf.BusFactory;
+import org.apache.cxf.common.classloader.ClassLoaderUtils;
+import org.apache.cxf.common.logging.LogUtils;
+import org.apache.cxf.helpers.CastUtils;
+import org.apache.cxf.helpers.IOUtils;
+import org.apache.cxf.jaxrs.model.Parameter;
+import org.apache.cxf.jaxrs.model.ParameterType;
+import org.apache.cxf.jaxrs.model.UserOperation;
+import org.apache.cxf.jaxrs.model.UserResource;
+import org.apache.cxf.jaxrs.provider.json.JsonMapObjectReaderWriter;
+import org.apache.cxf.jaxrs.utils.ResourceUtils;
+
+public final class SwaggerUtils {
+ private static final Logger LOG = LogUtils.getL7dLogger(ResourceUtils.class);
+ private static final Map<String, String> SWAGGER_TYPE_MAP;
+ static {
+ SWAGGER_TYPE_MAP = new HashMap<String, String>();
+ SWAGGER_TYPE_MAP.put("string", "String");
+ SWAGGER_TYPE_MAP.put("integer", "long");
+ SWAGGER_TYPE_MAP.put("float", "float");
+ SWAGGER_TYPE_MAP.put("double", "double");
+ SWAGGER_TYPE_MAP.put("int", "int");
+ SWAGGER_TYPE_MAP.put("long", "long");
+ SWAGGER_TYPE_MAP.put("byte", "byte");
+ SWAGGER_TYPE_MAP.put("boolean", "boolean");
+ SWAGGER_TYPE_MAP.put("date", "java.util.Date");
+ SWAGGER_TYPE_MAP.put("dateTime", "java.util.Date");
+ SWAGGER_TYPE_MAP.put("File", "java.io.InputStream");
+ SWAGGER_TYPE_MAP.put("file", "java.io.InputStream");
+ }
+ private SwaggerUtils() {
+
+ }
+ public static UserResource getUserResource(String loc) {
+ return getUserResource(loc, BusFactory.getThreadDefaultBus());
+ }
+ public static UserResource getUserResource(String loc, Bus bus) {
+ try {
+ InputStream is = ResourceUtils.getResourceStream(loc, bus);
+ if (is == null) {
+ return null;
+ }
+ return getUserResourceFromJson(IOUtils.readStringFromStream(is));
+ } catch (Exception ex) {
+ LOG.warning("Problem with processing a user model at " + loc);
+ }
+ return null;
+ }
+ public static List<UserResource> getUserResourcesFromResourceObjects(List<String> jsonObjects) {
+ List<UserResource> resources = new ArrayList<UserResource>();
+ for (String json : jsonObjects) {
+ resources.add(getUserResourceFromJson(json));
+ }
+ return resources;
+ }
+ public static UserResource getUserResourceFromJson(String json) {
+ JsonMapObjectReaderWriter reader = new JsonMapObjectReaderWriter();
+ Map<String, Object> map = reader.fromJson(json);
+
+ if (map.containsKey("swaggerVersion")) {
+ return getUserResourceFromSwagger12(map);
+ } else {
+ return getUserResourceFromSwagger20(map);
+ }
+
+ }
+ private static UserResource getUserResourceFromSwagger20(Map<String, Object> map) {
+ UserResource ur = new UserResource();
+ String relativePath = (String)map.get("basePath");
+ ur.setPath(relativePath == null ? "/" : relativePath);
+
+ List<String> resourceProduces = CastUtils.cast((List<?>)map.get("produces"));
+ ur.setProduces(listToString(resourceProduces));
+
+ List<String> resourceConsumes = CastUtils.cast((List<?>)map.get("consumes"));
+ ur.setConsumes(listToString(resourceConsumes));
+
+ List<UserOperation> userOps = new LinkedList<UserOperation>();
+ Map<String, Map<String, Object>> paths = CastUtils.cast((Map<?, ?>)map.get("paths"));
+ for (Map.Entry<String, Map<String, Object>> pathEntry : paths.entrySet()) {
+
+ String operPath = pathEntry.getKey();
+
+ Map<String, Object> operations = pathEntry.getValue();
+ for (Map.Entry<String, Object> operEntry : operations.entrySet()) {
+ UserOperation userOp = new UserOperation();
+ userOp.setVerb(operEntry.getKey().toUpperCase());
+ userOp.setPath(operPath);
+
+ Map<String, Object> oper = CastUtils.cast((Map<?, ?>)operEntry.getValue());
+
+ userOp.setName((String)oper.get("operationId"));
+ List<String> opProduces = CastUtils.cast((List<?>)oper.get("produces"));
+ userOp.setProduces(listToString(opProduces));
+
+ List<String> opConsumes = CastUtils.cast((List<?>)oper.get("consumes"));
+ userOp.setConsumes(listToString(opConsumes));
+
+ List<Parameter> userOpParams = new LinkedList<Parameter>();
+ List<Map<String, Object>> params = CastUtils.cast((List<?>)oper.get("parameters"));
+ for (Map<String, Object> param : params) {
+ String name = (String)param.get("name");
+ //"query", "header", "path", "formData" or "body"
+ String paramType = (String)param.get("in");
+ ParameterType pType = "body".equals(paramType) ? ParameterType.REQUEST_BODY
+ : "formData".equals(paramType)
+ ? ParameterType.FORM : ParameterType.valueOf(paramType.toUpperCase());
+ Parameter userParam = new Parameter(pType, name);
+
+ setJavaType(userParam, (String)param.get("type"));
+
+ userOpParams.add(userParam);
+ }
+ if (!userOpParams.isEmpty()) {
+ userOp.setParameters(userOpParams);
+ }
+ userOps.add(userOp);
+ }
+ }
+ ur.setOperations(userOps);
+ return ur;
+ }
+ private static UserResource getUserResourceFromSwagger12(Map<String, Object> map) {
+ UserResource ur = new UserResource();
+ String relativePath = (String)map.get("resourcePath");
+ ur.setPath(relativePath == null ? "/" : relativePath);
+
+ List<String> resourceProduces = CastUtils.cast((List<?>)map.get("produces"));
+ ur.setProduces(listToString(resourceProduces));
+
+ List<String> resourceConsumes = CastUtils.cast((List<?>)map.get("consumes"));
+ ur.setConsumes(listToString(resourceConsumes));
+
+ List<UserOperation> userOps = new LinkedList<UserOperation>();
+ List<Map<String, Object>> apis = CastUtils.cast((List<?>)map.get("apis"));
+ for (Map<String, Object> api : apis) {
+ String operPath = (String)api.get("path");
+ if (relativePath != null && operPath.startsWith(relativePath)
+ && operPath.length() > relativePath.length()) {
+ // relative resource and operation paths overlap in Swagger 1.2
+ operPath = operPath.substring(relativePath.length());
+ }
+
+ List<Map<String, Object>> operations = CastUtils.cast((List<?>)api.get("operations"));
+ for (Map<String, Object> oper : operations) {
+ UserOperation userOp = new UserOperation();
+ userOp.setPath(operPath);
+ userOp.setName((String)oper.get("nickname"));
+ userOp.setVerb((String)oper.get("method"));
+
+ List<String> opProduces = CastUtils.cast((List<?>)oper.get("produces"));
+ userOp.setProduces(listToString(opProduces));
+
+ List<String> opConsumes = CastUtils.cast((List<?>)oper.get("consumes"));
+ userOp.setConsumes(listToString(opConsumes));
+
+ List<Parameter> userOpParams = new LinkedList<Parameter>();
+ List<Map<String, Object>> params = CastUtils.cast((List<?>)oper.get("parameters"));
+ for (Map<String, Object> param : params) {
+ String name = (String)param.get("name");
+ //"path", "query", "body", "header", "form"
+ String paramType = (String)param.get("paramType");
+ ParameterType pType = "body".equals(paramType)
+ ? ParameterType.REQUEST_BODY : ParameterType.valueOf(paramType.toUpperCase());
+ Parameter userParam = new Parameter(pType, name);
+ setJavaType(userParam, (String)param.get("type"));
+
+ userOpParams.add(userParam);
+ }
+ if (!userOpParams.isEmpty()) {
+ userOp.setParameters(userOpParams);
+ }
+ userOps.add(userOp);
+ }
+ }
+ ur.setOperations(userOps);
+ return ur;
+ }
+ private static void setJavaType(Parameter userParam, String typeName) {
+ String javaTypeName = SWAGGER_TYPE_MAP.get(typeName);
+ if (javaTypeName != null) {
+ try {
+ userParam.setJavaType(ClassLoaderUtils.loadClass(javaTypeName, SwaggerUtils.class));
+ } catch (Throwable t) {
+ // ignore - can be a reference to a JSON model class, etc
+ }
+ }
+
+ }
+ private static String listToString(List<String> list) {
+ if (list != null) {
+ StringBuilder sb = new StringBuilder();
+ for (String s : list) {
+ if (sb.length() > 0) {
+ sb.append(',');
+ }
+ sb.append(s);
+ }
+ return sb.toString();
+ } else {
+ return null;
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/cxf/blob/992e3d60/rt/rs/description/src/test/java/org/apache/cxf/jaxrs/model/wadl/BookChapters.java
----------------------------------------------------------------------
diff --git a/rt/rs/description/src/test/java/org/apache/cxf/jaxrs/model/wadl/BookChapters.java b/rt/rs/description/src/test/java/org/apache/cxf/jaxrs/model/wadl/BookChapters.java
new file mode 100644
index 0000000..c4f67a9
--- /dev/null
+++ b/rt/rs/description/src/test/java/org/apache/cxf/jaxrs/model/wadl/BookChapters.java
@@ -0,0 +1,37 @@
+/**
+ * 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.
+ */
+package org.apache.cxf.jaxrs.model.wadl;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+
+@Path("/bookstore/{id}")
+@Consumes({"application/xml", "application/json" })
+@Produces({"application/xml", "application/json" })
+public class BookChapters {
+
+ @GET
+ @Path("chapter")
+ public Chapter getChapter() {
+ return new Chapter(1);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/cxf/blob/992e3d60/rt/rs/description/src/test/java/org/apache/cxf/jaxrs/model/wadl/Chapter.java
----------------------------------------------------------------------
diff --git a/rt/rs/description/src/test/java/org/apache/cxf/jaxrs/model/wadl/Chapter.java b/rt/rs/description/src/test/java/org/apache/cxf/jaxrs/model/wadl/Chapter.java
new file mode 100644
index 0000000..15b7197
--- /dev/null
+++ b/rt/rs/description/src/test/java/org/apache/cxf/jaxrs/model/wadl/Chapter.java
@@ -0,0 +1,58 @@
+/**
+ * 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.
+ */
+package org.apache.cxf.jaxrs.model.wadl;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlType;
+
+import org.apache.cxf.jaxrs.ext.xml.XMLName;
+
+@XmlRootElement(name = "thechapter", namespace = "http://superbooks")
+@XmlType(name = "chapter", namespace = "http://superbooks")
+@Description("Chapter subresource")
+@XMLName(value = "{http://books}thesuperchapter")
+public class Chapter {
+
+ private int id;
+ public Chapter() {
+ }
+ public Chapter(int id) {
+ this.id = id;
+ }
+
+ @GET
+ @Path("/id")
+ @Produces({"application/xml", "application/json" })
+ @Description("Get the chapter")
+ public Chapter getIt() {
+ return this;
+ }
+
+ public void setId(int ident) {
+ id = ident;
+ }
+
+ public int getId() {
+ return id;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/cxf/blob/992e3d60/rt/rs/description/src/test/java/org/apache/cxf/jaxrs/model/wadl/WadlGeneratorJsonTest.java
----------------------------------------------------------------------
diff --git a/rt/rs/description/src/test/java/org/apache/cxf/jaxrs/model/wadl/WadlGeneratorJsonTest.java b/rt/rs/description/src/test/java/org/apache/cxf/jaxrs/model/wadl/WadlGeneratorJsonTest.java
new file mode 100644
index 0000000..cf36806
--- /dev/null
+++ b/rt/rs/description/src/test/java/org/apache/cxf/jaxrs/model/wadl/WadlGeneratorJsonTest.java
@@ -0,0 +1,137 @@
+/**
+ * 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.
+ */
+package org.apache.cxf.jaxrs.model.wadl;
+
+import java.io.ByteArrayOutputStream;
+import java.lang.annotation.Annotation;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.ws.rs.container.ContainerRequestContext;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+import org.w3c.dom.Document;
+
+import org.apache.cxf.endpoint.Endpoint;
+import org.apache.cxf.endpoint.EndpointImpl;
+import org.apache.cxf.jaxrs.JAXRSServiceImpl;
+import org.apache.cxf.jaxrs.impl.ContainerRequestContextImpl;
+import org.apache.cxf.jaxrs.impl.MetadataMap;
+import org.apache.cxf.jaxrs.model.ClassResourceInfo;
+import org.apache.cxf.jaxrs.provider.json.JSONProvider;
+import org.apache.cxf.jaxrs.utils.ResourceUtils;
+import org.apache.cxf.message.Exchange;
+import org.apache.cxf.message.ExchangeImpl;
+import org.apache.cxf.message.Message;
+import org.apache.cxf.message.MessageImpl;
+import org.apache.cxf.service.Service;
+import org.apache.cxf.service.model.BindingInfo;
+import org.apache.cxf.service.model.EndpointInfo;
+import org.apache.cxf.transport.servlet.ServletDestination;
+import org.easymock.EasyMock;
+import org.easymock.IMocksControl;
+
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+public class WadlGeneratorJsonTest extends Assert {
+
+ private IMocksControl control;
+
+ @Before
+ public void setUp() {
+ control = EasyMock.createNiceControl();
+ control.makeThreadSafe(true);
+ }
+
+ @Test
+ public void testWadlInJsonFormat() throws Exception {
+ ClassResourceInfo cri =
+ ResourceUtils.createClassResourceInfo(BookChapters.class, BookChapters.class, true, true);
+ final Message m = mockMessage("http://localhost:8080/baz", "/bookstore/1", WadlGenerator.WADL_QUERY, cri);
+ Map<String, List<String>> headers = new HashMap<String, List<String>>();
+ headers.put("Accept", Collections.singletonList("application/json"));
+ m.put(Message.PROTOCOL_HEADERS, headers);
+
+ WadlGenerator wg = new WadlGenerator() {
+ public void filter(ContainerRequestContext context) {
+ super.doFilter(context, m);
+ }
+ };
+ wg.setUseJaxbContextForQnames(false);
+ wg.setIgnoreMessageWriters(false);
+ wg.setExternalLinks(Collections.singletonList("json.schema"));
+
+ Response r = handleRequest(wg, m);
+ assertEquals("application/json",
+ r.getMetadata().getFirst("Content-Type").toString());
+
+ ByteArrayOutputStream os = new ByteArrayOutputStream();
+
+ new JSONProvider<Document>().writeTo(
+ (Document)r.getEntity(), Document.class, Document.class,
+ new Annotation[]{}, MediaType.APPLICATION_JSON_TYPE,
+ new MetadataMap<String, Object>(), os);
+ String s = os.toString();
+ String expected1 =
+ "{\"application\":{\"grammars\":{\"include\":{\"@href\":\"http://localhost:8080/baz"
+ + "/json.schema\"}},\"resources\":{\"@base\":\"http://localhost:8080/baz\","
+ + "\"resource\":{\"@path\":\"/bookstore/{id}\"";
+ assertTrue(s.startsWith(expected1));
+ String expected2 =
+ "\"response\":{\"representation\":[{\"@mediaType\":\"application/xml\"},"
+ + "{\"@element\":\"Chapter\",\"@mediaType\":\"application/json\"}]}";
+ assertTrue(s.contains(expected2));
+ }
+ private Response handleRequest(WadlGenerator wg, Message m) {
+ wg.filter(new ContainerRequestContextImpl(m, true, false));
+ return m.getExchange().get(Response.class);
+ }
+ private Message mockMessage(String baseAddress, String pathInfo, String query,
+ ClassResourceInfo cri) throws Exception {
+ Message m = new MessageImpl();
+ Exchange e = new ExchangeImpl();
+ e.put(Service.class, new JAXRSServiceImpl(Collections.singletonList(cri)));
+ m.setExchange(e);
+ control.reset();
+ ServletDestination d = control.createMock(ServletDestination.class);
+ EndpointInfo epr = new EndpointInfo();
+ epr.setAddress(baseAddress);
+ d.getEndpointInfo();
+ EasyMock.expectLastCall().andReturn(epr).anyTimes();
+
+ Endpoint endpoint = new EndpointImpl(null, null, epr);
+ e.put(Endpoint.class, endpoint);
+
+ e.setDestination(d);
+ BindingInfo bi = control.createMock(BindingInfo.class);
+ epr.setBinding(bi);
+ bi.getProperties();
+ EasyMock.expectLastCall().andReturn(Collections.emptyMap()).anyTimes();
+ m.put(Message.REQUEST_URI, pathInfo);
+ m.put(Message.QUERY_STRING, query);
+ m.put(Message.HTTP_REQUEST_METHOD, "GET");
+ control.replay();
+ return m;
+ }
+}
http://git-wip-us.apache.org/repos/asf/cxf/blob/992e3d60/rt/rs/description/src/test/java/org/apache/cxf/jaxrs/swagger/SwaggerUtilsTest.java
----------------------------------------------------------------------
diff --git a/rt/rs/description/src/test/java/org/apache/cxf/jaxrs/swagger/SwaggerUtilsTest.java b/rt/rs/description/src/test/java/org/apache/cxf/jaxrs/swagger/SwaggerUtilsTest.java
new file mode 100644
index 0000000..e9434e1
--- /dev/null
+++ b/rt/rs/description/src/test/java/org/apache/cxf/jaxrs/swagger/SwaggerUtilsTest.java
@@ -0,0 +1,70 @@
+/**
+ * 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.
+ */
+package org.apache.cxf.jaxrs.swagger;
+
+import org.apache.cxf.jaxrs.model.Parameter;
+import org.apache.cxf.jaxrs.model.ParameterType;
+import org.apache.cxf.jaxrs.model.UserOperation;
+import org.apache.cxf.jaxrs.model.UserResource;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+public class SwaggerUtilsTest extends Assert {
+
+ @Test
+ public void testConvertSwagger12ToUserResource() {
+ UserResource ur = SwaggerUtils.getUserResource("/swagger12.json");
+ assertNotNull(ur);
+ assertEquals("/hello", ur.getPath());
+ assertEquals(1, ur.getOperations().size());
+ UserOperation op = ur.getOperations().get(0);
+ assertEquals("helloSubject", op.getName());
+ assertEquals("/{subject}", op.getPath());
+ assertEquals("GET", op.getVerb());
+ assertEquals(1, op.getParameters().size());
+ Parameter param = op.getParameters().get(0);
+ assertEquals("subject", param.getName());
+ assertEquals(ParameterType.PATH, param.getType());
+ assertEquals(String.class, param.getJavaType());
+ }
+ @Test
+ public void testConvertSwagger20ToUserResource() {
+ UserResource ur = SwaggerUtils.getUserResource("/swagger20.json");
+ assertNotNull(ur);
+ assertEquals("/base", ur.getPath());
+ assertEquals(1, ur.getOperations().size());
+ UserOperation op = ur.getOperations().get(0);
+ assertEquals("postOp", op.getName());
+ assertEquals("/somepath", op.getPath());
+ assertEquals("POST", op.getVerb());
+ assertEquals("application/x-www-form-urlencoded", op.getConsumes());
+ assertEquals("application/json", op.getProduces());
+
+ assertEquals(2, op.getParameters().size());
+ Parameter param1 = op.getParameters().get(0);
+ assertEquals("userName", param1.getName());
+ assertEquals(ParameterType.FORM, param1.getType());
+ assertEquals(String.class, param1.getJavaType());
+ Parameter param2 = op.getParameters().get(1);
+ assertEquals("password", param2.getName());
+ assertEquals(ParameterType.FORM, param2.getType());
+ assertEquals(String.class, param2.getJavaType());
+ }
+}
http://git-wip-us.apache.org/repos/asf/cxf/blob/992e3d60/rt/rs/description/src/test/resources/json.schema
----------------------------------------------------------------------
diff --git a/rt/rs/description/src/test/resources/json.schema b/rt/rs/description/src/test/resources/json.schema
new file mode 100644
index 0000000..7199661
--- /dev/null
+++ b/rt/rs/description/src/test/resources/json.schema
@@ -0,0 +1,27 @@
+{
+ "name":"Book",
+ "properties":{
+ "id":{
+ "type":"number",
+ "description":"Product identifier",
+ "required":true
+ },
+ "name":{
+ "description":"Name of the product",
+ "type":"string",
+ "required":true
+ },
+ "price":{
+ "required":true,
+ "type": "number",
+ "minimum":0,
+ "required":true
+ },
+ "tags":{
+ "type":"array",
+ "items":{
+ "type":"string"
+ }
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cxf/blob/992e3d60/rt/rs/description/src/test/resources/swagger12.json
----------------------------------------------------------------------
diff --git a/rt/rs/description/src/test/resources/swagger12.json b/rt/rs/description/src/test/resources/swagger12.json
new file mode 100644
index 0000000..d6b3bab
--- /dev/null
+++ b/rt/rs/description/src/test/resources/swagger12.json
@@ -0,0 +1,27 @@
+{
+ "swaggerVersion": "1.2",
+ "basePath": "http://localhost:8000/greetings",
+ "resourcePath": "/hello",
+ "apis": [
+ {
+ "path": "/hello/{subject}",
+ "operations": [
+ {
+ "method": "GET",
+ "summary": "Greet our subject with hello!",
+ "type": "string",
+ "nickname": "helloSubject",
+ "parameters": [
+ {
+ "name": "subject",
+ "description": "The subject to be greeted.",
+ "required": true,
+ "type": "string",
+ "paramType": "path"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cxf/blob/992e3d60/rt/rs/description/src/test/resources/swagger20.json
----------------------------------------------------------------------
diff --git a/rt/rs/description/src/test/resources/swagger20.json b/rt/rs/description/src/test/resources/swagger20.json
new file mode 100644
index 0000000..44e7a32
--- /dev/null
+++ b/rt/rs/description/src/test/resources/swagger20.json
@@ -0,0 +1,31 @@
+{
+ "swagger": "2.0",
+ "basePath": "/base",
+ "paths":
+ {
+ "/somepath":
+ {
+ "post": {
+ "operationId": "postOp",
+ "consumes": [
+ "application/x-www-form-urlencoded"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "parameters": [
+ {
+ "in": "formData",
+ "name": "userName",
+ "type": "string"
+ },
+ {
+ "in": "formData",
+ "name": "password",
+ "type": "string"
+ }
+ ]
+ }
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cxf/blob/992e3d60/rt/rs/extensions/providers/pom.xml
----------------------------------------------------------------------
diff --git a/rt/rs/extensions/providers/pom.xml b/rt/rs/extensions/providers/pom.xml
index 1d67039..1323bcb 100644
--- a/rt/rs/extensions/providers/pom.xml
+++ b/rt/rs/extensions/providers/pom.xml
@@ -131,12 +131,6 @@
<scope>test</scope>
</dependency>
<dependency>
- <groupId>org.apache.cxf</groupId>
- <artifactId>cxf-rt-rs-service-description</artifactId>
- <version>${project.version}</version>
- <scope>test</scope>
- </dependency>
- <dependency>
<groupId>org.apache.xmlbeans</groupId>
<artifactId>xmlbeans</artifactId>
<scope>provided</scope>
http://git-wip-us.apache.org/repos/asf/cxf/blob/992e3d60/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/json/JsonMapObjectReaderWriter.java
----------------------------------------------------------------------
diff --git a/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/json/JsonMapObjectReaderWriter.java b/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/json/JsonMapObjectReaderWriter.java
index 20e0777..c10eaeb 100644
--- a/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/json/JsonMapObjectReaderWriter.java
+++ b/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/json/JsonMapObjectReaderWriter.java
@@ -225,7 +225,7 @@ public class JsonMapObjectReaderWriter {
int nextOpenIndex = json.indexOf(openChar, from + 1);
int closingIndex = json.indexOf(closeChar, from + 1);
while (nextOpenIndex != -1 && nextOpenIndex < closingIndex) {
- nextOpenIndex = json.indexOf(openChar, closingIndex + 1);
+ nextOpenIndex = json.indexOf(openChar, nextOpenIndex + 1);
closingIndex = json.indexOf(closeChar, closingIndex + 1);
}
return closingIndex;
http://git-wip-us.apache.org/repos/asf/cxf/blob/992e3d60/rt/rs/extensions/providers/src/test/java/org/apache/cxf/jaxrs/provider/ProviderFactoryAllTest.java
----------------------------------------------------------------------
diff --git a/rt/rs/extensions/providers/src/test/java/org/apache/cxf/jaxrs/provider/ProviderFactoryAllTest.java b/rt/rs/extensions/providers/src/test/java/org/apache/cxf/jaxrs/provider/ProviderFactoryAllTest.java
index d513d3c..9b78eb6 100644
--- a/rt/rs/extensions/providers/src/test/java/org/apache/cxf/jaxrs/provider/ProviderFactoryAllTest.java
+++ b/rt/rs/extensions/providers/src/test/java/org/apache/cxf/jaxrs/provider/ProviderFactoryAllTest.java
@@ -26,7 +26,7 @@ import javax.ws.rs.ext.MessageBodyWriter;
import org.apache.cxf.jaxrs.provider.atom.AtomPojoProvider;
import org.apache.cxf.jaxrs.provider.json.JSONProvider;
import org.apache.cxf.jaxrs.resources.Book;
-import org.apache.cxf.jaxrs.resources.Chapter;
+import org.apache.cxf.jaxrs.resources.TagVO;
import org.apache.cxf.message.MessageImpl;
import org.junit.Assert;
@@ -51,8 +51,8 @@ public class ProviderFactoryAllTest extends Assert {
new MessageImpl());
assertSame(feedReader, provider);
- MessageBodyReader<?> entryReader = pf.createMessageBodyReader(Chapter.class,
- Chapter.class, null,
+ MessageBodyReader<?> entryReader = pf.createMessageBodyReader(TagVO.class,
+ TagVO.class, null,
MediaType.valueOf("application/atom+xml;type=entry"),
new MessageImpl());
assertSame(entryReader, provider);
http://git-wip-us.apache.org/repos/asf/cxf/blob/992e3d60/rt/rs/extensions/providers/src/test/java/org/apache/cxf/jaxrs/provider/json/WadlGeneratorTest.java
----------------------------------------------------------------------
diff --git a/rt/rs/extensions/providers/src/test/java/org/apache/cxf/jaxrs/provider/json/WadlGeneratorTest.java b/rt/rs/extensions/providers/src/test/java/org/apache/cxf/jaxrs/provider/json/WadlGeneratorTest.java
deleted file mode 100644
index 7d37f39..0000000
--- a/rt/rs/extensions/providers/src/test/java/org/apache/cxf/jaxrs/provider/json/WadlGeneratorTest.java
+++ /dev/null
@@ -1,138 +0,0 @@
-/**
- * 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.
- */
-package org.apache.cxf.jaxrs.provider.json;
-
-import java.io.ByteArrayOutputStream;
-import java.lang.annotation.Annotation;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.ws.rs.container.ContainerRequestContext;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-
-import org.w3c.dom.Document;
-
-import org.apache.cxf.endpoint.Endpoint;
-import org.apache.cxf.endpoint.EndpointImpl;
-import org.apache.cxf.jaxrs.JAXRSServiceImpl;
-import org.apache.cxf.jaxrs.impl.ContainerRequestContextImpl;
-import org.apache.cxf.jaxrs.impl.MetadataMap;
-import org.apache.cxf.jaxrs.model.ClassResourceInfo;
-import org.apache.cxf.jaxrs.model.wadl.WadlGenerator;
-import org.apache.cxf.jaxrs.resources.BookStore;
-import org.apache.cxf.jaxrs.utils.ResourceUtils;
-import org.apache.cxf.message.Exchange;
-import org.apache.cxf.message.ExchangeImpl;
-import org.apache.cxf.message.Message;
-import org.apache.cxf.message.MessageImpl;
-import org.apache.cxf.service.Service;
-import org.apache.cxf.service.model.BindingInfo;
-import org.apache.cxf.service.model.EndpointInfo;
-import org.apache.cxf.transport.servlet.ServletDestination;
-import org.easymock.EasyMock;
-import org.easymock.IMocksControl;
-
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
-
-public class WadlGeneratorTest extends Assert {
-
- private IMocksControl control;
-
- @Before
- public void setUp() {
- control = EasyMock.createNiceControl();
- control.makeThreadSafe(true);
- }
-
- @Test
- public void testWadlInJsonFormat() throws Exception {
- ClassResourceInfo cri =
- ResourceUtils.createClassResourceInfo(BookStore.class, BookStore.class, true, true);
- final Message m = mockMessage("http://localhost:8080/baz", "/bookstore/1", WadlGenerator.WADL_QUERY, cri);
- Map<String, List<String>> headers = new HashMap<String, List<String>>();
- headers.put("Accept", Collections.singletonList("application/json"));
- m.put(Message.PROTOCOL_HEADERS, headers);
-
- WadlGenerator wg = new WadlGenerator() {
- public void filter(ContainerRequestContext context) {
- super.doFilter(context, m);
- }
- };
- wg.setUseJaxbContextForQnames(false);
- wg.setIgnoreMessageWriters(false);
- wg.setExternalLinks(Collections.singletonList("json.schema"));
-
- Response r = handleRequest(wg, m);
- assertEquals("application/json",
- r.getMetadata().getFirst("Content-Type").toString());
-
- ByteArrayOutputStream os = new ByteArrayOutputStream();
-
- new JSONProvider<Document>().writeTo(
- (Document)r.getEntity(), Document.class, Document.class,
- new Annotation[]{}, MediaType.APPLICATION_JSON_TYPE,
- new MetadataMap<String, Object>(), os);
- String s = os.toString();
- String expected1 =
- "{\"application\":{\"grammars\":{\"include\":{\"@href\":\"http://localhost:8080/baz"
- + "/json.schema\"}},\"resources\":{\"@base\":\"http://localhost:8080/baz\","
- + "\"resource\":{\"@path\":\"/bookstore/{id}\"";
- assertTrue(s.startsWith(expected1));
- String expected2 =
- "\"response\":{\"representation\":[{\"@mediaType\":\"application/xml\"},"
- + "{\"@element\":\"Chapter\",\"@mediaType\":\"application/json\"}]}";
- assertTrue(s.contains(expected2));
- }
- private Response handleRequest(WadlGenerator wg, Message m) {
- wg.filter(new ContainerRequestContextImpl(m, true, false));
- return m.getExchange().get(Response.class);
- }
- private Message mockMessage(String baseAddress, String pathInfo, String query,
- ClassResourceInfo cri) throws Exception {
- Message m = new MessageImpl();
- Exchange e = new ExchangeImpl();
- e.put(Service.class, new JAXRSServiceImpl(Collections.singletonList(cri)));
- m.setExchange(e);
- control.reset();
- ServletDestination d = control.createMock(ServletDestination.class);
- EndpointInfo epr = new EndpointInfo();
- epr.setAddress(baseAddress);
- d.getEndpointInfo();
- EasyMock.expectLastCall().andReturn(epr).anyTimes();
-
- Endpoint endpoint = new EndpointImpl(null, null, epr);
- e.put(Endpoint.class, endpoint);
-
- e.setDestination(d);
- BindingInfo bi = control.createMock(BindingInfo.class);
- epr.setBinding(bi);
- bi.getProperties();
- EasyMock.expectLastCall().andReturn(Collections.emptyMap()).anyTimes();
- m.put(Message.REQUEST_URI, pathInfo);
- m.put(Message.QUERY_STRING, query);
- m.put(Message.HTTP_REQUEST_METHOD, "GET");
- control.replay();
- return m;
- }
-}
http://git-wip-us.apache.org/repos/asf/cxf/blob/992e3d60/rt/rs/extensions/providers/src/test/java/org/apache/cxf/jaxrs/resources/BookStore.java
----------------------------------------------------------------------
diff --git a/rt/rs/extensions/providers/src/test/java/org/apache/cxf/jaxrs/resources/BookStore.java b/rt/rs/extensions/providers/src/test/java/org/apache/cxf/jaxrs/resources/BookStore.java
deleted file mode 100644
index a5bdd95..0000000
--- a/rt/rs/extensions/providers/src/test/java/org/apache/cxf/jaxrs/resources/BookStore.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/**
- * 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.
- */
-package org.apache.cxf.jaxrs.resources;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-
-@Path("/bookstore/{id}")
-@Consumes({"application/xml", "application/json" })
-@Produces({"application/xml", "application/json" })
-public class BookStore {
-
- @GET
- @Path("chapter")
- public Chapter getChapter() {
- return new Chapter(1);
- }
-
-}
http://git-wip-us.apache.org/repos/asf/cxf/blob/992e3d60/rt/rs/extensions/providers/src/test/java/org/apache/cxf/jaxrs/resources/Chapter.java
----------------------------------------------------------------------
diff --git a/rt/rs/extensions/providers/src/test/java/org/apache/cxf/jaxrs/resources/Chapter.java b/rt/rs/extensions/providers/src/test/java/org/apache/cxf/jaxrs/resources/Chapter.java
deleted file mode 100644
index 58290a2..0000000
--- a/rt/rs/extensions/providers/src/test/java/org/apache/cxf/jaxrs/resources/Chapter.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/**
- * 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.
- */
-package org.apache.cxf.jaxrs.resources;
-
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlType;
-
-import org.apache.cxf.jaxrs.ext.xml.XMLName;
-import org.apache.cxf.jaxrs.model.wadl.Description;
-
-@XmlRootElement(name = "thechapter", namespace = "http://superbooks")
-@XmlType(name = "chapter", namespace = "http://superbooks")
-@Description("Chapter subresource")
-@XMLName(value = "{http://books}thesuperchapter")
-public class Chapter {
-
- private int id;
- public Chapter() {
- }
- public Chapter(int id) {
- this.id = id;
- }
-
- @GET
- @Path("/id")
- @Produces({"application/xml", "application/json" })
- @Description("Get the chapter")
- public Chapter getIt() {
- return this;
- }
-
- public void setId(int ident) {
- id = ident;
- }
-
- public int getId() {
- return id;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/cxf/blob/992e3d60/rt/rs/extensions/providers/src/test/resources/json.schema
----------------------------------------------------------------------
diff --git a/rt/rs/extensions/providers/src/test/resources/json.schema b/rt/rs/extensions/providers/src/test/resources/json.schema
deleted file mode 100644
index 7199661..0000000
--- a/rt/rs/extensions/providers/src/test/resources/json.schema
+++ /dev/null
@@ -1,27 +0,0 @@
-{
- "name":"Book",
- "properties":{
- "id":{
- "type":"number",
- "description":"Product identifier",
- "required":true
- },
- "name":{
- "description":"Name of the product",
- "type":"string",
- "required":true
- },
- "price":{
- "required":true,
- "type": "number",
- "minimum":0,
- "required":true
- },
- "tags":{
- "type":"array",
- "items":{
- "type":"string"
- }
- }
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cxf/blob/992e3d60/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerUserResourceDefaultTest.java
----------------------------------------------------------------------
diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerUserResourceDefaultTest.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerUserResourceDefaultTest.java
index 8801b93..c56ee4b 100644
--- a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerUserResourceDefaultTest.java
+++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerUserResourceDefaultTest.java
@@ -86,7 +86,9 @@ public class JAXRSClientServerUserResourceDefaultTest extends AbstractBusClientS
op.setPath("/books/{id}");
op.setName("getBook");
op.setVerb("GET");
- op.setParameters(Collections.singletonList(new Parameter(ParameterType.PATH, "id")));
+ Parameter param = new Parameter(ParameterType.PATH, "id");
+ param.setJavaType(Long.class);
+ op.setParameters(Collections.singletonList(param));
UserOperation op2 = new UserOperation();
op2.setPath("echobook");
@@ -226,7 +228,7 @@ public class JAXRSClientServerUserResourceDefaultTest extends AbstractBusClientS
List<Object> params = CastUtils.cast((List<?>)request);
String path = mc.getUriInfo().getPath();
if ("default/books/999".equals(path)) {
- Long bookId = Long.valueOf(params.get(0).toString());
+ Long bookId = (Long)params.get(0);
Book book = new Book("CXF in Action", bookId);
Response r = Response.ok(book,
mc.getHttpHeaders().getAcceptableMediaTypes().get(0)).build();
http://git-wip-us.apache.org/repos/asf/cxf/blob/992e3d60/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/jaxrs/SourceGenerator.java
----------------------------------------------------------------------
diff --git a/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/jaxrs/SourceGenerator.java b/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/jaxrs/SourceGenerator.java
index a584ec1..44aeda4 100644
--- a/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/jaxrs/SourceGenerator.java
+++ b/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/jaxrs/SourceGenerator.java
@@ -169,7 +169,7 @@ public class SourceGenerator {
XSD_SPECIFIC_TYPE_MAP.put("string", "String");
XSD_SPECIFIC_TYPE_MAP.put("integer", "long");
XSD_SPECIFIC_TYPE_MAP.put("float", "float");
- XSD_SPECIFIC_TYPE_MAP.put("doable", "doable");
+ XSD_SPECIFIC_TYPE_MAP.put("double", "double");
XSD_SPECIFIC_TYPE_MAP.put("int", "int");
XSD_SPECIFIC_TYPE_MAP.put("long", "long");
XSD_SPECIFIC_TYPE_MAP.put("byte", "byte");