From c2649b4b54dbeb7eaee7c3a4b6e5b7d0301aafaf Mon Sep 17 00:00:00 2001 From: SirWayne Date: Tue, 26 Apr 2016 16:19:37 +0200 Subject: [PATCH] Add example feign core project add system client api Signed-off-by: SirWayne --- examples/hawkbit-example-ddi-client/pom.xml | 5 + ...ava => DdiAcceptedRequestInterceptor.java} | 56 ++++--- .../ddi/client/DdiDefaultFeignClient.java | 5 +- .../hawkbit-example-feign-core-client/pom.xml | 47 ++++++ ...plicationJsonRequestHeaderInterceptor.java | 56 +++---- .../core/client/FeignClientConfiguration.java | 32 ++++ ...leConsumersProducersSpringMvcContract.java | 86 +++++----- examples/hawkbit-mgmt-api-client/pom.xml | 10 ++ .../hawkbit/mgmt/client/Application.java | 13 +- ...leConsumersProducersSpringMvcContract.java | 43 ----- .../mgmt/client/MgmtDefaultFeignClient.java | 149 ------------------ .../MgmtSoftwareModuleClientResource.java | 16 ++ .../client/resource/SystemClientResource.java | 21 +++ .../SystemManagementClientResource.java | 22 +++ .../json/model/artifact/MgmtArtifact.java | 7 +- ...Rest.java => MgmtDistributionSetType.java} | 2 +- .../api/MgmtDistributionSetTypeRestApi.java | 10 +- .../mgmt/rest/api/MgmtDownloadRestApi.java | 5 +- .../rest/api/MgmtSoftwareModuleRestApi.java | 3 +- .../MgmtDistributionSetTypeMapper.java | 14 +- .../MgmtDistributionSetTypeResource.java | 12 +- .../rest/resource/MgmtDownloadResource.java | 15 +- hawkbit-repository/pom.xml | 6 - pom.xml | 2 +- 24 files changed, 294 insertions(+), 343 deletions(-) rename examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/{ApplicationJsonRequestHeaderInterceptor.java => DdiAcceptedRequestInterceptor.java} (69%) create mode 100644 examples/hawkbit-example-feign-core-client/pom.xml rename examples/{hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt => hawkbit-example-feign-core-client/src/main/java/org/eclipse/hawkbit/feign/core}/client/ApplicationJsonRequestHeaderInterceptor.java (92%) create mode 100644 examples/hawkbit-example-feign-core-client/src/main/java/org/eclipse/hawkbit/feign/core/client/FeignClientConfiguration.java rename examples/{hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi => hawkbit-example-feign-core-client/src/main/java/org/eclipse/hawkbit/feign/core}/client/IgnoreMultipleConsumersProducersSpringMvcContract.java (94%) delete mode 100644 examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/IgnoreMultipleConsumersProducersSpringMvcContract.java delete mode 100644 examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/MgmtDefaultFeignClient.java create mode 100644 examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/SystemClientResource.java create mode 100644 examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/SystemManagementClientResource.java rename hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/distributionsettype/{MgmtDistributionSetTypeRest.java => MgmtDistributionSetType.java} (95%) diff --git a/examples/hawkbit-example-ddi-client/pom.xml b/examples/hawkbit-example-ddi-client/pom.xml index f2eb9bb16..c6acefb00 100644 --- a/examples/hawkbit-example-ddi-client/pom.xml +++ b/examples/hawkbit-example-ddi-client/pom.xml @@ -24,6 +24,11 @@ + + org.eclipse.hawkbit + hawkbit-example-feign-core-client + ${project.version} + org.eclipse.hawkbit hawkbit-ddi-api diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/ApplicationJsonRequestHeaderInterceptor.java b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiAcceptedRequestInterceptor.java similarity index 69% rename from examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/ApplicationJsonRequestHeaderInterceptor.java rename to examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiAcceptedRequestInterceptor.java index 5f7f46013..962ffd7a6 100644 --- a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/ApplicationJsonRequestHeaderInterceptor.java +++ b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiAcceptedRequestInterceptor.java @@ -1,29 +1,27 @@ -/** - * Copyright (c) 2015 Bosch Software Innovations GmbH and others. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - */ -package org.eclipse.hawkbit.ddi.client; - -import org.springframework.http.MediaType; - -import feign.RequestInterceptor; -import feign.RequestTemplate; - -/** - * An feign request interceptor to set the defined {@code Accept} and - * {@code Content-Type} headers for each request to {@code application/json}. - */ -public class ApplicationJsonRequestHeaderInterceptor implements RequestInterceptor { - - @Override - public void apply(final RequestTemplate template) { - template.header("Accept", MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_OCTET_STREAM_VALUE, - MediaType.TEXT_PLAIN_VALUE); - template.header("Content-Type", MediaType.APPLICATION_JSON_VALUE); - } - -} +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.ddi.client; + +import org.springframework.http.MediaType; + +import feign.RequestInterceptor; +import feign.RequestTemplate; + +/** + * + * + */ +public class DdiAcceptedRequestInterceptor implements RequestInterceptor { + + @Override + public void apply(final RequestTemplate template) { + template.header("Accept", MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_OCTET_STREAM_VALUE, + MediaType.TEXT_PLAIN_VALUE); + } +} diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiDefaultFeignClient.java b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiDefaultFeignClient.java index 7c4c87708..c9af1cb09 100644 --- a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiDefaultFeignClient.java +++ b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiDefaultFeignClient.java @@ -10,6 +10,8 @@ package org.eclipse.hawkbit.ddi.client; import org.apache.commons.lang.Validate; import org.eclipse.hawkbit.ddi.client.resource.RootControllerResourceClient; +import org.eclipse.hawkbit.feign.core.client.ApplicationJsonRequestHeaderInterceptor; +import org.eclipse.hawkbit.feign.core.client.IgnoreMultipleConsumersProducersSpringMvcContract; import feign.Feign; import feign.Feign.Builder; @@ -30,7 +32,8 @@ public class DdiDefaultFeignClient { public DdiDefaultFeignClient(final String baseUrl, final String tenant) { feignBuilder = Feign.builder().contract(new IgnoreMultipleConsumersProducersSpringMvcContract()) - .requestInterceptor(new ApplicationJsonRequestHeaderInterceptor()).logLevel(Level.FULL) + .requestInterceptor(new ApplicationJsonRequestHeaderInterceptor()) + .requestInterceptor(new DdiAcceptedRequestInterceptor()).logLevel(Level.FULL) .logger(new Logger.ErrorLogger()).encoder(new JacksonEncoder()).decoder(new DdiDecoder()); Validate.notNull(baseUrl, "A baseUrl has to be set"); Validate.notNull(tenant, "A tenant has to be set"); diff --git a/examples/hawkbit-example-feign-core-client/pom.xml b/examples/hawkbit-example-feign-core-client/pom.xml new file mode 100644 index 000000000..e9981829c --- /dev/null +++ b/examples/hawkbit-example-feign-core-client/pom.xml @@ -0,0 +1,47 @@ + + 4.0.0 + + org.eclipse.hawkbit + hawkbit-examples-parent + 0.2.0-SNAPSHOT + + + hawkbit-example-feign-core-client + hawkbit-example-feign-core-client + + + + + org.springframework.cloud + spring-cloud-netflix + 1.0.7.RELEASE + pom + import + + + + + + + com.netflix.feign + feign-core + + + 8.14.2 + + + com.netflix.feign + feign-jackson + 8.14.2 + + + com.fasterxml.jackson.core + jackson-databind + + + org.springframework.cloud + spring-cloud-starter-feign + + + diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/ApplicationJsonRequestHeaderInterceptor.java b/examples/hawkbit-example-feign-core-client/src/main/java/org/eclipse/hawkbit/feign/core/client/ApplicationJsonRequestHeaderInterceptor.java similarity index 92% rename from examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/ApplicationJsonRequestHeaderInterceptor.java rename to examples/hawkbit-example-feign-core-client/src/main/java/org/eclipse/hawkbit/feign/core/client/ApplicationJsonRequestHeaderInterceptor.java index 75f3b0dd1..ac1353fa1 100644 --- a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/ApplicationJsonRequestHeaderInterceptor.java +++ b/examples/hawkbit-example-feign-core-client/src/main/java/org/eclipse/hawkbit/feign/core/client/ApplicationJsonRequestHeaderInterceptor.java @@ -1,28 +1,28 @@ -/** - * Copyright (c) 2015 Bosch Software Innovations GmbH and others. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - */ -package org.eclipse.hawkbit.mgmt.client; - -import org.springframework.http.MediaType; - -import feign.RequestInterceptor; -import feign.RequestTemplate; - -/** - * An feign request interceptor to set the defined {@code Accept} and - * {@code Content-Type} headers for each request to {@code application/json}. - */ -public class ApplicationJsonRequestHeaderInterceptor implements RequestInterceptor { - - @Override - public void apply(final RequestTemplate template) { - template.header("Accept", MediaType.APPLICATION_JSON_VALUE); - template.header("Content-Type", MediaType.APPLICATION_JSON_VALUE); - } - -} +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.feign.core.client; + +import org.springframework.http.MediaType; + +import feign.RequestInterceptor; +import feign.RequestTemplate; + +/** + * An feign request interceptor to set the defined {@code Accept} and + * {@code Content-Type} headers for each request to {@code application/json}. + */ +public class ApplicationJsonRequestHeaderInterceptor implements RequestInterceptor { + + @Override + public void apply(final RequestTemplate template) { + template.header("Accept", MediaType.APPLICATION_JSON_VALUE); + template.header("Content-Type", MediaType.APPLICATION_JSON_VALUE); + } + +} diff --git a/examples/hawkbit-example-feign-core-client/src/main/java/org/eclipse/hawkbit/feign/core/client/FeignClientConfiguration.java b/examples/hawkbit-example-feign-core-client/src/main/java/org/eclipse/hawkbit/feign/core/client/FeignClientConfiguration.java new file mode 100644 index 000000000..83bee36b1 --- /dev/null +++ b/examples/hawkbit-example-feign-core-client/src/main/java/org/eclipse/hawkbit/feign/core/client/FeignClientConfiguration.java @@ -0,0 +1,32 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.feign.core.client; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import feign.Contract; + +/** + * + * + */ +@Configuration +public class FeignClientConfiguration { + + @Bean + public ApplicationJsonRequestHeaderInterceptor jsonHeaderInterceptor() { + return new ApplicationJsonRequestHeaderInterceptor(); + } + + @Bean + public Contract feignContract() { + return new IgnoreMultipleConsumersProducersSpringMvcContract(); + } +} diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/IgnoreMultipleConsumersProducersSpringMvcContract.java b/examples/hawkbit-example-feign-core-client/src/main/java/org/eclipse/hawkbit/feign/core/client/IgnoreMultipleConsumersProducersSpringMvcContract.java similarity index 94% rename from examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/IgnoreMultipleConsumersProducersSpringMvcContract.java rename to examples/hawkbit-example-feign-core-client/src/main/java/org/eclipse/hawkbit/feign/core/client/IgnoreMultipleConsumersProducersSpringMvcContract.java index c1c24b9ec..e7d8890b1 100644 --- a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/IgnoreMultipleConsumersProducersSpringMvcContract.java +++ b/examples/hawkbit-example-feign-core-client/src/main/java/org/eclipse/hawkbit/feign/core/client/IgnoreMultipleConsumersProducersSpringMvcContract.java @@ -1,43 +1,43 @@ -/** - * Copyright (c) 2015 Bosch Software Innovations GmbH and others. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - */ -package org.eclipse.hawkbit.ddi.client; - -import java.lang.annotation.Annotation; -import java.lang.reflect.Method; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.cloud.netflix.feign.support.SpringMvcContract; - -import feign.MethodMetadata; - -/** - * Own implementation of the {@link SpringMvcContract} which catches the - * {@link IllegalStateException} which occurs due multiple produces and consumes - * values in the request-mapping - * annoation.https://github.com/spring-cloud/spring-cloud-netflix/issues/808 - */ -public class IgnoreMultipleConsumersProducersSpringMvcContract extends SpringMvcContract { - - private static final Logger LOGGER = LoggerFactory - .getLogger(IgnoreMultipleConsumersProducersSpringMvcContract.class); - - @Override - protected void processAnnotationOnMethod(final MethodMetadata data, final Annotation methodAnnotation, - final Method method) { - try { - super.processAnnotationOnMethod(data, methodAnnotation, method); - } catch (final IllegalStateException e) { - // ignore illegalstateexception here because it's thrown because of - // multiple consumers and produces, see - // https://github.com/spring-cloud/spring-cloud-netflix/issues/808 - LOGGER.trace(e.getMessage(), e); - } - } -} +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.feign.core.client; + +import java.lang.annotation.Annotation; +import java.lang.reflect.Method; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.cloud.netflix.feign.support.SpringMvcContract; + +import feign.MethodMetadata; + +/** + * Own implementation of the {@link SpringMvcContract} which catches the + * {@link IllegalStateException} which occurs due multiple produces and consumes + * values in the request-mapping + * annoation.https://github.com/spring-cloud/spring-cloud-netflix/issues/808 + */ +public class IgnoreMultipleConsumersProducersSpringMvcContract extends SpringMvcContract { + + private static final Logger LOGGER = LoggerFactory + .getLogger(IgnoreMultipleConsumersProducersSpringMvcContract.class); + + @Override + protected void processAnnotationOnMethod(final MethodMetadata data, final Annotation methodAnnotation, + final Method method) { + try { + super.processAnnotationOnMethod(data, methodAnnotation, method); + } catch (final IllegalStateException e) { + // ignore illegalstateexception here because it's thrown because of + // multiple consumers and produces, see + // https://github.com/spring-cloud/spring-cloud-netflix/issues/808 + LOGGER.trace(e.getMessage(), e); + } + } +} diff --git a/examples/hawkbit-mgmt-api-client/pom.xml b/examples/hawkbit-mgmt-api-client/pom.xml index 70b394ac4..1b7ff72ec 100644 --- a/examples/hawkbit-mgmt-api-client/pom.xml +++ b/examples/hawkbit-mgmt-api-client/pom.xml @@ -55,11 +55,21 @@ + + org.eclipse.hawkbit + hawkbit-example-feign-core-client + ${project.version} + org.eclipse.hawkbit hawkbit-mgmt-api ${project.version} + + org.eclipse.hawkbit + hawkbit-system-api + ${project.version} + com.netflix.feign feign-core diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/Application.java b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/Application.java index 27584b50a..15d6ff10a 100644 --- a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/Application.java +++ b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/Application.java @@ -17,13 +17,14 @@ import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.cloud.netflix.feign.EnableFeignClients; import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; -import feign.Contract; import feign.auth.BasicAuthRequestInterceptor; @SpringBootApplication @EnableFeignClients @EnableConfigurationProperties(ClientConfigurationProperties.class) +@Configuration public class Application implements CommandLineRunner { @Autowired @@ -56,16 +57,6 @@ public class Application implements CommandLineRunner { return new BasicAuthRequestInterceptor(configuration.getUsername(), configuration.getPassword()); } - @Bean - public ApplicationJsonRequestHeaderInterceptor jsonHeaderInterceptor() { - return new ApplicationJsonRequestHeaderInterceptor(); - } - - @Bean - public Contract feignContract() { - return new IgnoreMultipleConsumersProducersSpringMvcContract(); - } - private boolean containsArg(final String containsArg, final String... args) { for (final String arg : args) { if (arg.equalsIgnoreCase(containsArg)) { diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/IgnoreMultipleConsumersProducersSpringMvcContract.java b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/IgnoreMultipleConsumersProducersSpringMvcContract.java deleted file mode 100644 index c796aa019..000000000 --- a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/IgnoreMultipleConsumersProducersSpringMvcContract.java +++ /dev/null @@ -1,43 +0,0 @@ -/** - * Copyright (c) 2015 Bosch Software Innovations GmbH and others. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - */ -package org.eclipse.hawkbit.mgmt.client; - -import java.lang.annotation.Annotation; -import java.lang.reflect.Method; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.cloud.netflix.feign.support.SpringMvcContract; - -import feign.MethodMetadata; - -/** - * Own implementation of the {@link SpringMvcContract} which catches the - * {@link IllegalStateException} which occurs due multiple produces and consumes - * values in the request-mapping - * annoation.https://github.com/spring-cloud/spring-cloud-netflix/issues/808 - */ -public class IgnoreMultipleConsumersProducersSpringMvcContract extends SpringMvcContract { - - private static final Logger LOGGER = LoggerFactory - .getLogger(IgnoreMultipleConsumersProducersSpringMvcContract.class); - - @Override - protected void processAnnotationOnMethod(final MethodMetadata data, final Annotation methodAnnotation, - final Method method) { - try { - super.processAnnotationOnMethod(data, methodAnnotation, method); - } catch (final IllegalStateException e) { - // ignore illegalstateexception here because it's thrown because of - // multiple consumers and produces, see - // https://github.com/spring-cloud/spring-cloud-netflix/issues/808 - LOGGER.trace(e.getMessage(), e); - } - } -} diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/MgmtDefaultFeignClient.java b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/MgmtDefaultFeignClient.java deleted file mode 100644 index 6425bad4d..000000000 --- a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/MgmtDefaultFeignClient.java +++ /dev/null @@ -1,149 +0,0 @@ -/** - * Copyright (c) 2015 Bosch Software Innovations GmbH and others. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - */ -package org.eclipse.hawkbit.mgmt.client; - -import org.eclipse.hawkbit.mgmt.client.resource.MgmtDistributionSetClientResource; -import org.eclipse.hawkbit.mgmt.client.resource.MgmtDistributionSetTagClientResource; -import org.eclipse.hawkbit.mgmt.client.resource.MgmtDistributionSetTypeClientResource; -import org.eclipse.hawkbit.mgmt.client.resource.MgmtDownloadArtifactClientResource; -import org.eclipse.hawkbit.mgmt.client.resource.MgmtDownloadClientResource; -import org.eclipse.hawkbit.mgmt.client.resource.MgmtRolloutClientResource; -import org.eclipse.hawkbit.mgmt.client.resource.MgmtSoftwareModuleClientResource; -import org.eclipse.hawkbit.mgmt.client.resource.MgmtSoftwareModuleTypeClientResource; -import org.eclipse.hawkbit.mgmt.client.resource.MgmtTargetClientResource; -import org.eclipse.hawkbit.mgmt.client.resource.MgmtTargetTagClientResource; -import org.springframework.cloud.netflix.feign.support.ResponseEntityDecoder; -import org.springframework.hateoas.hal.Jackson2HalModule; - -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.ObjectMapper; - -import feign.Feign; -import feign.Feign.Builder; -import feign.Logger; -import feign.Logger.Level; -import feign.jackson.JacksonDecoder; -import feign.jackson.JacksonEncoder; - -/** - * - */ -public class MgmtDefaultFeignClient { - - private MgmtDistributionSetClientResource mgmtDistributionSetClientResource; - private MgmtDistributionSetTagClientResource mgmtDistributionSetTagClientResource; - private MgmtDistributionSetTypeClientResource mgmtDistributionSetTypeClientResource; - private MgmtRolloutClientResource mgmtRolloutClientResource; - private MgmtSoftwareModuleClientResource mgmtSoftwareModuleClientResource; - private MgmtSoftwareModuleTypeClientResource mgmtSoftwareModuleTypeClientResource; - private MgmtTargetClientResource mgmtTargetClientResource; - private MgmtTargetTagClientResource mgmtTargetTagClientResource; - private MgmtDownloadClientResource mgmtDownloadClientResource; - private MgmtDownloadArtifactClientResource mgmtDownloadArtifactClientResource; - - private final Builder feignBuilder; - private final String baseUrl; - - public MgmtDefaultFeignClient(final String baseUrl) { - final ObjectMapper mapper = new ObjectMapper() - .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) - .registerModule(new Jackson2HalModule()); - - feignBuilder = Feign.builder().contract(new IgnoreMultipleConsumersProducersSpringMvcContract()) - .requestInterceptor(new ApplicationJsonRequestHeaderInterceptor()).logLevel(Level.FULL) - .logger(new Logger.ErrorLogger()).encoder(new JacksonEncoder()) - .decoder(new ResponseEntityDecoder(new JacksonDecoder(mapper))); - this.baseUrl = baseUrl; - } - - public Builder getFeignBuilder() { - return feignBuilder; - } - - public MgmtDistributionSetClientResource getMgmtDistributionSetClientResource() { - if (mgmtDistributionSetClientResource == null) { - mgmtDistributionSetClientResource = feignBuilder.target(MgmtDistributionSetClientResource.class, - this.baseUrl + MgmtDistributionSetClientResource.PATH); - } - return mgmtDistributionSetClientResource; - } - - public MgmtDistributionSetTagClientResource getMgmtDistributionSetTagClientResource() { - if (mgmtDistributionSetTagClientResource == null) { - mgmtDistributionSetTagClientResource = feignBuilder.target(MgmtDistributionSetTagClientResource.class, - this.baseUrl + MgmtDistributionSetTagClientResource.PATH); - } - return mgmtDistributionSetTagClientResource; - } - - public MgmtDistributionSetTypeClientResource getMgmtDistributionSetTypeClientResource() { - if (mgmtDistributionSetTypeClientResource == null) { - mgmtDistributionSetTypeClientResource = feignBuilder.target(MgmtDistributionSetTypeClientResource.class, - this.baseUrl + MgmtDistributionSetTypeClientResource.PATH); - } - return mgmtDistributionSetTypeClientResource; - } - - public MgmtRolloutClientResource getMgmtRolloutClientResource() { - if (mgmtRolloutClientResource == null) { - mgmtRolloutClientResource = feignBuilder.target(MgmtRolloutClientResource.class, - this.baseUrl + MgmtRolloutClientResource.PATH); - } - return mgmtRolloutClientResource; - } - - public MgmtSoftwareModuleClientResource getMgmtSoftwareModuleClientResource() { - if (mgmtSoftwareModuleClientResource == null) { - mgmtSoftwareModuleClientResource = feignBuilder.target(MgmtSoftwareModuleClientResource.class, - this.baseUrl + MgmtSoftwareModuleClientResource.PATH); - } - return mgmtSoftwareModuleClientResource; - } - - public MgmtSoftwareModuleTypeClientResource getMgmtSoftwareModuleTypeClientResource() { - if (mgmtSoftwareModuleTypeClientResource == null) { - mgmtSoftwareModuleTypeClientResource = feignBuilder.target(MgmtSoftwareModuleTypeClientResource.class, - this.baseUrl + MgmtSoftwareModuleTypeClientResource.PATH); - } - return mgmtSoftwareModuleTypeClientResource; - } - - public MgmtTargetClientResource getMgmtTargetClientResource() { - if (mgmtTargetClientResource == null) { - mgmtTargetClientResource = feignBuilder.target(MgmtTargetClientResource.class, - this.baseUrl + MgmtTargetClientResource.PATH); - } - return mgmtTargetClientResource; - } - - public MgmtTargetTagClientResource getMgmtTargetTagClientResource() { - if (mgmtTargetTagClientResource == null) { - mgmtTargetTagClientResource = feignBuilder.target(MgmtTargetTagClientResource.class, - this.baseUrl + MgmtTargetTagClientResource.PATH); - } - return mgmtTargetTagClientResource; - } - - public MgmtDownloadClientResource getMgmtDownloadClientResource() { - if (mgmtDownloadClientResource == null) { - mgmtDownloadClientResource = feignBuilder.target(MgmtDownloadClientResource.class, - this.baseUrl + MgmtDownloadClientResource.PATH); - } - return mgmtDownloadClientResource; - } - - public MgmtDownloadArtifactClientResource getMgmtDownloadArtifactClientResource() { - if (mgmtDownloadArtifactClientResource == null) { - mgmtDownloadArtifactClientResource = feignBuilder.target(MgmtDownloadArtifactClientResource.class, - this.baseUrl + MgmtDownloadArtifactClientResource.PATH); - } - return mgmtDownloadArtifactClientResource; - } - -} diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtSoftwareModuleClientResource.java b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtSoftwareModuleClientResource.java index d89f7e5f3..cc6dbd477 100644 --- a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtSoftwareModuleClientResource.java +++ b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/MgmtSoftwareModuleClientResource.java @@ -8,8 +8,17 @@ */ package org.eclipse.hawkbit.mgmt.client.resource; +import org.eclipse.hawkbit.mgmt.json.model.artifact.MgmtArtifact; import org.eclipse.hawkbit.mgmt.rest.api.MgmtSoftwareModuleRestApi; import org.springframework.cloud.netflix.feign.FeignClient; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.multipart.MultipartFile; + +import feign.Param; /** * Client binding for the SoftwareModule resource of the management API. @@ -18,4 +27,11 @@ import org.springframework.cloud.netflix.feign.FeignClient; public interface MgmtSoftwareModuleClientResource extends MgmtSoftwareModuleRestApi { static String PATH = "rest/v1/softwaremodules"; + + @RequestMapping(method = RequestMethod.POST, value = "/{softwareModuleId}/artifacts") + ResponseEntity uploadArtifact(@PathVariable("softwareModuleId") final Long softwareModuleId, + @Param("file") final MultipartFile file, + @RequestParam(value = "filename", required = false) final String optionalFileName, + @RequestParam(value = "md5sum", required = false) final String md5Sum, + @RequestParam(value = "sha1sum", required = false) final String sha1Sum); } diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/SystemClientResource.java b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/SystemClientResource.java new file mode 100644 index 000000000..01510e279 --- /dev/null +++ b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/SystemClientResource.java @@ -0,0 +1,21 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.mgmt.client.resource; + +import org.eclipse.hawkbit.system.rest.api.SystemRestApi; +import org.springframework.cloud.netflix.feign.FeignClient; + +/** + * Client binding for the {@link SystemRestApi}. + * + */ +@FeignClient(url = "${hawkbit.url:localhost:8080}/" + SystemClientResource.PATH) +public interface SystemClientResource extends SystemRestApi { + static String PATH = "rest/v1/system"; +} diff --git a/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/SystemManagementClientResource.java b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/SystemManagementClientResource.java new file mode 100644 index 000000000..5047619bc --- /dev/null +++ b/examples/hawkbit-mgmt-api-client/src/main/java/org/eclipse/hawkbit/mgmt/client/resource/SystemManagementClientResource.java @@ -0,0 +1,22 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.mgmt.client.resource; + +import org.eclipse.hawkbit.system.rest.api.SystemManagementRestApi; +import org.springframework.cloud.netflix.feign.FeignClient; + +/** + * Client binding for the {@link SystemManagementRestApi}. + * + */ +@FeignClient(url = "${hawkbit.url:localhost:8080}/" + SystemManagementClientResource.PATH) +public interface SystemManagementClientResource extends SystemManagementRestApi { + static String PATH = "system/admin"; + +} diff --git a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/artifact/MgmtArtifact.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/artifact/MgmtArtifact.java index 0d9e83690..2bcf3c059 100644 --- a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/artifact/MgmtArtifact.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/artifact/MgmtArtifact.java @@ -15,7 +15,6 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonRootName; import com.fasterxml.jackson.annotation.JsonValue; /** @@ -23,7 +22,6 @@ import com.fasterxml.jackson.annotation.JsonValue; */ @JsonInclude(Include.NON_NULL) @JsonIgnoreProperties(ignoreUnknown = true) -@JsonRootName(value = "") public class MgmtArtifact extends MgmtBaseEntity { @JsonProperty(required = true) @@ -41,6 +39,11 @@ public class MgmtArtifact extends MgmtBaseEntity { @JsonProperty private Long size; + public MgmtArtifact() { + super(); + // need for json encoder + } + /** * @param type * the type to set diff --git a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/distributionsettype/MgmtDistributionSetTypeRest.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/distributionsettype/MgmtDistributionSetType.java similarity index 95% rename from hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/distributionsettype/MgmtDistributionSetTypeRest.java rename to hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/distributionsettype/MgmtDistributionSetType.java index 5717863d1..acc4dbb59 100644 --- a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/distributionsettype/MgmtDistributionSetTypeRest.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/distributionsettype/MgmtDistributionSetType.java @@ -25,7 +25,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; */ @JsonInclude(Include.NON_NULL) @JsonIgnoreProperties(ignoreUnknown = true) -public class MgmtDistributionSetTypeRest extends MgmtNamedEntity { +public class MgmtDistributionSetType extends MgmtNamedEntity { @JsonProperty(value = "id", required = true) private Long moduleId; diff --git a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDistributionSetTypeRestApi.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDistributionSetTypeRestApi.java index 28af107f7..84fe8c4e7 100644 --- a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDistributionSetTypeRestApi.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDistributionSetTypeRestApi.java @@ -14,7 +14,7 @@ import org.eclipse.hawkbit.mgmt.json.model.MgmtId; import org.eclipse.hawkbit.mgmt.json.model.PagedList; import org.eclipse.hawkbit.mgmt.json.model.distributionsettype.MgmtDistributionSetTypeRequestBodyPost; import org.eclipse.hawkbit.mgmt.json.model.distributionsettype.MgmtDistributionSetTypeRequestBodyPut; -import org.eclipse.hawkbit.mgmt.json.model.distributionsettype.MgmtDistributionSetTypeRest; +import org.eclipse.hawkbit.mgmt.json.model.distributionsettype.MgmtDistributionSetType; import org.eclipse.hawkbit.mgmt.json.model.softwaremoduletype.MgmtSoftwareModuleType; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; @@ -54,7 +54,7 @@ public interface MgmtDistributionSetTypeRestApi { * response. */ @RequestMapping(method = RequestMethod.GET, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - ResponseEntity> getDistributionSetTypes( + ResponseEntity> getDistributionSetTypes( @RequestParam(value = MgmtRestConstants.REQUEST_PARAMETER_PAGING_OFFSET, defaultValue = MgmtRestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_OFFSET) final int pagingOffsetParam, @RequestParam(value = MgmtRestConstants.REQUEST_PARAMETER_PAGING_LIMIT, defaultValue = MgmtRestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_LIMIT) final int pagingLimitParam, @RequestParam(value = MgmtRestConstants.REQUEST_PARAMETER_SORTING, required = false) final String sortParam, @@ -73,7 +73,7 @@ public interface MgmtDistributionSetTypeRestApi { */ @RequestMapping(method = RequestMethod.GET, value = "/{distributionSetTypeId}", produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - ResponseEntity getDistributionSetType( + ResponseEntity getDistributionSetType( @PathVariable("distributionSetTypeId") final Long distributionSetTypeId); /** @@ -99,7 +99,7 @@ public interface MgmtDistributionSetTypeRestApi { */ @RequestMapping(method = RequestMethod.PUT, value = "/{distributionSetTypeId}", consumes = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - ResponseEntity updateDistributionSetType( + ResponseEntity updateDistributionSetType( @PathVariable("distributionSetTypeId") final Long distributionSetTypeId, @RequestBody final MgmtDistributionSetTypeRequestBodyPut restDistributionSetType); @@ -116,7 +116,7 @@ public interface MgmtDistributionSetTypeRestApi { */ @RequestMapping(method = RequestMethod.POST, consumes = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - ResponseEntity> createDistributionSetTypes( + ResponseEntity> createDistributionSetTypes( @RequestBody final List distributionSetTypes); /** diff --git a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDownloadRestApi.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDownloadRestApi.java index 85c498296..52cd1c991 100644 --- a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDownloadRestApi.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtDownloadRestApi.java @@ -8,8 +8,6 @@ */ package org.eclipse.hawkbit.mgmt.rest.api; -import javax.servlet.http.HttpServletResponse; - import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PathVariable; @@ -36,7 +34,6 @@ public interface MgmtDownloadRestApi { */ @RequestMapping(method = RequestMethod.GET, value = MgmtRestConstants.DOWNLOAD_ID_V1_REQUEST_MAPPING) @ResponseBody - ResponseEntity downloadArtifactByDownloadId(@PathVariable("downloadId") final String downloadId, - final HttpServletResponse response); + ResponseEntity downloadArtifactByDownloadId(@PathVariable("downloadId") final String downloadId); } diff --git a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtSoftwareModuleRestApi.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtSoftwareModuleRestApi.java index dab8cc594..eb601487b 100644 --- a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtSoftwareModuleRestApi.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/rest/api/MgmtSoftwareModuleRestApi.java @@ -53,8 +53,7 @@ public interface MgmtSoftwareModuleRestApi { * failure the JsonResponseExceptionHandler is handling the * response. */ - @RequestMapping(method = RequestMethod.POST, value = "/{softwareModuleId}/artifacts", produces = { - "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) + @RequestMapping(method = RequestMethod.POST, value = "/{softwareModuleId}/artifacts") ResponseEntity uploadArtifact(@PathVariable("softwareModuleId") final Long softwareModuleId, @RequestParam("file") final MultipartFile file, @RequestParam(value = "filename", required = false) final String optionalFileName, diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeMapper.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeMapper.java index 244f07095..d3046f149 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeMapper.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeMapper.java @@ -15,7 +15,7 @@ import java.util.ArrayList; import java.util.List; import org.eclipse.hawkbit.mgmt.json.model.distributionsettype.MgmtDistributionSetTypeRequestBodyPost; -import org.eclipse.hawkbit.mgmt.json.model.distributionsettype.MgmtDistributionSetTypeRest; +import org.eclipse.hawkbit.mgmt.json.model.distributionsettype.MgmtDistributionSetType; import org.eclipse.hawkbit.mgmt.rest.api.MgmtDistributionSetTypeRestApi; import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; import org.eclipse.hawkbit.repository.SoftwareManagement; @@ -76,24 +76,24 @@ final class MgmtDistributionSetTypeMapper { return result; } - static List toTypesResponse(final List types) { - final List response = new ArrayList<>(); + static List toTypesResponse(final List types) { + final List response = new ArrayList<>(); for (final DistributionSetType dsType : types) { response.add(toResponse(dsType)); } return response; } - static List toListResponse(final List types) { - final List response = new ArrayList<>(); + static List toListResponse(final List types) { + final List response = new ArrayList<>(); for (final DistributionSetType dsType : types) { response.add(toResponse(dsType)); } return response; } - static MgmtDistributionSetTypeRest toResponse(final DistributionSetType type) { - final MgmtDistributionSetTypeRest result = new MgmtDistributionSetTypeRest(); + static MgmtDistributionSetType toResponse(final DistributionSetType type) { + final MgmtDistributionSetType result = new MgmtDistributionSetType(); MgmtRestModelMapper.mapNamedToNamed(result, type); result.setKey(type.getKey()); diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeResource.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeResource.java index 8d5239d9e..baa6f2955 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeResource.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeResource.java @@ -14,7 +14,7 @@ import org.eclipse.hawkbit.mgmt.json.model.MgmtId; import org.eclipse.hawkbit.mgmt.json.model.PagedList; import org.eclipse.hawkbit.mgmt.json.model.distributionsettype.MgmtDistributionSetTypeRequestBodyPost; import org.eclipse.hawkbit.mgmt.json.model.distributionsettype.MgmtDistributionSetTypeRequestBodyPut; -import org.eclipse.hawkbit.mgmt.json.model.distributionsettype.MgmtDistributionSetTypeRest; +import org.eclipse.hawkbit.mgmt.json.model.distributionsettype.MgmtDistributionSetType; import org.eclipse.hawkbit.mgmt.json.model.softwaremoduletype.MgmtSoftwareModuleType; import org.eclipse.hawkbit.mgmt.rest.api.MgmtDistributionSetTypeRestApi; import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; @@ -56,7 +56,7 @@ public class MgmtDistributionSetTypeResource implements MgmtDistributionSetTypeR private DistributionSetManagement distributionSetManagement; @Override - public ResponseEntity> getDistributionSetTypes( + public ResponseEntity> getDistributionSetTypes( @RequestParam(value = MgmtRestConstants.REQUEST_PARAMETER_PAGING_OFFSET, defaultValue = MgmtRestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_OFFSET) final int pagingOffsetParam, @RequestParam(value = MgmtRestConstants.REQUEST_PARAMETER_PAGING_LIMIT, defaultValue = MgmtRestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_LIMIT) final int pagingLimitParam, @RequestParam(value = MgmtRestConstants.REQUEST_PARAMETER_SORTING, required = false) final String sortParam, @@ -79,13 +79,13 @@ public class MgmtDistributionSetTypeResource implements MgmtDistributionSetTypeR countModulesAll = distributionSetManagement.countDistributionSetTypesAll(); } - final List rest = MgmtDistributionSetTypeMapper + final List rest = MgmtDistributionSetTypeMapper .toListResponse(findModuleTypessAll.getContent()); return new ResponseEntity<>(new PagedList<>(rest, countModulesAll), HttpStatus.OK); } @Override - public ResponseEntity getDistributionSetType( + public ResponseEntity getDistributionSetType( @PathVariable("distributionSetTypeId") final Long distributionSetTypeId) { final DistributionSetType foundType = findDistributionSetTypeWithExceptionIfNotFound(distributionSetTypeId); @@ -103,7 +103,7 @@ public class MgmtDistributionSetTypeResource implements MgmtDistributionSetTypeR } @Override - public ResponseEntity updateDistributionSetType( + public ResponseEntity updateDistributionSetType( @PathVariable("distributionSetTypeId") final Long distributionSetTypeId, @RequestBody final MgmtDistributionSetTypeRequestBodyPut restDistributionSetType) { final DistributionSetType type = findDistributionSetTypeWithExceptionIfNotFound(distributionSetTypeId); @@ -121,7 +121,7 @@ public class MgmtDistributionSetTypeResource implements MgmtDistributionSetTypeR } @Override - public ResponseEntity> createDistributionSetTypes( + public ResponseEntity> createDistributionSetTypes( @RequestBody final List distributionSetTypes) { final List createdSoftwareModules = distributionSetManagement.createDistributionSetTypes( diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDownloadResource.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDownloadResource.java index ca4959810..10cd2db3b 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDownloadResource.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDownloadResource.java @@ -10,25 +10,26 @@ package org.eclipse.hawkbit.mgmt.rest.resource; import java.io.IOException; -import javax.servlet.http.HttpServletResponse; - import org.apache.commons.io.IOUtils; import org.eclipse.hawkbit.artifact.repository.ArtifactRepository; import org.eclipse.hawkbit.artifact.repository.model.DbArtifact; import org.eclipse.hawkbit.cache.CacheConstants; import org.eclipse.hawkbit.cache.DownloadArtifactCache; import org.eclipse.hawkbit.mgmt.rest.api.MgmtDownloadRestApi; +import org.eclipse.hawkbit.rest.util.RequestResponseContextHolder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.cache.Cache; import org.springframework.cache.Cache.ValueWrapper; +import org.springframework.context.annotation.Scope; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.context.WebApplicationContext; /** * A resource for download artifacts. @@ -37,6 +38,7 @@ import org.springframework.web.bind.annotation.RestController; * */ @RestController +@Scope(value = WebApplicationContext.SCOPE_REQUEST) public class MgmtDownloadResource implements MgmtDownloadRestApi { private static final Logger LOGGER = LoggerFactory.getLogger(MgmtDownloadResource.class); @@ -48,6 +50,9 @@ public class MgmtDownloadResource implements MgmtDownloadRestApi { @Qualifier(CacheConstants.DOWNLOAD_ID_CACHE) private Cache cache; + @Autowired + private RequestResponseContextHolder requestResponseContextHolder; + /** * Handles the GET request for downloading an artifact. * @@ -60,8 +65,7 @@ public class MgmtDownloadResource implements MgmtDownloadRestApi { */ @Override @ResponseBody - public ResponseEntity downloadArtifactByDownloadId(@PathVariable("downloadId") final String downloadId, - final HttpServletResponse response) { + public ResponseEntity downloadArtifactByDownloadId(@PathVariable("downloadId") final String downloadId) { try { final ValueWrapper cacheWrapper = cache.get(downloadId); if (cacheWrapper == null) { @@ -87,7 +91,8 @@ public class MgmtDownloadResource implements MgmtDownloadRestApi { return new ResponseEntity<>(HttpStatus.NOT_FOUND); } try { - IOUtils.copy(artifact.getFileInputStream(), response.getOutputStream()); + IOUtils.copy(artifact.getFileInputStream(), + requestResponseContextHolder.getHttpServletResponse().getOutputStream()); } catch (final IOException e) { LOGGER.error("Cannot copy streams", e); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build(); diff --git a/hawkbit-repository/pom.xml b/hawkbit-repository/pom.xml index b70e00f28..28d20af3e 100644 --- a/hawkbit-repository/pom.xml +++ b/hawkbit-repository/pom.xml @@ -130,12 +130,6 @@ spring-context-support test - - org.eclipse.hawkbit - hawkbit-rest-api - ${project.version} - test - ru.yandex.qatools.allure allure-junit-adaptor diff --git a/pom.xml b/pom.xml index 0260683ba..a95832c79 100644 --- a/pom.xml +++ b/pom.xml @@ -43,7 +43,7 @@ hawkbit-autoconfigure hawkbit-cache-redis hawkbit-test-report - examples +