Commit Graph

218 Commits

Author SHA1 Message Date
Oleg Zhurakousky
9729f26397 Fixed failing webflux test 2019-01-09 17:15:53 +01:00
Dave Syer
62b11a4a26 Add global escape hatch for switching off functional beans
This is useful for example if the user is taking care of the
functional bean registration in some other way, and still wants to
use spring.functional.enabled=false to control that.
2018-12-13 09:33:19 +00:00
Filip Hrisafov
c6e4d1aaf6 Fix possible NPE in FunctionHandlerMapping
Resolves #233

Happens when HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTES is null
Can be seen when using spring-boot-starter-actuator with a scanned function
The path is null because the request wrapped by the WebMvcMetricsFilter is unmodifiable,
so setting the attribute in AbstractHandlerMethodMapping#handleMatch has no effect
2018-11-19 12:11:31 +01:00
Oleg Zhurakousky
417a6a75c1 Clean up tidy up RequestProcessor 2018-11-16 14:12:50 +01:00
Oleg Zhurakousky
c46f25a000 GH-228 Added support for treating text/* CT as a special case
Resolves #228
2018-11-16 12:47:27 +01:00
Dave Syer
aba50816f7 Add support for detecting FunctionRegistration or Function
User can now provide a Function or an ApplicationInitializer. Also
the initializer can create a FunctionRegistration with the handler
name instead of a bean with the handler name. Better control of
input and output types that way.

Fixes gh-231
2018-11-09 12:38:37 +00:00
Oleg Zhurakousky
159e2108a2 Upgraded Kotlin plugin 2018-10-31 11:19:42 +01:00
Dave Syer
c43af567ea Make ObjectMapper optional
Plain text will just be passed straight through.

Fixes gh-226
2018-10-29 09:24:44 +00:00
Dave Syer
1206acd6bf Use INFO instead of ERROR logger for JVM startup message 2018-10-28 08:20:21 +00:00
Oleg Zhurakousky
37e1f0a4da Polished collection support
Polished collection support tp ensure we can support various types of collection such as List, Set etc.
2018-10-27 13:34:06 +02:00
Oleg Zhurakousky
265a9d61aa general cleanup 2018-10-26 16:11:55 +02:00
Dave Syer
bf9ab3ac0a Fix multi-part form handling for WebFlux apps
In WebFlux (but not MVC) you have to explicitly ask for the multi-
part content separately from the form data.

Fixes gh-223
2018-10-26 09:53:17 +01:00
Dave Syer
a735f50daa Inspect FunctionType to extract collection item type
Resurrects some code from #222 (the test didn't go far enough
when that issue was closed).
2018-10-26 08:00:56 +01:00
Dave Syer
c1bce87771 Update POJO sample to use webflux 2018-10-25 16:35:17 +01:00
Dave Syer
f5b09e8d27 Switch back to MVC for pojo sample 2018-10-25 15:22:44 +01:00
Dave Syer
9b9df1e7dc Polish 2018-10-25 15:02:35 +01:00
Dave Syer
2691b20a4b Tighten up multi-valued inputs to "lite" HTTP endpoint
If the user function is single valued but the input is an array,
we should output an array (just like the full webflux version).
2018-10-25 14:06:34 +01:00
Oleg Zhurakousky
2e5c6d22b5 Added support for input Collection param
Added support for function parameter type Collection
Updated both Jackson and Gson mappers
Defined a new toObject() operation on JsonMapper and deprecated the old

Resolves #210
2018-10-25 12:47:41 +01:00
Dave Syer
c3b03a1b11 Use web-application-type=reactive by default if webflux present
We want the default application type to be REACTIVE if webflux is
present (formerly it was NONE). In AWS and Azure we also want
the webflux beans to be switched off in a "lite" application
context (formerly they were unconditional).
2018-10-23 14:03:43 +01:00
Oleg Zhurakousky
9e2cbf49dd Added POJO test for 'lite' server scenario
polishing
2018-10-22 20:23:29 +02:00
Dave Syer
263fe1c632 Add support for Function<Message,Message> in lite server
Fixes gh-221
2018-10-22 16:35:52 +01:00
Dave Syer
592889c0fb Pull BasicStringConverter out into top level class 2018-10-22 14:06:30 +01:00
Oleg Zhurakousky
af717e445d Polishing
Resolves #219
2018-10-22 14:26:59 +02:00
Dave Syer
ba34d4b81b Add @FunctionalSpringBootTest and mini web server
User can run a minimal HTTP app using an app that is a Function
or an ApplicationContextInitializer. Can also test using
@FunctionalSpringBootTest in place of @SpringBootTest.

Add some tests and documentation for functional beans

Make server.address configurable
2018-10-22 14:26:17 +02:00
Dave Syer
033ab38579 Fix message processor in isolated function 2018-09-17 14:47:59 +01:00
Dave Syer
d1c423e161 Add HTTP headers to outgoing messages by default
Some care is required to prevent request-specific headers being
reflected and interfering with content negotiation.

Fixes gh-207
2018-09-12 15:41:34 +01:00
Oleg Zhurakousky
fffe67cdcf Reduced visibility of new classes(for now)
minor polishing
2018-08-14 12:58:00 +02:00
Dave Syer
9d1818839e Add SupplierExporter (HTTP POST of Suppliers on startup)
Add throwable handling to azure base class
2018-08-14 12:57:12 +02:00
Oleg Zhurakousky
947f4f6b71 Cleaned up RequestProcessor and fixed few tests
Resolves #193
2018-08-01 15:36:52 +02:00
Dave Syer
7dd38edf84 Add support for webflux
MVC and Webflux share some common business logic
so it makes sense to put them in the same module.
Also simplifies the MVC code, removing the custom argument
and return value handlers.

Weed out unecessary method param

Unignore some tests
2018-08-01 15:34:59 +02:00
Dave Syer
a840689c95 Remove extraneous if() clause 2018-07-23 14:17:20 +01:00
Dave Syer
41520c4ce4 Fix un-ignored test - content-length should not be propagated 2018-07-23 14:12:24 +01:00
Dave Syer
60edebedcd Uncomment some ignored tests 2018-07-23 12:03:21 +01:00
Oleg Zhurakousky
1839635267 Simplified HeaderUtils in scf-web module 2018-07-10 15:57:23 +02:00
Oleg Zhurakousky
1eb892f4b2 GH-186 ensured FluxReturnValueConfiguration is used
Ensured that regardless of the version of Spring and presense of webflux, the FluxReturnValueConfiguration is used
Resolves #186
2018-07-09 14:55:27 +02:00
Dave Syer
00e2b749d2 First step in 2.0.0. Remove Stream dependencies 2018-06-21 06:35:41 +01:00
Dave Syer
66476559ed Move JsonMapper to spring-cloud-function-context
...in case it is needed elsewhere (see gh-151)
2018-05-21 08:50:35 +01:00
Dave Syer
e34324b5b4 Double check that a Function can return a Mono 2018-05-15 08:43:58 +01:00
Dave Syer
af5f5b78de Tweak support for single valued text HTTP exchange 2018-05-02 13:00:22 -04:00
Dave Syer
b59b43ddc5 Only expose Publisher via FunctionCatalog
Flux.from() is cheap and can be used to marshal the inputs everywhere
internally. With this change users ought to be able to register any
function of any Publisher type.
2018-05-01 12:06:34 -04:00
Dave Syer
ebd1646308 Push deployer configuration out of autoconfig
It tends to pop back into function apps where it is not needed
otherwise. Users that want to use the library need to import
the FunctionConfiguration directly using the
@EnableFunctionDeployer convenience annotation..
2018-04-25 17:37:55 +01:00
Dave Syer
8cf3d7bc5a Add some WebMvcTest support
Fixes gh-156
2018-04-24 16:15:42 +01:00
Dave Syer
0f8c1ce860 Make Jackson optional in web adapter
There is now a JsonMapper strategy with implementations and
autoconfiguration for Gson and Jackson. If Jackson is present
it is preferred (just like in Spring Boot).

Fixes gh-150
2018-04-24 11:57:47 +01:00
Dave Syer
73cf5d418a Update to Boot 1.5.12 2018-04-24 10:25:21 +01:00
Dave Syer
2df5dcc992 Compiler warnings 2018-04-24 09:46:48 +01:00
bishoy
0e41b8acc5 Support incoming application/x-www-form-urlencoded content
Fixes #129
2018-04-24 08:55:22 +01:00
Dave Syer
5aeba1ea96 Convert Consumer<Foo> to Function<Flux<Foo>,Mono<Void>>
This results in a better experience for users because the consumer
that they write is only applied to a Flux that is subscribed to
by the framework once. It gives better control over the flow of
foos, e.g. if some component wants to subscribe on a thread.
2018-03-26 10:06:13 +01:00
Dave Syer
0be5f14766 Provide new config options for streams enabling composition
User can switch off source or sink behaviour (the default is to bind
to input and output streams), and then configure the name of a
supplier (for a source) or consumer (for a sink).
2018-03-18 14:19:51 +00:00
Dave Syer
8ab4d61bb4 Align MVC handling between Spring 4 and Spring 5
A Spring Boot 2.0 app should behave the same as a Spering Boot 1.5
app with this change. The key thing was to change the return type
of the FunctionController and move the computation of single
valuedness for the output there (instead of trying to do it in the
return value handler, which isn't used in Spring 5).
2018-03-16 07:08:43 -04:00
Dave Syer
740a94b202 Make Gson special config conditional on Boot 1.5
That was the samples still work with Spring Boot 2.0.0.

Fixes gh-157 (but we should add some tests)
2018-03-09 12:17:24 +00:00