Hi Freeman

Thanks for taking care of it.
Let me clarify why I moved the WADL related code to rt/rs/descriptions.

First, I wanted to make the jaxrs module smaller, and also 'react' to the fact that a WADL auto-generation is not an essential part of the clients consuming the endpoints, so a minor performance gain can be achieved without it (i.e, the WADL filter won't be checked by default now). WADL would be IMHO the closest to the 'core' doc option for JAX-RS endpoints because it was created by one of JAX-RS 1.0 authors. So we could not replace with Swagger in the core frontend :-).

However we can now continue enhancing rt/rs/descriptions with more code supporting different doc styles/approaches, in this case we now have a Swagger feature, and going forward we can think of doing RAML (Dan point to it), JSON home, and RestDocs, etc. so the users will be spoiled for choice :-)

Though I'd only expect the WADL code be a non-optional/implicit dep of rt/rs/descriptions.

Cheers, Sergey


On 11/11/13 05:31, Freeman Fang wrote:
Hi Sergey,

Done.

Move SwaggerFeature into rt/rs/description module on trunk and remove 
SwaggerFeature from 2.6.x branch.

Cheers
-------------
Freeman(Yue) Fang

Red Hat, Inc.
FuseSource is now part of Red Hat
Web: http://fusesource.com | http://www.redhat.com/
Twitter: freemanfang
Blog: http://freemanfang.blogspot.com
http://blog.sina.com.cn/u/1473905042
weibo: @Freeman小屋



On 2013-11-8, at 下午7:49, Sergey Beryozkin wrote:

Well, it is a rather light weight contribution, so I guess if you keep the 
dependency optional as Dan also suggested then yes, may be it can go
to 2.7.x, but I'd think twice before putting it into what is likely going be to 
be the last CXF 2.6.x release, it is a new feature, not a bug fix. For the 
trunk - please move it to the other module

Thanks, Sergey



On 08/11/13 11:39, Sergey Beryozkin wrote:
I'm sorry, really not sure how I got my message truncated

Yes, please move it rt/rs/description - this is now where WADL related
code lives, I'm fine with Swagger code being there too

Sergey

On 08/11/13 11:32, Sergey Beryozkin wrote:
Hi Freeman

While I appreciate yout effort I'm -1 on this commit.
Here is why:

- we've worked hard on minimizing cxf rt frontend jaxrs and in one ho
you add a Swagger related code without even discussing it.

Please revert your commits.

IMHO, it may go as an *optional* dependency to rt/rs/description module
which is where it should stay, on the trunk only. I honestly do not want




On 08/11/13 03:30, [email protected] wrote:
Author: ffang
Date: Fri Nov  8 03:30:41 2013
New Revision: 1539911

URL: http://svn.apache.org/r1539911
Log:
[CXF-5379]introduce cxf swagger feature

Added:

cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/swagger/

cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/swagger/SwaggerFeature.java


Modified:
     cxf/trunk/parent/pom.xml
     cxf/trunk/rt/frontend/jaxrs/pom.xml

cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/AbstractJAXRSFactoryBean.java



Modified: cxf/trunk/parent/pom.xml
URL:
http://svn.apache.org/viewvc/cxf/trunk/parent/pom.xml?rev=1539911&r1=1539910&r2=1539911&view=diff


==============================================================================


--- cxf/trunk/parent/pom.xml (original)
+++ cxf/trunk/parent/pom.xml Fri Nov  8 03:30:41 2013
@@ -149,6 +149,7 @@
          <cxf.spring.osgi.version>1.2.1</cxf.spring.osgi.version>

<cxf.spring.ldap.version>1.3.1.RELEASE</cxf.spring.ldap.version>
          <cxf.spring.mock>spring-test</cxf.spring.mock>
+        <cxf.swagger.version>1.3.0</cxf.swagger.version>
          <cxf.velocity.version>1.7</cxf.velocity.version>
          <cxf.woodstox.core.version>4.2.0</cxf.woodstox.core.version>

<cxf.woodstox.stax2-api.version>3.1.1</cxf.woodstox.stax2-api.version>
@@ -1615,6 +1616,12 @@
                  <artifactId>msv-core</artifactId>
                  <version>${cxf.msv.version}</version>
              </dependency>
+            <dependency>
+                <groupId>com.wordnik</groupId>
+                <artifactId>swagger-jaxrs_2.10</artifactId>
+                <version>${cxf.swagger.version}</version>
+            </dependency>
+
          </dependencies>
      </dependencyManagement>


Modified: cxf/trunk/rt/frontend/jaxrs/pom.xml
URL:
http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/pom.xml?rev=1539911&r1=1539910&r2=1539911&view=diff


==============================================================================


--- cxf/trunk/rt/frontend/jaxrs/pom.xml (original)
+++ cxf/trunk/rt/frontend/jaxrs/pom.xml Fri Nov  8 03:30:41 2013
@@ -36,6 +36,7 @@

javax.servlet*;version="${cxf.osgi.javax.servlet.version}",
              org.apache.aries*;version="${cxf.aries.version.range}",

org.springframework*;resolution:="optional";version="${cxf.osgi.spring.version}",


+
com.wordnik.swagger.jaxrs*;resolution:="optional";version="[1.3.0,
1.4.0)",
              javax.ws.rs.client;version="[2.0,3)",
              javax.ws.rs*;version="[1.0,3)",
          </cxf.osgi.import>
@@ -158,6 +159,10 @@
                  </exclusion>
              </exclusions>
          </dependency>
+        <dependency>
+            <groupId>com.wordnik</groupId>
+            <artifactId>swagger-jaxrs_2.10</artifactId>
+        </dependency>
      </dependencies>



Modified:
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/AbstractJAXRSFactoryBean.java


URL:
http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/AbstractJAXRSFactoryBean.java?rev=1539911&r1=1539910&r2=1539911&view=diff


==============================================================================


---
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/AbstractJAXRSFactoryBean.java

(original)
+++
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/AbstractJAXRSFactoryBean.java

Fri Nov  8 03:30:41 2013
@@ -110,6 +110,7 @@ public class AbstractJAXRSFactoryBean ex
          super.setBus(bus);
          checkBindingFactory(bus);
          serviceFactory.setBus(bus);
+        bus.setProperty(JAXRSServiceFactoryBean.class.getName(),
serviceFactory);
      }

      /*
@@ -204,6 +205,7 @@ public class AbstractJAXRSFactoryBean ex
       */
      public void setServiceFactory(JAXRSServiceFactoryBean
serviceFactory) {
          this.serviceFactory = serviceFactory;
+        getBus().setProperty(JAXRSServiceFactoryBean.class.getName(),
serviceFactory);
      }

      protected Endpoint createEndpoint() throws BusException,
EndpointException {

Added:
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/swagger/SwaggerFeature.java


URL:
http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/swagger/SwaggerFeature.java?rev=1539911&view=auto


==============================================================================


---
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/swagger/SwaggerFeature.java

(added)
+++
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/swagger/SwaggerFeature.java

Fri Nov  8 03:30:41 2013
@@ -0,0 +1,142 @@
+/**
+ * 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.util.ArrayList;
+import java.util.List;
+
+import org.apache.cxf.Bus;
+import org.apache.cxf.endpoint.Server;
+import org.apache.cxf.feature.AbstractFeature;
+import org.apache.cxf.jaxrs.JAXRSServiceFactoryBean;
+import org.apache.cxf.jaxrs.model.AbstractResourceInfo;
+import org.apache.cxf.jaxrs.provider.ProviderFactory;
+
+public class SwaggerFeature extends AbstractFeature {
+
+    private String resourcePackage;
+    private String version = "1.0.0";
+    private String basePath;
+    private String title = "Rest sample app";
+    private String description = "This is a app.";
+    private String contact = "[email protected]";
+    private String license = "Apache 2.0 License";
+    private String licenseUrl =
"http://www.apache.org/licenses/LICENSE-2.0.html";;
+    private boolean scan = true;
+    @Override
+    public void initialize(Server server, Bus bus) {
+        List<Object> serviceBeans = new ArrayList<Object>();
+        serviceBeans.add(new
com.wordnik.swagger.jaxrs.listing.ApiListingResourceJSON());
+        calulateDefaultResourcePackage(bus);
+        calulateDefaultBasePath(server);
+
((JAXRSServiceFactoryBean)bus.getProperty(JAXRSServiceFactoryBean.class.getName())).


+            setResourceClassesFromBeans(serviceBeans);
+        List<Object> providers = new ArrayList<Object>();
+        providers.add(new
com.wordnik.swagger.jaxrs.listing.ResourceListingProvider());
+        providers.add(new
com.wordnik.swagger.jaxrs.listing.ApiDeclarationProvider());
+
((ProviderFactory)bus.getProperty(ProviderFactory.class.getName())).setUserProviders(providers);


+        com.wordnik.swagger.jaxrs.config.BeanConfig beanConfig = new
com.wordnik.swagger.jaxrs.config.BeanConfig();
+        beanConfig.setResourcePackage(getResourcePackage());
+        beanConfig.setVersion(getVersion());
+        beanConfig.setBasePath(getBasePath());
+        beanConfig.setTitle(getTitle());
+        beanConfig.setDescription(getDescription());
+        beanConfig.setContact(getContact());
+        beanConfig.setLicense(getLicense());
+        beanConfig.setLicenseUrl(getLicenseUrl());
+        beanConfig.setScan(isScan());
+        initializeProvider(server.getEndpoint(), bus);
+    }
+    private void calulateDefaultResourcePackage(Bus bus) {
+        JAXRSServiceFactoryBean serviceFactoryBean =
+
(JAXRSServiceFactoryBean)bus.getProperty(JAXRSServiceFactoryBean.class.getName());


+        AbstractResourceInfo resourceInfo =
serviceFactoryBean.getClassResourceInfo().get(0);
+
+        if ((resourceInfo != null)
+            && (getResourcePackage() == null ||
getResourcePackage().length() == 0)) {
+
setResourcePackage(resourceInfo.getResourceClass().getPackage().getName());


+        }
+    }
+
+    private void calulateDefaultBasePath(Server server) {
+        String address =
server.getEndpoint().getEndpointInfo().getAddress();
+        if (getBasePath() == null || getBasePath().length() == 0) {
+            if (address.startsWith("http")) {
+                setBasePath(address + "/api-docs");
+            } else {
+                setBasePath("http://localhost:8181/cxf"; + address +
"/api-docs");
+            }
+        }
+    }
+    public String getResourcePackage() {
+        return resourcePackage;
+    }
+    public void setResourcePackage(String resourcePackage) {
+        this.resourcePackage = resourcePackage;
+    }
+    public String getVersion() {
+        return version;
+    }
+    public void setVersion(String version) {
+        this.version = version;
+    }
+    public String getBasePath() {
+        return basePath;
+    }
+    public void setBasePath(String basePath) {
+        this.basePath = basePath;
+    }
+    public String getTitle() {
+        return title;
+    }
+    public void setTitle(String title) {
+        this.title = title;
+    }
+    public String getDescription() {
+        return description;
+    }
+    public void setDescription(String description) {
+        this.description = description;
+    }
+    public String getContact() {
+        return contact;
+    }
+    public void setContact(String contact) {
+        this.contact = contact;
+    }
+    public String getLicense() {
+        return license;
+    }
+    public void setLicense(String license) {
+        this.license = license;
+    }
+    public String getLicenseUrl() {
+        return licenseUrl;
+    }
+    public void setLicenseUrl(String licenseUrl) {
+        this.licenseUrl = licenseUrl;
+    }
+    public boolean isScan() {
+        return scan;
+    }
+    public void setScan(boolean scan) {
+        this.scan = scan;
+    }
+
+}








--
Sergey Beryozkin

Talend Community Coders
http://coders.talend.com/

Blog: http://sberyozkin.blogspot.com




--
Sergey Beryozkin

Talend Community Coders
http://coders.talend.com/

Blog: http://sberyozkin.blogspot.com

Reply via email to