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
