You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cxf.apache.org by Johannes Fiala <jo...@fwd.at> on 2016/11/06 19:32:25 UTC

CXF BeanValidation annotation support

Hi there,

The JAXB annotation plugin provided by krasa 
(https://github.com/krasa/krasa-jaxb-tools) is no longer supported, does 
it make sense to contact the author to merge this into CXF master?

Maybe we could also get the BeanValidation for parameters working 
(https://github.com/apache/cxf/pull/146/files) to improve the overall 
BeanValidation experience.

Is anybody interested in putting this on the agenda for the hackathon?

Best regards,
Johannes

Re: CXF BeanValidation annotation support

Posted by David Karlsen <da...@gmail.com>.
That would be great - we use it a lot and are happy with it.

Den søndag 6. november 2016 skrev Johannes Fiala <jo...@fwd.at>
følgende:

> Hi there,
>
> The JAXB annotation plugin provided by krasa (
> https://github.com/krasa/krasa-jaxb-tools) is no longer supported, does
> it make sense to contact the author to merge this into CXF master?
>
> Maybe we could also get the BeanValidation for parameters working (
> https://github.com/apache/cxf/pull/146/files) to improve the overall
> BeanValidation experience.
>
> Is anybody interested in putting this on the agenda for the hackathon?
>
> Best regards,
> Johannes
>


-- 
--
David J. M. Karlsen - http://www.linkedin.com/in/davidkarlsen

Re: CXF BeanValidation annotation support - WadlGenerator

Posted by Sergey Beryozkin <sb...@gmail.com>.
Hi,

I'm not sure it will help us get any agreement if we will keep multiple 
threads running. Lets focus on trying to find a single simple solution 
which works. I disagree nesting incomplete schema fragments is worth 
pursuing. Few comments below

On 08/11/16 08:53, J. Fiala wrote:
> Hi Sergey,
>
> I'd like to sum up and list all the available options for WadlGenerator
> we have:
>
> a) Nested restrictions
>
> <param name="username" style="query" type="myns:username"
> required="false" >
> <xs:simpleType>
> <xs:restriction base="xs:string">
> <xs:maxLength value="50" />
> </xs:restriction>
> </param>
>
> Pro:
> + Very easy to implement
I doubt it
> + Standard schema extension (100% portable)
What exactly are you talking about here. The above is invalid. What 
portability are you referring too ? Who will understand by looking at 
that it is meant for the bean validation and who else will process it 
aside from CXF ? If you can reach an agreement with the Jersey team on 
supporting this option then I will consider supporting it for CXF.

> + Swagger2Feature uses the same approach (listing restrictions directly
> inline at the property location)
> Contra:
> - Developers have to extract the simpletypes themselves
> - Usage of nested simpletypes is not very common, usually simpletypes
> are extracted to their own definition (see b)
>
> b) Simpletypes
>
> Automatically generate simpletypes based on conventions
>
> <param name="username" style="query" type="myns:string_max_50"
> required="false" />
>
> <xs:simpleType name="string_max_50">
>         <xs:restriction base="xs:string">
>             <xs:maxLength value="50"/>
>         </xs:restriction>
>     </xs:simpleType>
>
> Pro:
> + Developers can easily customize this and further refine the schema
> + Uses standard schema restrictions (100% portable)
> + Even improves the Swagger2Feature approach by extracting used
> simpletypes to separate definition (maybe suitable as an extension for
> the Swagger2Feature!?)
> Contra:
> - simpleType-names have to be autogenerated, but if a proper mapping is
> used I think this could be nice. Only for patterns we would have to
> generate the simpleType-name (e.g. pattern_1..n or so).
>
> c) Custom CXF extension
>
> <wadl:param name="username" required="true">
> <cxfrs:beanValidation>
>   <cxfrs:minLength value="1"/>
>   <cxfrs:maxLength value="100" />
> </cxfrs:beanValidation>
> </wadl:param>
>
> Pro:
> + Separate extension, can be kept separately
> Contra:
> - Custom extension only supported by CXF, not portable
Nonetheless it no less portable than an incomplete schema fragments and 
IMHO it is a clean solution dedicated to carrying the info about 
validating the optional properties which live outside of the XML schema 
space
> - If used for complexTypes as well not suitable for schema validation!
>

I'm sorry, this does not make sense to me, which complex types. The only 
task is to bean validate optional String or other simple query/etc 
parameters which have nothing to do with the wadl:grammar


> d) Usage of complexTypes for parameters
>
> Pro:
> ?
> Contra:
> - parameter types should map to simple types as they are simle types
> - Custom extension only supported by CXF, not portable
> - Violates standard WADL schema
>
> My favorite is option b) as it would be suitable for the restrictions in
> complexTypes if we eventually can pick them up using the proper or
> extending an existing Jaxb compiler to pick up the beanvalidation
> annotations.
> Additionally, we could use the autogenerated simpletype names maybe for
> the Swagger2Feature as well to make it easier to extract field types
> (definitions).
>

Thanks, Sergey

> Best regards,
> Johannes
>
>
> Am 07.11.2016 um 23:52 schrieb J. Fiala:
>> Hi Sergey,
>>
>> I think we should split the whole thing into two topics (issues/PRs):
>>
>> 1.) SourceGenerator for contract-first-only with 100% portability
>> This should be supported for people who only practice contract first
>> and don't care of the WadlGenerator and simply want to use clean
>> simple/nested types for their WADL parameters. This warrants 100%
>> portability for the WADL contract.
>>
>> a) support simpletypes:
>>
>> <param name="username" style="query" type="myns:username"
>> required="false" />
>>
>> <xs:simpleType name="username">
>>         <xs:restriction base="xs:string">
>>             <xs:maxLength value="50"/>
>>         </xs:restriction>
>>     </xs:simpleType>
>>
>> This is what I already implemented, but only for the directly resolved
>> type (like example here), here I could go deeper as well to further
>> restrictions (<xs restriction base="mydeepersimpletype"...>).
>>
>> b) support nested types:
>>
>> <param name="username" style="query" type="myns:username"
>> required="false" >
>> <xs:simpleType>
>> <xs:restriction base="xs:string">
>> <xs:maxLength value="50" />
>> </xs:restriction>
>> </param>
>>
>> This is what I already implemented (check if nested simpleType is
>> present + pick it up).
>>
>> If you like to I can rework the PR
>> https://github.com/apache/cxf/pull/146 and add only the implementation
>> of SourceGenerator so you can merge conveniently.
>>
>> 2.) BeanValidation for the WadlGenerator and for SourceGenerator for
>> easier roundtrip development
>>
>> I think the main task should be to pickup the beanvalidation
>> annotations for both wadl:param AND xs:element/xs:complexTypes.
>> If we only add support for parameters and don't support it in the
>> complextypes it is only  the minor part of the deal.
>> However, with the apporach to get working what is possible without big
>> effort, we can in first place only support wadl:param.
>>
>> For wadl:param:
>> For @NotNull I'd prefer to use wadl:param@required, no need for the
>> custom namespace here.
>> So I can start with @Size (minLength/maxLength) here and setup a first
>> implementation like the following.
>>
>> WadlGenerator:
>> <wadl:param name="username" required="true">
>> <cxfrs:beanValidation>
>>   <cxfrs:minLength value="1"/>
>>   <cxfrs:maxLength value="100" />
>> </cxfrs:beanValidation>
>> </wadl:param>
>>
>> SourceGenerator: look for nested beanValidation tag and pick
>> validations up.
>>
>> After implementing this, the next step would be to support the custom
>> tag for the complexTypes/JAXB-processing...
>>
>> If you agree with that, I suggest setting up two separate Jira issues
>> so we can move all the further comments there.
>>
>> What do you think of this idea?
>>
>> Best regards,
>>
>> Johannes
>>
>>
>>
>> Am 07.11.2016 um 22:12 schrieb Sergey Beryozkin:
>>> Perhaps you can start with supporting a not null only ?
>>> If a parameter @required is set (this can be enabled on the WADL to
>>> Java if BeanVal NotNull is set) then SourceGenerator can add this
>>> annotation back if its -beanValidation is set.
>>> The only restriction is that please use String class names of the
>>> BeanValidation for now until we figure our a neater approach to avoid
>>> the strong BeanVal dependencies
>>>
>>> Cheers, Sergey
>>> On 07/11/16 21:08, Sergey Beryozkin wrote:
>>>> Hi Johannes
>>>>
>>>> Option 2 already works in the WADL to Java case. The only problem with
>>>> it, as discussed earlier, is that WADL grammar is meant to represent
>>>> the
>>>> data representations, but SourceGenerator does not enforce it right now
>>>> and referring from the parameters to the schema elements is still
>>>> supported.
>>>>
>>>> IMHO it makes sense to have a solution which works both ways first
>>>> without doing a massive effort as we don't really have time/scope
>>>> for it.
>>>>
>>>> Completing Option2 support will only require adding the parameter bean
>>>> classes to the JAXB context.
>>>> Option 1 will require a bit more work at the start but once you have
>>>> something like
>>>> <wadl:param>
>>>> <cxfrs:beanValidation>
>>>>   <notNull/>
>>>>   <someOtherBeanValName a="b" "c"="d">
>>>> </cxfrs:beanValidation>
>>>> </wadl:param>
>>>>
>>>> then it will become quite straigtforward on the WADL to Java side...
>>>>
>>>> Ideally one would even allocate a namespace which would extend the core
>>>> WADL namespace. Ex,
>>>>
>>>> http://wadl.dev.java.net/extensions/bval
>>>>
>>>> Might be worth investigating if it is allowed or not.
>>>>
>>>> Cheers, Sergey
>>>>
>>>> On 07/11/16 18:01, J. Fiala wrote:
>>>>> Hi Sergey,
>>>>>
>>>>> Thx for the analysis.
>>>>>
>>>>> Regarding the WadlGenerator I'd also prefer option 1 opposing to
>>>>> option
>>>>> 2 (without the original idea available).
>>>>>
>>>>> Regarding the SourceGenerator I think it should support clean
>>>>> parameter
>>>>> type references in any way. So even if we follow option 1, we would
>>>>> need
>>>>> to support correctly referenced simpletypes from parameters as well as
>>>>> the cxfrs:beanValidation extension.
>>>>>
>>>>> But probably it's easier to discuss this with examples together :).
>>>>>
>>>>> Best regards,
>>>>> Johannes
>>>>>
>>>>>
>>>>> Am 07.11.2016 um 18:13 schrieb Sergey Beryozkin:
>>>>>> Hi Johannes
>>>>>>
>>>>>> I've looked through various messages and pull requests.
>>>>>>
>>>>>> One approach was to insert incomplete schema fragments into
>>>>>> wadl:param
>>>>>> with the implicit understanding it was meant to create BeanVal
>>>>>> parameters and I felt quite uncomfortable about pursuing that
>>>>>> particular path.
>>>>>>
>>>>>> The last idea we were trying to narrow upon was using a separate XML
>>>>>> schema grammar which would be used to create Bean validation if a
>>>>>> bean
>>>>>> validation flag is set. This is a bit more WADL friendly but again it
>>>>>> does not look to me like a solution which says "this is to support
>>>>>> the
>>>>>> bean validation" for parameters and I'm finding it difficult to see
>>>>>> how it will work both ways.
>>>>>>
>>>>>> I'd to revisit these 2 proposals
>>>>>>
>>>>>> 1. have a CXF WADL extension, ex, cxfrs:beanValidation. This will be
>>>>>> in wadl:param and will be optimized around supporting all whatever is
>>>>>> needed to generate BeanVal annotations and represent any BeanVal in
>>>>>> the Java to WADL case.
>>>>>> This works both ways and IMHO simpler and cleaner, instead of trying
>>>>>> to 'carry' the bean validation info via XML schema fragments, with
>>>>>> all
>>>>>> the limitations which seems ultimately wrong to me.
>>>>>> cxfrs:beanValidation will be of course only recognized by a CXF
>>>>>> wadl-to-java tool but I feel this approach will have more chances to
>>>>>> act getting more support via other provider's tool extensions than
>>>>>> the
>>>>>> pseudo XML schema approach which is in fact would be equally CXF
>>>>>> specific.
>>>>>>
>>>>>> 2. Do not do anything at all but have wadl:param refer to XML complex
>>>>>> types. As I said earlier, this will require the use of
>>>>>> ParamConverterProvider which will have a chance to validate the
>>>>>> beans.
>>>>>> These beans will already have BeanVal annotations in them. This also
>>>>>> works both ways - on the WADLToJava side you'd just add these bean
>>>>>> classes to a JAXBContext for the JAXB schema gen to add the relevant
>>>>>> schema definitions.
>>>>>>
>>>>>> My preference is option 1).
>>>>>>
>>>>>> We can discuss the options next week too,
>>>>>>
>>>>>> Thanks, Sergey
>>>>>>
>>>>>> On 06/11/16 22:25, Sergey Beryozkin wrote:
>>>>>>> Hi Johannes
>>>>>>>
>>>>>>> Can you please briefly summarize the proposed changes to WADLGen &
>>>>>>> SourceGen ? There've been many emails and I recall I thought more
>>>>>>> work
>>>>>>> was needed to keep both approaches in sync. Right now I see
>>>>>>> WADLGen has
>>>>>>> some explicit BeanVal dependencies. I def remember objecting to this
>>>>>>> particular approach.
>>>>>>> So how this can be generalized, be WADL friendly, and work both
>>>>>>> ways ?
>>>>>>>
>>>>>>> Sergey
>>>>>>> On 06/11/16 21:59, J. Fiala wrote:
>>>>>>>> Hi Sergey,
>>>>>>>>
>>>>>>>> OK, I agree 100%, it would be great to have some progress with
>>>>>>>> the PR
>>>>>>>> here if you have time for it.
>>>>>>>>
>>>>>>>> Best regards,
>>>>>>>> Johannes
>>>>>>>>
>>>>>>>>
>>>>>>>> Am 06.11.2016 um 22:58 schrieb Sergey Beryozkin:
>>>>>>>>> Hi Johannes
>>>>>>>>>
>>>>>>>>> I'd say the WADL-related updates should be limited to
>>>>>>>>> WADLGen/SourceGen
>>>>>>>>>
>>>>>>>>> Cheers, Sergey
>>>>>>>>> On 06/11/16 21:46, J. Fiala wrote:
>>>>>>>>>> Hi Sergey,
>>>>>>>>>>
>>>>>>>>>> I can ask him or simply do a fork of the complete project and
>>>>>>>>>> then
>>>>>>>>>> cover
>>>>>>>>>> it under the Apache license provided the author agrees with this.
>>>>>>>>>>
>>>>>>>>>> Do you think further BeanValidation extensions for CXF should
>>>>>>>>>> also go
>>>>>>>>>> there and I should subclass the WadlGenerator/SourceGenerator? Or
>>>>>>>>>> shall
>>>>>>>>>> we merge this at the Hackathon at ApacheCon maybe?
>>>>>>>>>>
>>>>>>>>>> Best regards,
>>>>>>>>>> Johannes
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Am 06.11.2016 um 22:40 schrieb Sergey Beryozkin:
>>>>>>>>>>> Hi Johannes
>>>>>>>>>>>
>>>>>>>>>>> Would it make sense asking the author to give you the commit
>>>>>>>>>>> rights to
>>>>>>>>>>> the project ?
>>>>>>>>>>> IMHO it can't go to the CXF master though perhaps an option of
>>>>>>>>>>> opening
>>>>>>>>>>> a CXF sub-project is viable which will need to be discussed on
>>>>>>>>>>> the CXF
>>>>>>>>>>> dev list. Whether it will stay where it is now or end up as a
>>>>>>>>>>> CXF
>>>>>>>>>>> project, you'd have to support and release it, so I'm not
>>>>>>>>>>> sure what
>>>>>>>>>>> difference would it make if it ended up being a CXF sub-project
>>>>>>>>>>> given
>>>>>>>>>>> it already has a home...
>>>>>>>>>>>
>>>>>>>>>>> Thanks, Sergey
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> On 06/11/16 19:32, Johannes Fiala wrote:
>>>>>>>>>>>> Hi there,
>>>>>>>>>>>>
>>>>>>>>>>>> The JAXB annotation plugin provided by krasa
>>>>>>>>>>>> (https://github.com/krasa/krasa-jaxb-tools) is no longer
>>>>>>>>>>>> supported,
>>>>>>>>>>>> does
>>>>>>>>>>>> it make sense to contact the author to merge this into CXF
>>>>>>>>>>>> master?
>>>>>>>>>>>>
>>>>>>>>>>>> Maybe we could also get the BeanValidation for parameters
>>>>>>>>>>>> working
>>>>>>>>>>>> (https://github.com/apache/cxf/pull/146/files) to improve the
>>>>>>>>>>>> overall
>>>>>>>>>>>> BeanValidation experience.
>>>>>>>>>>>>
>>>>>>>>>>>> Is anybody interested in putting this on the agenda for the
>>>>>>>>>>>> hackathon?
>>>>>>>>>>>>
>>>>>>>>>>>> Best regards,
>>>>>>>>>>>> Johannes
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>>
>>
>>
>


-- 
Sergey Beryozkin

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

CXF BeanValidation annotation support - WadlGenerator

Posted by "J. Fiala" <mo...@fwd.at>.
Hi Sergey,

I'd like to sum up and list all the available options for WadlGenerator 
we have:

a) Nested restrictions

<param name="username" style="query" type="myns:username" 
required="false" >
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="50" />
</xs:restriction>
</param>

Pro:
+ Very easy to implement
+ Standard schema extension (100% portable)
+ Swagger2Feature uses the same approach (listing restrictions directly 
inline at the property location)
Contra:
- Developers have to extract the simpletypes themselves
- Usage of nested simpletypes is not very common, usually simpletypes 
are extracted to their own definition (see b)

b) Simpletypes

Automatically generate simpletypes based on conventions

<param name="username" style="query" type="myns:string_max_50" 
required="false" />

<xs:simpleType name="string_max_50">
         <xs:restriction base="xs:string">
             <xs:maxLength value="50"/>
         </xs:restriction>
     </xs:simpleType>

Pro:
+ Developers can easily customize this and further refine the schema
+ Uses standard schema restrictions (100% portable)
+ Even improves the Swagger2Feature approach by extracting used 
simpletypes to separate definition (maybe suitable as an extension for 
the Swagger2Feature!?)
Contra:
- simpleType-names have to be autogenerated, but if a proper mapping is 
used I think this could be nice. Only for patterns we would have to 
generate the simpleType-name (e.g. pattern_1..n or so).

c) Custom CXF extension

<wadl:param name="username" required="true">
<cxfrs:beanValidation>
   <cxfrs:minLength value="1"/>
   <cxfrs:maxLength value="100" />
</cxfrs:beanValidation>
</wadl:param>

Pro:
+ Separate extension, can be kept separately
Contra:
- Custom extension only supported by CXF, not portable
- If used for complexTypes as well not suitable for schema validation!

d) Usage of complexTypes for parameters

Pro:
?
Contra:
- parameter types should map to simple types as they are simle types
- Custom extension only supported by CXF, not portable
- Violates standard WADL schema

My favorite is option b) as it would be suitable for the restrictions in 
complexTypes if we eventually can pick them up using the proper or 
extending an existing Jaxb compiler to pick up the beanvalidation 
annotations.
Additionally, we could use the autogenerated simpletype names maybe for 
the Swagger2Feature as well to make it easier to extract field types 
(definitions).

Best regards,
Johannes


Am 07.11.2016 um 23:52 schrieb J. Fiala:
> Hi Sergey,
>
> I think we should split the whole thing into two topics (issues/PRs):
>
> 1.) SourceGenerator for contract-first-only with 100% portability
> This should be supported for people who only practice contract first 
> and don't care of the WadlGenerator and simply want to use clean 
> simple/nested types for their WADL parameters. This warrants 100% 
> portability for the WADL contract.
>
> a) support simpletypes:
>
> <param name="username" style="query" type="myns:username" 
> required="false" />
>
> <xs:simpleType name="username">
>         <xs:restriction base="xs:string">
>             <xs:maxLength value="50"/>
>         </xs:restriction>
>     </xs:simpleType>
>
> This is what I already implemented, but only for the directly resolved 
> type (like example here), here I could go deeper as well to further 
> restrictions (<xs restriction base="mydeepersimpletype"...>).
>
> b) support nested types:
>
> <param name="username" style="query" type="myns:username" 
> required="false" >
> <xs:simpleType>
> <xs:restriction base="xs:string">
> <xs:maxLength value="50" />
> </xs:restriction>
> </param>
>
> This is what I already implemented (check if nested simpleType is 
> present + pick it up).
>
> If you like to I can rework the PR 
> https://github.com/apache/cxf/pull/146 and add only the implementation 
> of SourceGenerator so you can merge conveniently.
>
> 2.) BeanValidation for the WadlGenerator and for SourceGenerator for 
> easier roundtrip development
>
> I think the main task should be to pickup the beanvalidation 
> annotations for both wadl:param AND xs:element/xs:complexTypes.
> If we only add support for parameters and don't support it in the 
> complextypes it is only  the minor part of the deal.
> However, with the apporach to get working what is possible without big 
> effort, we can in first place only support wadl:param.
>
> For wadl:param:
> For @NotNull I'd prefer to use wadl:param@required, no need for the 
> custom namespace here.
> So I can start with @Size (minLength/maxLength) here and setup a first 
> implementation like the following.
>
> WadlGenerator:
> <wadl:param name="username" required="true">
> <cxfrs:beanValidation>
>   <cxfrs:minLength value="1"/>
>   <cxfrs:maxLength value="100" />
> </cxfrs:beanValidation>
> </wadl:param>
>
> SourceGenerator: look for nested beanValidation tag and pick 
> validations up.
>
> After implementing this, the next step would be to support the custom 
> tag for the complexTypes/JAXB-processing...
>
> If you agree with that, I suggest setting up two separate Jira issues 
> so we can move all the further comments there.
>
> What do you think of this idea?
>
> Best regards,
>
> Johannes
>
>
>
> Am 07.11.2016 um 22:12 schrieb Sergey Beryozkin:
>> Perhaps you can start with supporting a not null only ?
>> If a parameter @required is set (this can be enabled on the WADL to 
>> Java if BeanVal NotNull is set) then SourceGenerator can add this 
>> annotation back if its -beanValidation is set.
>> The only restriction is that please use String class names of the 
>> BeanValidation for now until we figure our a neater approach to avoid 
>> the strong BeanVal dependencies
>>
>> Cheers, Sergey
>> On 07/11/16 21:08, Sergey Beryozkin wrote:
>>> Hi Johannes
>>>
>>> Option 2 already works in the WADL to Java case. The only problem with
>>> it, as discussed earlier, is that WADL grammar is meant to represent 
>>> the
>>> data representations, but SourceGenerator does not enforce it right now
>>> and referring from the parameters to the schema elements is still
>>> supported.
>>>
>>> IMHO it makes sense to have a solution which works both ways first
>>> without doing a massive effort as we don't really have time/scope 
>>> for it.
>>>
>>> Completing Option2 support will only require adding the parameter bean
>>> classes to the JAXB context.
>>> Option 1 will require a bit more work at the start but once you have
>>> something like
>>> <wadl:param>
>>> <cxfrs:beanValidation>
>>>   <notNull/>
>>>   <someOtherBeanValName a="b" "c"="d">
>>> </cxfrs:beanValidation>
>>> </wadl:param>
>>>
>>> then it will become quite straigtforward on the WADL to Java side...
>>>
>>> Ideally one would even allocate a namespace which would extend the core
>>> WADL namespace. Ex,
>>>
>>> http://wadl.dev.java.net/extensions/bval
>>>
>>> Might be worth investigating if it is allowed or not.
>>>
>>> Cheers, Sergey
>>>
>>> On 07/11/16 18:01, J. Fiala wrote:
>>>> Hi Sergey,
>>>>
>>>> Thx for the analysis.
>>>>
>>>> Regarding the WadlGenerator I'd also prefer option 1 opposing to 
>>>> option
>>>> 2 (without the original idea available).
>>>>
>>>> Regarding the SourceGenerator I think it should support clean 
>>>> parameter
>>>> type references in any way. So even if we follow option 1, we would 
>>>> need
>>>> to support correctly referenced simpletypes from parameters as well as
>>>> the cxfrs:beanValidation extension.
>>>>
>>>> But probably it's easier to discuss this with examples together :).
>>>>
>>>> Best regards,
>>>> Johannes
>>>>
>>>>
>>>> Am 07.11.2016 um 18:13 schrieb Sergey Beryozkin:
>>>>> Hi Johannes
>>>>>
>>>>> I've looked through various messages and pull requests.
>>>>>
>>>>> One approach was to insert incomplete schema fragments into 
>>>>> wadl:param
>>>>> with the implicit understanding it was meant to create BeanVal
>>>>> parameters and I felt quite uncomfortable about pursuing that
>>>>> particular path.
>>>>>
>>>>> The last idea we were trying to narrow upon was using a separate XML
>>>>> schema grammar which would be used to create Bean validation if a 
>>>>> bean
>>>>> validation flag is set. This is a bit more WADL friendly but again it
>>>>> does not look to me like a solution which says "this is to support 
>>>>> the
>>>>> bean validation" for parameters and I'm finding it difficult to see
>>>>> how it will work both ways.
>>>>>
>>>>> I'd to revisit these 2 proposals
>>>>>
>>>>> 1. have a CXF WADL extension, ex, cxfrs:beanValidation. This will be
>>>>> in wadl:param and will be optimized around supporting all whatever is
>>>>> needed to generate BeanVal annotations and represent any BeanVal in
>>>>> the Java to WADL case.
>>>>> This works both ways and IMHO simpler and cleaner, instead of trying
>>>>> to 'carry' the bean validation info via XML schema fragments, with 
>>>>> all
>>>>> the limitations which seems ultimately wrong to me.
>>>>> cxfrs:beanValidation will be of course only recognized by a CXF
>>>>> wadl-to-java tool but I feel this approach will have more chances to
>>>>> act getting more support via other provider's tool extensions than 
>>>>> the
>>>>> pseudo XML schema approach which is in fact would be equally CXF
>>>>> specific.
>>>>>
>>>>> 2. Do not do anything at all but have wadl:param refer to XML complex
>>>>> types. As I said earlier, this will require the use of
>>>>> ParamConverterProvider which will have a chance to validate the 
>>>>> beans.
>>>>> These beans will already have BeanVal annotations in them. This also
>>>>> works both ways - on the WADLToJava side you'd just add these bean
>>>>> classes to a JAXBContext for the JAXB schema gen to add the relevant
>>>>> schema definitions.
>>>>>
>>>>> My preference is option 1).
>>>>>
>>>>> We can discuss the options next week too,
>>>>>
>>>>> Thanks, Sergey
>>>>>
>>>>> On 06/11/16 22:25, Sergey Beryozkin wrote:
>>>>>> Hi Johannes
>>>>>>
>>>>>> Can you please briefly summarize the proposed changes to WADLGen &
>>>>>> SourceGen ? There've been many emails and I recall I thought more 
>>>>>> work
>>>>>> was needed to keep both approaches in sync. Right now I see 
>>>>>> WADLGen has
>>>>>> some explicit BeanVal dependencies. I def remember objecting to this
>>>>>> particular approach.
>>>>>> So how this can be generalized, be WADL friendly, and work both 
>>>>>> ways ?
>>>>>>
>>>>>> Sergey
>>>>>> On 06/11/16 21:59, J. Fiala wrote:
>>>>>>> Hi Sergey,
>>>>>>>
>>>>>>> OK, I agree 100%, it would be great to have some progress with 
>>>>>>> the PR
>>>>>>> here if you have time for it.
>>>>>>>
>>>>>>> Best regards,
>>>>>>> Johannes
>>>>>>>
>>>>>>>
>>>>>>> Am 06.11.2016 um 22:58 schrieb Sergey Beryozkin:
>>>>>>>> Hi Johannes
>>>>>>>>
>>>>>>>> I'd say the WADL-related updates should be limited to
>>>>>>>> WADLGen/SourceGen
>>>>>>>>
>>>>>>>> Cheers, Sergey
>>>>>>>> On 06/11/16 21:46, J. Fiala wrote:
>>>>>>>>> Hi Sergey,
>>>>>>>>>
>>>>>>>>> I can ask him or simply do a fork of the complete project and 
>>>>>>>>> then
>>>>>>>>> cover
>>>>>>>>> it under the Apache license provided the author agrees with this.
>>>>>>>>>
>>>>>>>>> Do you think further BeanValidation extensions for CXF should
>>>>>>>>> also go
>>>>>>>>> there and I should subclass the WadlGenerator/SourceGenerator? Or
>>>>>>>>> shall
>>>>>>>>> we merge this at the Hackathon at ApacheCon maybe?
>>>>>>>>>
>>>>>>>>> Best regards,
>>>>>>>>> Johannes
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Am 06.11.2016 um 22:40 schrieb Sergey Beryozkin:
>>>>>>>>>> Hi Johannes
>>>>>>>>>>
>>>>>>>>>> Would it make sense asking the author to give you the commit
>>>>>>>>>> rights to
>>>>>>>>>> the project ?
>>>>>>>>>> IMHO it can't go to the CXF master though perhaps an option of
>>>>>>>>>> opening
>>>>>>>>>> a CXF sub-project is viable which will need to be discussed on
>>>>>>>>>> the CXF
>>>>>>>>>> dev list. Whether it will stay where it is now or end up as a 
>>>>>>>>>> CXF
>>>>>>>>>> project, you'd have to support and release it, so I'm not 
>>>>>>>>>> sure what
>>>>>>>>>> difference would it make if it ended up being a CXF sub-project
>>>>>>>>>> given
>>>>>>>>>> it already has a home...
>>>>>>>>>>
>>>>>>>>>> Thanks, Sergey
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On 06/11/16 19:32, Johannes Fiala wrote:
>>>>>>>>>>> Hi there,
>>>>>>>>>>>
>>>>>>>>>>> The JAXB annotation plugin provided by krasa
>>>>>>>>>>> (https://github.com/krasa/krasa-jaxb-tools) is no longer
>>>>>>>>>>> supported,
>>>>>>>>>>> does
>>>>>>>>>>> it make sense to contact the author to merge this into CXF 
>>>>>>>>>>> master?
>>>>>>>>>>>
>>>>>>>>>>> Maybe we could also get the BeanValidation for parameters 
>>>>>>>>>>> working
>>>>>>>>>>> (https://github.com/apache/cxf/pull/146/files) to improve the
>>>>>>>>>>> overall
>>>>>>>>>>> BeanValidation experience.
>>>>>>>>>>>
>>>>>>>>>>> Is anybody interested in putting this on the agenda for the
>>>>>>>>>>> hackathon?
>>>>>>>>>>>
>>>>>>>>>>> Best regards,
>>>>>>>>>>> Johannes
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>
>>>
>>
>>
>
>


Re: CXF BeanValidation annotation support

Posted by Sergey Beryozkin <sb...@gmail.com>.
Sorry one more typo fix,

> Enforcing the presence of 'a' effectively makes your top level API being
> not "/bar" but "/bar?a=..." which is not good IMHO.
>
> Providing some top level support in CXF does seem to me a good
> investment of time.
... does not seem...


Re: CXF BeanValidation annotation support

Posted by Sergey Beryozkin <sb...@gmail.com>.
Hi Johannes

Thanks, while I accept I may be wrong I'd rather us indeed have a bit of 
break and reflect on all the 3 available options - perhaps some ideas 
will come later on

Enjoy the weekends
Sergey
On 18/11/16 22:32, J. Fiala wrote:
> Hi Sergey,
>
> Thank you for explaining all of this once more, I'll rethink this and
> then come back to you :).
>
> Thanks & Best regards,
> Johannes
>
>
> Am 18.11.2016 um 22:17 schrieb Sergey Beryozkin:
>> Hi Johannes
>>
>> As I said we've discussed all the options in depth twice and as far as
>> I recall we eve came to some conclusion with respect to an approach
>> where incomplete XMLSchema fragments are used to model the Java bean
>> validation - where I asked you to seek some support from the original
>> Sun project.
>>
>> But let me explain my position one more time.
>>
>> Option 1. Use incomplete XML Schema fragments - IMHO this is a
>> non-interoperable and at least IMHO is a stretch with some obvious
>> limitations such as the one related to your idea of using some
>> embedded XML schema types to model something more complex than NotNull
>> or the fact that schema fragments are incomplete, and it is hard to
>> make it work both ways.
>>
>> Option2. Introduce a CXF extension designed for representing whatever
>> info needed related to the validation of bean parameters - this will
>> scale and IMHO will have a better chance to eventually become a more
>> accepted generic solution.
>>
>> You prefer Option1, I Option2, we keep going in circles :-), and at
>> this stage IMHO it will be good for us to politely agree to disagree.
>>
>> The other thing I'd like note though is as I said earlier, the whole
>> idea of making the optional parameters (query params are optional by
>> theor nature) strongly required is questionable IMHO.
>>
>> If you have a service at
>> /bar
>>
>> then this service, being a good HTTP service, should be able to accept
>> /bar without /bar?a=c.
>>
>> This is what for ex JAX-RS DefaultValue is for. Or a good service
>> would simply return the complete /bar representation if an optional
>> parameter is missing.
>>
>> Enforcing the presence of 'a' effectively makes your top level API
>> being not "/bar" but "/bar?a=..." which is not good IMHO.
>>
>> Providing some top level support in CXF does seem to me a good
>> investment of time.
>>
>> Finally, you have option 3:
>> @GET
>> someMethod(@QueryParam("a") MyBean bean) {}
>>
>> This will work OOB for wadl-to-java and will be trivial enough to
>> support for Java to Wadl. Works both ways, standard JAX-RS 2.0, you
>> control the instantiation of MyBean in your custom
>> ParamConverter<MyBean> and there you will validate this bean as needed.
>>
>> Hope you appreciate I've tried to justify my position as much as I can.
>> Sometimes it is good to have a break in discussions which go too long,
>> think about the whole issue a bit more and then may be revisit it later
>>
>> Thanks, Sergey
>>
>>
>> On 18/11/16 21:27, J. Fiala wrote:
>>> Hi Sergey,
>>>
>>> So far you can reference any simpletype at the WADL, but it seems the
>>> idea of adding picking up the restrictions and using it for
>>> beanvalidation is new (I found one related question dated 2006:
>>> http://markmail.org/message/2pih4jwd2dn6xidv#query:+page:1+mid:6wjzispjnd2bfnyq+state:results).
>>>
>>>
>>>
>>> However, I think this would be the most intuitive way and would also
>>> allow users to reuse existing simpletypes in their schema they use in
>>> complextypes (I know I already said this...). From this perspective
>>> adding a separate cxf namespace would be counter-intuitive and would
>>> disallow users to pick up their existing simpletypes (e.g. if they
>>> defined a simpletype nameType with maximum of 255 chars and they want to
>>> use this both for a search parameter and in a complextype personType).
>>>
>>> Also from the Swagger-perspective Swagger has a separate parameterType
>>> where you can define their restrictions, so they also reuse the existing
>>> mechanisms of the Swagger contract and don't add new stuff for this.
>>>
>>> Even if you prefer setting up a cxf-namespace, users with existing
>>> reference to simpletypes in their parameters would then complain that
>>> they have to add separate cxf:xx tags to get the beanvalidation support.
>>> So I think you need to support both anyway.
>>>
>>> The only funny thing is that no one has thrown this up in the last years
>>> here (except the question I found at the link above, but unfortunately
>>> the user needed a binary decision not a range) - in the Swagger-spec
>>> this is just a natural thing - adding restrictions to parameters, and I
>>> think it should be exactly like this!
>>>
>>> But I'll do more research on this and hopefully come back with more hard
>>> facts on interoperability .... :).
>>>
>>> I'll put a hold on this until we have come to a decision, I just needed
>>> the new PR to move to a separate branch to get a clean master to get the
>>> lastest updates :).
>>>
>>> best regards,
>>> Johannes
>>>
>>>
>>> Am 08.11.2016 um 18:11 schrieb J. Fiala:
>>>> Hi Sergey,
>>>>
>>>> Thx for all the feedback. I think this is a good idea - check what
>>>> other projects are doing / generating WADLs to see how we can make
>>>> this cross-framework in a way that makes sense for portability.
>>>>
>>>> Best regards,
>>>> Johannes
>>>>
>>>>
>>>> Am 08.11.2016 um 12:33 schrieb Sergey Beryozkin:
>>>>> And finally, I'm not saying inlining XML schema fragments is going
>>>>> nowhere, if you are passionate about this particular approach then
>>>>> please try to get some positive feedback form a team supporting an
>>>>> original Sun wadl-to-java tool - I'll support you at the CXF level if
>>>>> you will some progress.
>>>>>
>>>>> But in meantime I'd like to encourage you to review Option 1 & 2 I
>>>>> listed earlier deeper. IMHO Option1 has a higher chance of getting an
>>>>> eventual wider adoption (with a diff namespace of course)
>>>>>
>>>>> Cheers, Sergey
>>>>> On 08/11/16 11:22, Sergey Beryozkin wrote:
>>>>>> Hi Johannes
>>>>>>
>>>>>> I'd like to clarify.
>>>>>>
>>>>>> Rather than going the XML schema path, with the incomplete but
>>>>>> possibly
>>>>>> nested schema types to keep even this already invalid incomplete
>>>>>> schema
>>>>>> fragment being a single 'piece', and effectively starting modeling
>>>>>> BeanValidation via XML schema, and trying to figure out how to
>>>>>> support
>>>>>> it cleanly both ways, all for the sake of letting the user to avoid
>>>>>> doing a 'null' check or some size check in the code,
>>>>>>
>>>>>> I'd rather like to see a simple solution which works and which
>>>>>> 'speaks'
>>>>>> it is about a parameter validation.
>>>>>>
>>>>>> The fact that the Swagger2 supports this approach is not convincing.
>>>>>> And
>>>>>> now that I think about it it is even unusual to hear about Swagger
>>>>>> inlining somewhere incomplete XML schema fragments, being itself very
>>>>>> much JSON centric.
>>>>>>
>>>>>> So I'd not even call this proposed extension a 'beanValidation' but
>>>>>> simply 'validation':
>>>>>> <wadl ... xmlns:val="http://cxf.apache.org/wadl/validation">
>>>>>> <wadl:param>
>>>>>>  <val:validation>
>>>>>>     ...
>>>>>>  </val:validation>
>>>>>> </wadl:param>
>>>>>>
>>>>>> I look at it and see it is about the extra validation of a given
>>>>>> non-representation (non XMLSchema related) parameter.
>>>>>>
>>>>>> If XMLSchema is a must for you then simply follow an Option2 I
>>>>>> outlined
>>>>>> earlier. It already works on a WADL to Java a path. The only
>>>>>> compromise
>>>>>> you'd have to make is to have non-simple parameter types in the
>>>>>> signature and register ParamConverterProvider. This is still a
>>>>>> perfectly
>>>>>> valid JAX-RS 2.0.
>>>>>>
>>>>>> Cheers, Sergey
>>>>>>
>>>>>>
>>>>>> On 08/11/16 10:25, Sergey Beryozkin wrote:
>>>>>>> Hi
>>>>>>> On 07/11/16 22:52, J. Fiala wrote:
>>>>>>>> Hi Sergey,
>>>>>>>>
>>>>>>>> I think we should split the whole thing into two topics
>>>>>>>> (issues/PRs):
>>>>>>>>
>>>>>>> Well. I'd rather have a single approach working both ways.
>>>>>>>
>>>>>>>> 1.) SourceGenerator for contract-first-only with 100% portability
>>>>>>>> This should be supported for people who only practice contract
>>>>>>>> first and
>>>>>>>> don't care of the WadlGenerator and simply want to use clean
>>>>>>>> simple/nested types for their WADL parameters. This warrants 100%
>>>>>>>> portability for the WADL contract.
>>>>>>>>
>>>>>>>> a) support simpletypes:
>>>>>>>>
>>>>>>>> <param name="username" style="query" type="myns:username"
>>>>>>>> required="false" />
>>>>>>>>
>>>>>>>> <xs:simpleType name="username">
>>>>>>>>         <xs:restriction base="xs:string">
>>>>>>>>             <xs:maxLength value="50"/>
>>>>>>>>         </xs:restriction>
>>>>>>>>     </xs:simpleType>
>>>>>>>>
>>>>>>>> This is what I already implemented, but only for the directly
>>>>>>>> resolved
>>>>>>>> type (like example here), here I could go deeper as well to further
>>>>>>>> restrictions (<xs restriction base="mydeepersimpletype"...>).
>>>>>>>>
>>>>>>>> b) support nested types:
>>>>>>>>
>>>>>>>> <param name="username" style="query" type="myns:username"
>>>>>>>> required="false" >
>>>>>>>> <xs:simpleType>
>>>>>>>> <xs:restriction base="xs:string">
>>>>>>>> <xs:maxLength value="50" />
>>>>>>>> </xs:restriction>
>>>>>>>> </param>
>>>>>>>>
>>>>>>>> This is what I already implemented (check if nested simpleType is
>>>>>>>> present + pick it up).
>>>>>>>>
>>>>>>>> If you like to I can rework the PR
>>>>>>>> https://github.com/apache/cxf/pull/146 and add only the
>>>>>>>> implementation
>>>>>>>> of SourceGenerator so you can merge conveniently.
>>>>>>>>
>>>>>>> As I said I'm not keen on this particular approach because using an
>>>>>>> incomplete XML schema fragments to implicitly carry the optional
>>>>>>> parameter validation info, where any of this String/int
>>>>>>> parameters has
>>>>>>> nothing to do with XML schema, look wrong to me. It does not scale.
>>>>>>>
>>>>>>>
>>>>>>>> 2.) BeanValidation for the WadlGenerator and for SourceGenerator
>>>>>>>> for
>>>>>>>> easier roundtrip development
>>>>>>>>
>>>>>>> It is not the easier roundtrip dev but about having a complete
>>>>>>> solution
>>>>>>>
>>>>>>>> I think the main task should be to pickup the beanvalidation
>>>>>>>> annotations
>>>>>>>> for both wadl:param AND xs:element/xs:complexTypes.
>>>>>>>> If we only add support for parameters and don't support it in the
>>>>>>>> complextypes it is only  the minor part of the deal.
>>>>>>>> However, with the apporach to get working what is possible without
>>>>>>>> big
>>>>>>>> effort, we can in first place only support wadl:param.
>>>>>>>>
>>>>>>> I honestly would not like to go into the whole XML schema for the
>>>>>>> purpose of optionally adding some bean validations, we've spent a
>>>>>>> lot of
>>>>>>> time talking about it.
>>>>>>>
>>>>>>>> For wadl:param:
>>>>>>>> For @NotNull I'd prefer to use wadl:param@required, no need for the
>>>>>>>> custom namespace here.
>>>>>>> Sure start with supporting NotNull.
>>>>>>>
>>>>>>>> So I can start with @Size (minLength/maxLength) here and setup a
>>>>>>>> first
>>>>>>>> implementation like the following.
>>>>>>>>
>>>>>>>> WadlGenerator:
>>>>>>>> <wadl:param name="username" required="true">
>>>>>>>> <cxfrs:beanValidation>
>>>>>>>>   <cxfrs:minLength value="1"/>
>>>>>>>>   <cxfrs:maxLength value="100" />
>>>>>>>> </cxfrs:beanValidation>
>>>>>>>> </wadl:param>
>>>>>>> That won't scale once you'd want to add one more annotation
>>>>>>> support. It
>>>>>>> would have to be something like
>>>>>>>
>>>>>>> <cxfrs:beanValidation>
>>>>>>>    <cxfrs:size minLength="1" maxLength="100" />
>>>>>>> </cxfrs:beanValidation>
>>>>>>>
>>>>>>> without any nested minLength/etc to simplify the processing of
>>>>>>> 'size'
>>>>>>> and to support adding of other beanVal, including NotNull, ex:
>>>>>>>
>>>>>>> <cxfrs:beanValidation>
>>>>>>>    <cxfrs:size minLength="1" maxLength="100" />
>>>>>>>    <cxfrs:notNull/>
>>>>>>> </cxfrs:beanValidation>
>>>>>>>
>>>>>>>
>>>>>>> It is better to have a single place for everything related to
>>>>>>> beanVal.
>>>>>>>>
>>>>>>>> SourceGenerator: look for nested beanValidation tag and pick
>>>>>>>> validations
>>>>>>>> up.
>>>>>>>>
>>>>>>> yes
>>>>>>>> After implementing this, the next step would be to support the
>>>>>>>> custom
>>>>>>>> tag for the complexTypes/JAXB-processing...
>>>>>>>>
>>>>>>> I'm sorry I disagree. Lets keep XMLSchema out of the picture for
>>>>>>> now as
>>>>>>> far as the validation of optional parameters is concerned
>>>>>>>
>>>>>>> Cheers, Sergey
>>>>>>>> If you agree with that, I suggest setting up two separate Jira
>>>>>>>> issues so
>>>>>>>> we can move all the further comments there.
>>>>>>>>
>>>>>>>> What do you think of this idea?
>>>>>>>>
>>>>>>>> Best regards,
>>>>>>>>
>>>>>>>> Johannes
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> Am 07.11.2016 um 22:12 schrieb Sergey Beryozkin:
>>>>>>>>> Perhaps you can start with supporting a not null only ?
>>>>>>>>> If a parameter @required is set (this can be enabled on the
>>>>>>>>> WADL to
>>>>>>>>> Java if BeanVal NotNull is set) then SourceGenerator can add this
>>>>>>>>> annotation back if its -beanValidation is set.
>>>>>>>>> The only restriction is that please use String class names of the
>>>>>>>>> BeanValidation for now until we figure our a neater approach to
>>>>>>>>> avoid
>>>>>>>>> the strong BeanVal dependencies
>>>>>>>>>
>>>>>>>>> Cheers, Sergey
>>>>>>>>> On 07/11/16 21:08, Sergey Beryozkin wrote:
>>>>>>>>>> Hi Johannes
>>>>>>>>>>
>>>>>>>>>> Option 2 already works in the WADL to Java case. The only
>>>>>>>>>> problem with
>>>>>>>>>> it, as discussed earlier, is that WADL grammar is meant to
>>>>>>>>>> represent
>>>>>>>>>> the
>>>>>>>>>> data representations, but SourceGenerator does not enforce it
>>>>>>>>>> right
>>>>>>>>>> now
>>>>>>>>>> and referring from the parameters to the schema elements is still
>>>>>>>>>> supported.
>>>>>>>>>>
>>>>>>>>>> IMHO it makes sense to have a solution which works both ways
>>>>>>>>>> first
>>>>>>>>>> without doing a massive effort as we don't really have
>>>>>>>>>> time/scope for
>>>>>>>>>> it.
>>>>>>>>>>
>>>>>>>>>> Completing Option2 support will only require adding the
>>>>>>>>>> parameter bean
>>>>>>>>>> classes to the JAXB context.
>>>>>>>>>> Option 1 will require a bit more work at the start but once you
>>>>>>>>>> have
>>>>>>>>>> something like
>>>>>>>>>> <wadl:param>
>>>>>>>>>> <cxfrs:beanValidation>
>>>>>>>>>>   <notNull/>
>>>>>>>>>>   <someOtherBeanValName a="b" "c"="d">
>>>>>>>>>> </cxfrs:beanValidation>
>>>>>>>>>> </wadl:param>
>>>>>>>>>>
>>>>>>>>>> then it will become quite straigtforward on the WADL to Java
>>>>>>>>>> side...
>>>>>>>>>>
>>>>>>>>>> Ideally one would even allocate a namespace which would extend
>>>>>>>>>> the
>>>>>>>>>> core
>>>>>>>>>> WADL namespace. Ex,
>>>>>>>>>>
>>>>>>>>>> http://wadl.dev.java.net/extensions/bval
>>>>>>>>>>
>>>>>>>>>> Might be worth investigating if it is allowed or not.
>>>>>>>>>>
>>>>>>>>>> Cheers, Sergey
>>>>>>>>>>
>>>>>>>>>> On 07/11/16 18:01, J. Fiala wrote:
>>>>>>>>>>> Hi Sergey,
>>>>>>>>>>>
>>>>>>>>>>> Thx for the analysis.
>>>>>>>>>>>
>>>>>>>>>>> Regarding the WadlGenerator I'd also prefer option 1 opposing to
>>>>>>>>>>> option
>>>>>>>>>>> 2 (without the original idea available).
>>>>>>>>>>>
>>>>>>>>>>> Regarding the SourceGenerator I think it should support clean
>>>>>>>>>>> parameter
>>>>>>>>>>> type references in any way. So even if we follow option 1, we
>>>>>>>>>>> would
>>>>>>>>>>> need
>>>>>>>>>>> to support correctly referenced simpletypes from parameters as
>>>>>>>>>>> well as
>>>>>>>>>>> the cxfrs:beanValidation extension.
>>>>>>>>>>>
>>>>>>>>>>> But probably it's easier to discuss this with examples together
>>>>>>>>>>> :).
>>>>>>>>>>>
>>>>>>>>>>> Best regards,
>>>>>>>>>>> Johannes
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Am 07.11.2016 um 18:13 schrieb Sergey Beryozkin:
>>>>>>>>>>>> Hi Johannes
>>>>>>>>>>>>
>>>>>>>>>>>> I've looked through various messages and pull requests.
>>>>>>>>>>>>
>>>>>>>>>>>> One approach was to insert incomplete schema fragments into
>>>>>>>>>>>> wadl:param
>>>>>>>>>>>> with the implicit understanding it was meant to create BeanVal
>>>>>>>>>>>> parameters and I felt quite uncomfortable about pursuing that
>>>>>>>>>>>> particular path.
>>>>>>>>>>>>
>>>>>>>>>>>> The last idea we were trying to narrow upon was using a
>>>>>>>>>>>> separate XML
>>>>>>>>>>>> schema grammar which would be used to create Bean validation
>>>>>>>>>>>> if a
>>>>>>>>>>>> bean
>>>>>>>>>>>> validation flag is set. This is a bit more WADL friendly but
>>>>>>>>>>>> again it
>>>>>>>>>>>> does not look to me like a solution which says "this is to
>>>>>>>>>>>> support
>>>>>>>>>>>> the
>>>>>>>>>>>> bean validation" for parameters and I'm finding it difficult
>>>>>>>>>>>> to see
>>>>>>>>>>>> how it will work both ways.
>>>>>>>>>>>>
>>>>>>>>>>>> I'd to revisit these 2 proposals
>>>>>>>>>>>>
>>>>>>>>>>>> 1. have a CXF WADL extension, ex, cxfrs:beanValidation. This
>>>>>>>>>>>> will be
>>>>>>>>>>>> in wadl:param and will be optimized around supporting all
>>>>>>>>>>>> whatever is
>>>>>>>>>>>> needed to generate BeanVal annotations and represent any
>>>>>>>>>>>> BeanVal in
>>>>>>>>>>>> the Java to WADL case.
>>>>>>>>>>>> This works both ways and IMHO simpler and cleaner, instead of
>>>>>>>>>>>> trying
>>>>>>>>>>>> to 'carry' the bean validation info via XML schema fragments,
>>>>>>>>>>>> with
>>>>>>>>>>>> all
>>>>>>>>>>>> the limitations which seems ultimately wrong to me.
>>>>>>>>>>>> cxfrs:beanValidation will be of course only recognized by a CXF
>>>>>>>>>>>> wadl-to-java tool but I feel this approach will have more
>>>>>>>>>>>> chances to
>>>>>>>>>>>> act getting more support via other provider's tool extensions
>>>>>>>>>>>> than
>>>>>>>>>>>> the
>>>>>>>>>>>> pseudo XML schema approach which is in fact would be equally
>>>>>>>>>>>> CXF
>>>>>>>>>>>> specific.
>>>>>>>>>>>>
>>>>>>>>>>>> 2. Do not do anything at all but have wadl:param refer to XML
>>>>>>>>>>>> complex
>>>>>>>>>>>> types. As I said earlier, this will require the use of
>>>>>>>>>>>> ParamConverterProvider which will have a chance to validate the
>>>>>>>>>>>> beans.
>>>>>>>>>>>> These beans will already have BeanVal annotations in them.
>>>>>>>>>>>> This also
>>>>>>>>>>>> works both ways - on the WADLToJava side you'd just add these
>>>>>>>>>>>> bean
>>>>>>>>>>>> classes to a JAXBContext for the JAXB schema gen to add the
>>>>>>>>>>>> relevant
>>>>>>>>>>>> schema definitions.
>>>>>>>>>>>>
>>>>>>>>>>>> My preference is option 1).
>>>>>>>>>>>>
>>>>>>>>>>>> We can discuss the options next week too,
>>>>>>>>>>>>
>>>>>>>>>>>> Thanks, Sergey
>>>>>>>>>>>>
>>>>>>>>>>>> On 06/11/16 22:25, Sergey Beryozkin wrote:
>>>>>>>>>>>>> Hi Johannes
>>>>>>>>>>>>>
>>>>>>>>>>>>> Can you please briefly summarize the proposed changes to
>>>>>>>>>>>>> WADLGen &
>>>>>>>>>>>>> SourceGen ? There've been many emails and I recall I thought
>>>>>>>>>>>>> more
>>>>>>>>>>>>> work
>>>>>>>>>>>>> was needed to keep both approaches in sync. Right now I see
>>>>>>>>>>>>> WADLGen has
>>>>>>>>>>>>> some explicit BeanVal dependencies. I def remember
>>>>>>>>>>>>> objecting to
>>>>>>>>>>>>> this
>>>>>>>>>>>>> particular approach.
>>>>>>>>>>>>> So how this can be generalized, be WADL friendly, and work
>>>>>>>>>>>>> both
>>>>>>>>>>>>> ways ?
>>>>>>>>>>>>>
>>>>>>>>>>>>> Sergey
>>>>>>>>>>>>> On 06/11/16 21:59, J. Fiala wrote:
>>>>>>>>>>>>>> Hi Sergey,
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> OK, I agree 100%, it would be great to have some progress
>>>>>>>>>>>>>> with
>>>>>>>>>>>>>> the PR
>>>>>>>>>>>>>> here if you have time for it.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Best regards,
>>>>>>>>>>>>>> Johannes
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Am 06.11.2016 um 22:58 schrieb Sergey Beryozkin:
>>>>>>>>>>>>>>> Hi Johannes
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> I'd say the WADL-related updates should be limited to
>>>>>>>>>>>>>>> WADLGen/SourceGen
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Cheers, Sergey
>>>>>>>>>>>>>>> On 06/11/16 21:46, J. Fiala wrote:
>>>>>>>>>>>>>>>> Hi Sergey,
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> I can ask him or simply do a fork of the complete
>>>>>>>>>>>>>>>> project and
>>>>>>>>>>>>>>>> then
>>>>>>>>>>>>>>>> cover
>>>>>>>>>>>>>>>> it under the Apache license provided the author agrees with
>>>>>>>>>>>>>>>> this.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Do you think further BeanValidation extensions for CXF
>>>>>>>>>>>>>>>> should
>>>>>>>>>>>>>>>> also go
>>>>>>>>>>>>>>>> there and I should subclass the
>>>>>>>>>>>>>>>> WadlGenerator/SourceGenerator? Or
>>>>>>>>>>>>>>>> shall
>>>>>>>>>>>>>>>> we merge this at the Hackathon at ApacheCon maybe?
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Best regards,
>>>>>>>>>>>>>>>> Johannes
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Am 06.11.2016 um 22:40 schrieb Sergey Beryozkin:
>>>>>>>>>>>>>>>>> Hi Johannes
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Would it make sense asking the author to give you the
>>>>>>>>>>>>>>>>> commit
>>>>>>>>>>>>>>>>> rights to
>>>>>>>>>>>>>>>>> the project ?
>>>>>>>>>>>>>>>>> IMHO it can't go to the CXF master though perhaps an
>>>>>>>>>>>>>>>>> option of
>>>>>>>>>>>>>>>>> opening
>>>>>>>>>>>>>>>>> a CXF sub-project is viable which will need to be
>>>>>>>>>>>>>>>>> discussed on
>>>>>>>>>>>>>>>>> the CXF
>>>>>>>>>>>>>>>>> dev list. Whether it will stay where it is now or end up
>>>>>>>>>>>>>>>>> as a
>>>>>>>>>>>>>>>>> CXF
>>>>>>>>>>>>>>>>> project, you'd have to support and release it, so I'm not
>>>>>>>>>>>>>>>>> sure
>>>>>>>>>>>>>>>>> what
>>>>>>>>>>>>>>>>> difference would it make if it ended up being a CXF
>>>>>>>>>>>>>>>>> sub-project
>>>>>>>>>>>>>>>>> given
>>>>>>>>>>>>>>>>> it already has a home...
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Thanks, Sergey
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> On 06/11/16 19:32, Johannes Fiala wrote:
>>>>>>>>>>>>>>>>>> Hi there,
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> The JAXB annotation plugin provided by krasa
>>>>>>>>>>>>>>>>>> (https://github.com/krasa/krasa-jaxb-tools) is no longer
>>>>>>>>>>>>>>>>>> supported,
>>>>>>>>>>>>>>>>>> does
>>>>>>>>>>>>>>>>>> it make sense to contact the author to merge this into
>>>>>>>>>>>>>>>>>> CXF
>>>>>>>>>>>>>>>>>> master?
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> Maybe we could also get the BeanValidation for parameters
>>>>>>>>>>>>>>>>>> working
>>>>>>>>>>>>>>>>>> (https://github.com/apache/cxf/pull/146/files) to
>>>>>>>>>>>>>>>>>> improve the
>>>>>>>>>>>>>>>>>> overall
>>>>>>>>>>>>>>>>>> BeanValidation experience.
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> Is anybody interested in putting this on the agenda
>>>>>>>>>>>>>>>>>> for the
>>>>>>>>>>>>>>>>>> hackathon?
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> Best regards,
>>>>>>>>>>>>>>>>>> Johannes
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>
>>
>>
>


Re: CXF BeanValidation annotation support

Posted by "J. Fiala" <mo...@fwd.at>.
Hi Sergey,

Thank you for explaining all of this once more, I'll rethink this and 
then come back to you :).

Thanks & Best regards,
Johannes


Am 18.11.2016 um 22:17 schrieb Sergey Beryozkin:
> Hi Johannes
>
> As I said we've discussed all the options in depth twice and as far as 
> I recall we eve came to some conclusion with respect to an approach 
> where incomplete XMLSchema fragments are used to model the Java bean 
> validation - where I asked you to seek some support from the original 
> Sun project.
>
> But let me explain my position one more time.
>
> Option 1. Use incomplete XML Schema fragments - IMHO this is a 
> non-interoperable and at least IMHO is a stretch with some obvious 
> limitations such as the one related to your idea of using some 
> embedded XML schema types to model something more complex than NotNull 
> or the fact that schema fragments are incomplete, and it is hard to 
> make it work both ways.
>
> Option2. Introduce a CXF extension designed for representing whatever 
> info needed related to the validation of bean parameters - this will 
> scale and IMHO will have a better chance to eventually become a more 
> accepted generic solution.
>
> You prefer Option1, I Option2, we keep going in circles :-), and at 
> this stage IMHO it will be good for us to politely agree to disagree.
>
> The other thing I'd like note though is as I said earlier, the whole 
> idea of making the optional parameters (query params are optional by 
> theor nature) strongly required is questionable IMHO.
>
> If you have a service at
> /bar
>
> then this service, being a good HTTP service, should be able to accept 
> /bar without /bar?a=c.
>
> This is what for ex JAX-RS DefaultValue is for. Or a good service 
> would simply return the complete /bar representation if an optional 
> parameter is missing.
>
> Enforcing the presence of 'a' effectively makes your top level API 
> being not "/bar" but "/bar?a=..." which is not good IMHO.
>
> Providing some top level support in CXF does seem to me a good 
> investment of time.
>
> Finally, you have option 3:
> @GET
> someMethod(@QueryParam("a") MyBean bean) {}
>
> This will work OOB for wadl-to-java and will be trivial enough to 
> support for Java to Wadl. Works both ways, standard JAX-RS 2.0, you 
> control the instantiation of MyBean in your custom 
> ParamConverter<MyBean> and there you will validate this bean as needed.
>
> Hope you appreciate I've tried to justify my position as much as I can.
> Sometimes it is good to have a break in discussions which go too long, 
> think about the whole issue a bit more and then may be revisit it later
>
> Thanks, Sergey
>
>
> On 18/11/16 21:27, J. Fiala wrote:
>> Hi Sergey,
>>
>> So far you can reference any simpletype at the WADL, but it seems the
>> idea of adding picking up the restrictions and using it for
>> beanvalidation is new (I found one related question dated 2006:
>> http://markmail.org/message/2pih4jwd2dn6xidv#query:+page:1+mid:6wjzispjnd2bfnyq+state:results). 
>>
>>
>>
>> However, I think this would be the most intuitive way and would also
>> allow users to reuse existing simpletypes in their schema they use in
>> complextypes (I know I already said this...). From this perspective
>> adding a separate cxf namespace would be counter-intuitive and would
>> disallow users to pick up their existing simpletypes (e.g. if they
>> defined a simpletype nameType with maximum of 255 chars and they want to
>> use this both for a search parameter and in a complextype personType).
>>
>> Also from the Swagger-perspective Swagger has a separate parameterType
>> where you can define their restrictions, so they also reuse the existing
>> mechanisms of the Swagger contract and don't add new stuff for this.
>>
>> Even if you prefer setting up a cxf-namespace, users with existing
>> reference to simpletypes in their parameters would then complain that
>> they have to add separate cxf:xx tags to get the beanvalidation support.
>> So I think you need to support both anyway.
>>
>> The only funny thing is that no one has thrown this up in the last years
>> here (except the question I found at the link above, but unfortunately
>> the user needed a binary decision not a range) - in the Swagger-spec
>> this is just a natural thing - adding restrictions to parameters, and I
>> think it should be exactly like this!
>>
>> But I'll do more research on this and hopefully come back with more hard
>> facts on interoperability .... :).
>>
>> I'll put a hold on this until we have come to a decision, I just needed
>> the new PR to move to a separate branch to get a clean master to get the
>> lastest updates :).
>>
>> best regards,
>> Johannes
>>
>>
>> Am 08.11.2016 um 18:11 schrieb J. Fiala:
>>> Hi Sergey,
>>>
>>> Thx for all the feedback. I think this is a good idea - check what
>>> other projects are doing / generating WADLs to see how we can make
>>> this cross-framework in a way that makes sense for portability.
>>>
>>> Best regards,
>>> Johannes
>>>
>>>
>>> Am 08.11.2016 um 12:33 schrieb Sergey Beryozkin:
>>>> And finally, I'm not saying inlining XML schema fragments is going
>>>> nowhere, if you are passionate about this particular approach then
>>>> please try to get some positive feedback form a team supporting an
>>>> original Sun wadl-to-java tool - I'll support you at the CXF level if
>>>> you will some progress.
>>>>
>>>> But in meantime I'd like to encourage you to review Option 1 & 2 I
>>>> listed earlier deeper. IMHO Option1 has a higher chance of getting an
>>>> eventual wider adoption (with a diff namespace of course)
>>>>
>>>> Cheers, Sergey
>>>> On 08/11/16 11:22, Sergey Beryozkin wrote:
>>>>> Hi Johannes
>>>>>
>>>>> I'd like to clarify.
>>>>>
>>>>> Rather than going the XML schema path, with the incomplete but 
>>>>> possibly
>>>>> nested schema types to keep even this already invalid incomplete 
>>>>> schema
>>>>> fragment being a single 'piece', and effectively starting modeling
>>>>> BeanValidation via XML schema, and trying to figure out how to 
>>>>> support
>>>>> it cleanly both ways, all for the sake of letting the user to avoid
>>>>> doing a 'null' check or some size check in the code,
>>>>>
>>>>> I'd rather like to see a simple solution which works and which 
>>>>> 'speaks'
>>>>> it is about a parameter validation.
>>>>>
>>>>> The fact that the Swagger2 supports this approach is not convincing.
>>>>> And
>>>>> now that I think about it it is even unusual to hear about Swagger
>>>>> inlining somewhere incomplete XML schema fragments, being itself very
>>>>> much JSON centric.
>>>>>
>>>>> So I'd not even call this proposed extension a 'beanValidation' but
>>>>> simply 'validation':
>>>>> <wadl ... xmlns:val="http://cxf.apache.org/wadl/validation">
>>>>> <wadl:param>
>>>>>  <val:validation>
>>>>>     ...
>>>>>  </val:validation>
>>>>> </wadl:param>
>>>>>
>>>>> I look at it and see it is about the extra validation of a given
>>>>> non-representation (non XMLSchema related) parameter.
>>>>>
>>>>> If XMLSchema is a must for you then simply follow an Option2 I 
>>>>> outlined
>>>>> earlier. It already works on a WADL to Java a path. The only 
>>>>> compromise
>>>>> you'd have to make is to have non-simple parameter types in the
>>>>> signature and register ParamConverterProvider. This is still a
>>>>> perfectly
>>>>> valid JAX-RS 2.0.
>>>>>
>>>>> Cheers, Sergey
>>>>>
>>>>>
>>>>> On 08/11/16 10:25, Sergey Beryozkin wrote:
>>>>>> Hi
>>>>>> On 07/11/16 22:52, J. Fiala wrote:
>>>>>>> Hi Sergey,
>>>>>>>
>>>>>>> I think we should split the whole thing into two topics 
>>>>>>> (issues/PRs):
>>>>>>>
>>>>>> Well. I'd rather have a single approach working both ways.
>>>>>>
>>>>>>> 1.) SourceGenerator for contract-first-only with 100% portability
>>>>>>> This should be supported for people who only practice contract
>>>>>>> first and
>>>>>>> don't care of the WadlGenerator and simply want to use clean
>>>>>>> simple/nested types for their WADL parameters. This warrants 100%
>>>>>>> portability for the WADL contract.
>>>>>>>
>>>>>>> a) support simpletypes:
>>>>>>>
>>>>>>> <param name="username" style="query" type="myns:username"
>>>>>>> required="false" />
>>>>>>>
>>>>>>> <xs:simpleType name="username">
>>>>>>>         <xs:restriction base="xs:string">
>>>>>>>             <xs:maxLength value="50"/>
>>>>>>>         </xs:restriction>
>>>>>>>     </xs:simpleType>
>>>>>>>
>>>>>>> This is what I already implemented, but only for the directly
>>>>>>> resolved
>>>>>>> type (like example here), here I could go deeper as well to further
>>>>>>> restrictions (<xs restriction base="mydeepersimpletype"...>).
>>>>>>>
>>>>>>> b) support nested types:
>>>>>>>
>>>>>>> <param name="username" style="query" type="myns:username"
>>>>>>> required="false" >
>>>>>>> <xs:simpleType>
>>>>>>> <xs:restriction base="xs:string">
>>>>>>> <xs:maxLength value="50" />
>>>>>>> </xs:restriction>
>>>>>>> </param>
>>>>>>>
>>>>>>> This is what I already implemented (check if nested simpleType is
>>>>>>> present + pick it up).
>>>>>>>
>>>>>>> If you like to I can rework the PR
>>>>>>> https://github.com/apache/cxf/pull/146 and add only the
>>>>>>> implementation
>>>>>>> of SourceGenerator so you can merge conveniently.
>>>>>>>
>>>>>> As I said I'm not keen on this particular approach because using an
>>>>>> incomplete XML schema fragments to implicitly carry the optional
>>>>>> parameter validation info, where any of this String/int 
>>>>>> parameters has
>>>>>> nothing to do with XML schema, look wrong to me. It does not scale.
>>>>>>
>>>>>>
>>>>>>> 2.) BeanValidation for the WadlGenerator and for SourceGenerator 
>>>>>>> for
>>>>>>> easier roundtrip development
>>>>>>>
>>>>>> It is not the easier roundtrip dev but about having a complete
>>>>>> solution
>>>>>>
>>>>>>> I think the main task should be to pickup the beanvalidation
>>>>>>> annotations
>>>>>>> for both wadl:param AND xs:element/xs:complexTypes.
>>>>>>> If we only add support for parameters and don't support it in the
>>>>>>> complextypes it is only  the minor part of the deal.
>>>>>>> However, with the apporach to get working what is possible without
>>>>>>> big
>>>>>>> effort, we can in first place only support wadl:param.
>>>>>>>
>>>>>> I honestly would not like to go into the whole XML schema for the
>>>>>> purpose of optionally adding some bean validations, we've spent a
>>>>>> lot of
>>>>>> time talking about it.
>>>>>>
>>>>>>> For wadl:param:
>>>>>>> For @NotNull I'd prefer to use wadl:param@required, no need for the
>>>>>>> custom namespace here.
>>>>>> Sure start with supporting NotNull.
>>>>>>
>>>>>>> So I can start with @Size (minLength/maxLength) here and setup a
>>>>>>> first
>>>>>>> implementation like the following.
>>>>>>>
>>>>>>> WadlGenerator:
>>>>>>> <wadl:param name="username" required="true">
>>>>>>> <cxfrs:beanValidation>
>>>>>>>   <cxfrs:minLength value="1"/>
>>>>>>>   <cxfrs:maxLength value="100" />
>>>>>>> </cxfrs:beanValidation>
>>>>>>> </wadl:param>
>>>>>> That won't scale once you'd want to add one more annotation
>>>>>> support. It
>>>>>> would have to be something like
>>>>>>
>>>>>> <cxfrs:beanValidation>
>>>>>>    <cxfrs:size minLength="1" maxLength="100" />
>>>>>> </cxfrs:beanValidation>
>>>>>>
>>>>>> without any nested minLength/etc to simplify the processing of 
>>>>>> 'size'
>>>>>> and to support adding of other beanVal, including NotNull, ex:
>>>>>>
>>>>>> <cxfrs:beanValidation>
>>>>>>    <cxfrs:size minLength="1" maxLength="100" />
>>>>>>    <cxfrs:notNull/>
>>>>>> </cxfrs:beanValidation>
>>>>>>
>>>>>>
>>>>>> It is better to have a single place for everything related to 
>>>>>> beanVal.
>>>>>>>
>>>>>>> SourceGenerator: look for nested beanValidation tag and pick
>>>>>>> validations
>>>>>>> up.
>>>>>>>
>>>>>> yes
>>>>>>> After implementing this, the next step would be to support the 
>>>>>>> custom
>>>>>>> tag for the complexTypes/JAXB-processing...
>>>>>>>
>>>>>> I'm sorry I disagree. Lets keep XMLSchema out of the picture for
>>>>>> now as
>>>>>> far as the validation of optional parameters is concerned
>>>>>>
>>>>>> Cheers, Sergey
>>>>>>> If you agree with that, I suggest setting up two separate Jira
>>>>>>> issues so
>>>>>>> we can move all the further comments there.
>>>>>>>
>>>>>>> What do you think of this idea?
>>>>>>>
>>>>>>> Best regards,
>>>>>>>
>>>>>>> Johannes
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> Am 07.11.2016 um 22:12 schrieb Sergey Beryozkin:
>>>>>>>> Perhaps you can start with supporting a not null only ?
>>>>>>>> If a parameter @required is set (this can be enabled on the 
>>>>>>>> WADL to
>>>>>>>> Java if BeanVal NotNull is set) then SourceGenerator can add this
>>>>>>>> annotation back if its -beanValidation is set.
>>>>>>>> The only restriction is that please use String class names of the
>>>>>>>> BeanValidation for now until we figure our a neater approach to
>>>>>>>> avoid
>>>>>>>> the strong BeanVal dependencies
>>>>>>>>
>>>>>>>> Cheers, Sergey
>>>>>>>> On 07/11/16 21:08, Sergey Beryozkin wrote:
>>>>>>>>> Hi Johannes
>>>>>>>>>
>>>>>>>>> Option 2 already works in the WADL to Java case. The only
>>>>>>>>> problem with
>>>>>>>>> it, as discussed earlier, is that WADL grammar is meant to
>>>>>>>>> represent
>>>>>>>>> the
>>>>>>>>> data representations, but SourceGenerator does not enforce it 
>>>>>>>>> right
>>>>>>>>> now
>>>>>>>>> and referring from the parameters to the schema elements is still
>>>>>>>>> supported.
>>>>>>>>>
>>>>>>>>> IMHO it makes sense to have a solution which works both ways 
>>>>>>>>> first
>>>>>>>>> without doing a massive effort as we don't really have
>>>>>>>>> time/scope for
>>>>>>>>> it.
>>>>>>>>>
>>>>>>>>> Completing Option2 support will only require adding the
>>>>>>>>> parameter bean
>>>>>>>>> classes to the JAXB context.
>>>>>>>>> Option 1 will require a bit more work at the start but once you
>>>>>>>>> have
>>>>>>>>> something like
>>>>>>>>> <wadl:param>
>>>>>>>>> <cxfrs:beanValidation>
>>>>>>>>>   <notNull/>
>>>>>>>>>   <someOtherBeanValName a="b" "c"="d">
>>>>>>>>> </cxfrs:beanValidation>
>>>>>>>>> </wadl:param>
>>>>>>>>>
>>>>>>>>> then it will become quite straigtforward on the WADL to Java
>>>>>>>>> side...
>>>>>>>>>
>>>>>>>>> Ideally one would even allocate a namespace which would extend 
>>>>>>>>> the
>>>>>>>>> core
>>>>>>>>> WADL namespace. Ex,
>>>>>>>>>
>>>>>>>>> http://wadl.dev.java.net/extensions/bval
>>>>>>>>>
>>>>>>>>> Might be worth investigating if it is allowed or not.
>>>>>>>>>
>>>>>>>>> Cheers, Sergey
>>>>>>>>>
>>>>>>>>> On 07/11/16 18:01, J. Fiala wrote:
>>>>>>>>>> Hi Sergey,
>>>>>>>>>>
>>>>>>>>>> Thx for the analysis.
>>>>>>>>>>
>>>>>>>>>> Regarding the WadlGenerator I'd also prefer option 1 opposing to
>>>>>>>>>> option
>>>>>>>>>> 2 (without the original idea available).
>>>>>>>>>>
>>>>>>>>>> Regarding the SourceGenerator I think it should support clean
>>>>>>>>>> parameter
>>>>>>>>>> type references in any way. So even if we follow option 1, we
>>>>>>>>>> would
>>>>>>>>>> need
>>>>>>>>>> to support correctly referenced simpletypes from parameters as
>>>>>>>>>> well as
>>>>>>>>>> the cxfrs:beanValidation extension.
>>>>>>>>>>
>>>>>>>>>> But probably it's easier to discuss this with examples together
>>>>>>>>>> :).
>>>>>>>>>>
>>>>>>>>>> Best regards,
>>>>>>>>>> Johannes
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Am 07.11.2016 um 18:13 schrieb Sergey Beryozkin:
>>>>>>>>>>> Hi Johannes
>>>>>>>>>>>
>>>>>>>>>>> I've looked through various messages and pull requests.
>>>>>>>>>>>
>>>>>>>>>>> One approach was to insert incomplete schema fragments into
>>>>>>>>>>> wadl:param
>>>>>>>>>>> with the implicit understanding it was meant to create BeanVal
>>>>>>>>>>> parameters and I felt quite uncomfortable about pursuing that
>>>>>>>>>>> particular path.
>>>>>>>>>>>
>>>>>>>>>>> The last idea we were trying to narrow upon was using a
>>>>>>>>>>> separate XML
>>>>>>>>>>> schema grammar which would be used to create Bean validation 
>>>>>>>>>>> if a
>>>>>>>>>>> bean
>>>>>>>>>>> validation flag is set. This is a bit more WADL friendly but
>>>>>>>>>>> again it
>>>>>>>>>>> does not look to me like a solution which says "this is to
>>>>>>>>>>> support
>>>>>>>>>>> the
>>>>>>>>>>> bean validation" for parameters and I'm finding it difficult
>>>>>>>>>>> to see
>>>>>>>>>>> how it will work both ways.
>>>>>>>>>>>
>>>>>>>>>>> I'd to revisit these 2 proposals
>>>>>>>>>>>
>>>>>>>>>>> 1. have a CXF WADL extension, ex, cxfrs:beanValidation. This
>>>>>>>>>>> will be
>>>>>>>>>>> in wadl:param and will be optimized around supporting all
>>>>>>>>>>> whatever is
>>>>>>>>>>> needed to generate BeanVal annotations and represent any
>>>>>>>>>>> BeanVal in
>>>>>>>>>>> the Java to WADL case.
>>>>>>>>>>> This works both ways and IMHO simpler and cleaner, instead of
>>>>>>>>>>> trying
>>>>>>>>>>> to 'carry' the bean validation info via XML schema fragments,
>>>>>>>>>>> with
>>>>>>>>>>> all
>>>>>>>>>>> the limitations which seems ultimately wrong to me.
>>>>>>>>>>> cxfrs:beanValidation will be of course only recognized by a CXF
>>>>>>>>>>> wadl-to-java tool but I feel this approach will have more
>>>>>>>>>>> chances to
>>>>>>>>>>> act getting more support via other provider's tool extensions
>>>>>>>>>>> than
>>>>>>>>>>> the
>>>>>>>>>>> pseudo XML schema approach which is in fact would be equally 
>>>>>>>>>>> CXF
>>>>>>>>>>> specific.
>>>>>>>>>>>
>>>>>>>>>>> 2. Do not do anything at all but have wadl:param refer to XML
>>>>>>>>>>> complex
>>>>>>>>>>> types. As I said earlier, this will require the use of
>>>>>>>>>>> ParamConverterProvider which will have a chance to validate the
>>>>>>>>>>> beans.
>>>>>>>>>>> These beans will already have BeanVal annotations in them.
>>>>>>>>>>> This also
>>>>>>>>>>> works both ways - on the WADLToJava side you'd just add these
>>>>>>>>>>> bean
>>>>>>>>>>> classes to a JAXBContext for the JAXB schema gen to add the
>>>>>>>>>>> relevant
>>>>>>>>>>> schema definitions.
>>>>>>>>>>>
>>>>>>>>>>> My preference is option 1).
>>>>>>>>>>>
>>>>>>>>>>> We can discuss the options next week too,
>>>>>>>>>>>
>>>>>>>>>>> Thanks, Sergey
>>>>>>>>>>>
>>>>>>>>>>> On 06/11/16 22:25, Sergey Beryozkin wrote:
>>>>>>>>>>>> Hi Johannes
>>>>>>>>>>>>
>>>>>>>>>>>> Can you please briefly summarize the proposed changes to
>>>>>>>>>>>> WADLGen &
>>>>>>>>>>>> SourceGen ? There've been many emails and I recall I thought
>>>>>>>>>>>> more
>>>>>>>>>>>> work
>>>>>>>>>>>> was needed to keep both approaches in sync. Right now I see
>>>>>>>>>>>> WADLGen has
>>>>>>>>>>>> some explicit BeanVal dependencies. I def remember 
>>>>>>>>>>>> objecting to
>>>>>>>>>>>> this
>>>>>>>>>>>> particular approach.
>>>>>>>>>>>> So how this can be generalized, be WADL friendly, and work 
>>>>>>>>>>>> both
>>>>>>>>>>>> ways ?
>>>>>>>>>>>>
>>>>>>>>>>>> Sergey
>>>>>>>>>>>> On 06/11/16 21:59, J. Fiala wrote:
>>>>>>>>>>>>> Hi Sergey,
>>>>>>>>>>>>>
>>>>>>>>>>>>> OK, I agree 100%, it would be great to have some progress 
>>>>>>>>>>>>> with
>>>>>>>>>>>>> the PR
>>>>>>>>>>>>> here if you have time for it.
>>>>>>>>>>>>>
>>>>>>>>>>>>> Best regards,
>>>>>>>>>>>>> Johannes
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> Am 06.11.2016 um 22:58 schrieb Sergey Beryozkin:
>>>>>>>>>>>>>> Hi Johannes
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> I'd say the WADL-related updates should be limited to
>>>>>>>>>>>>>> WADLGen/SourceGen
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Cheers, Sergey
>>>>>>>>>>>>>> On 06/11/16 21:46, J. Fiala wrote:
>>>>>>>>>>>>>>> Hi Sergey,
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> I can ask him or simply do a fork of the complete 
>>>>>>>>>>>>>>> project and
>>>>>>>>>>>>>>> then
>>>>>>>>>>>>>>> cover
>>>>>>>>>>>>>>> it under the Apache license provided the author agrees with
>>>>>>>>>>>>>>> this.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Do you think further BeanValidation extensions for CXF 
>>>>>>>>>>>>>>> should
>>>>>>>>>>>>>>> also go
>>>>>>>>>>>>>>> there and I should subclass the
>>>>>>>>>>>>>>> WadlGenerator/SourceGenerator? Or
>>>>>>>>>>>>>>> shall
>>>>>>>>>>>>>>> we merge this at the Hackathon at ApacheCon maybe?
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Best regards,
>>>>>>>>>>>>>>> Johannes
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Am 06.11.2016 um 22:40 schrieb Sergey Beryozkin:
>>>>>>>>>>>>>>>> Hi Johannes
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Would it make sense asking the author to give you the 
>>>>>>>>>>>>>>>> commit
>>>>>>>>>>>>>>>> rights to
>>>>>>>>>>>>>>>> the project ?
>>>>>>>>>>>>>>>> IMHO it can't go to the CXF master though perhaps an
>>>>>>>>>>>>>>>> option of
>>>>>>>>>>>>>>>> opening
>>>>>>>>>>>>>>>> a CXF sub-project is viable which will need to be
>>>>>>>>>>>>>>>> discussed on
>>>>>>>>>>>>>>>> the CXF
>>>>>>>>>>>>>>>> dev list. Whether it will stay where it is now or end up
>>>>>>>>>>>>>>>> as a
>>>>>>>>>>>>>>>> CXF
>>>>>>>>>>>>>>>> project, you'd have to support and release it, so I'm not
>>>>>>>>>>>>>>>> sure
>>>>>>>>>>>>>>>> what
>>>>>>>>>>>>>>>> difference would it make if it ended up being a CXF
>>>>>>>>>>>>>>>> sub-project
>>>>>>>>>>>>>>>> given
>>>>>>>>>>>>>>>> it already has a home...
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Thanks, Sergey
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> On 06/11/16 19:32, Johannes Fiala wrote:
>>>>>>>>>>>>>>>>> Hi there,
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> The JAXB annotation plugin provided by krasa
>>>>>>>>>>>>>>>>> (https://github.com/krasa/krasa-jaxb-tools) is no longer
>>>>>>>>>>>>>>>>> supported,
>>>>>>>>>>>>>>>>> does
>>>>>>>>>>>>>>>>> it make sense to contact the author to merge this into 
>>>>>>>>>>>>>>>>> CXF
>>>>>>>>>>>>>>>>> master?
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Maybe we could also get the BeanValidation for parameters
>>>>>>>>>>>>>>>>> working
>>>>>>>>>>>>>>>>> (https://github.com/apache/cxf/pull/146/files) to
>>>>>>>>>>>>>>>>> improve the
>>>>>>>>>>>>>>>>> overall
>>>>>>>>>>>>>>>>> BeanValidation experience.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Is anybody interested in putting this on the agenda 
>>>>>>>>>>>>>>>>> for the
>>>>>>>>>>>>>>>>> hackathon?
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Best regards,
>>>>>>>>>>>>>>>>> Johannes
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>>
>>>
>>>
>>
>
>


Re: CXF BeanValidation annotation support

Posted by Sergey Beryozkin <sb...@gmail.com>.
Hi Johannes

As I said we've discussed all the options in depth twice and as far as I 
recall we eve came to some conclusion with respect to an approach where 
incomplete XMLSchema fragments are used to model the Java bean 
validation - where I asked you to seek some support from the original 
Sun project.

But let me explain my position one more time.

Option 1. Use incomplete XML Schema fragments - IMHO this is a 
non-interoperable and at least IMHO is a stretch with some obvious 
limitations such as the one related to your idea of using some embedded 
XML schema types to model something more complex than NotNull or the 
fact that schema fragments are incomplete, and it is hard to make it 
work both ways.

Option2. Introduce a CXF extension designed for representing whatever 
info needed related to the validation of bean parameters - this will 
scale and IMHO will have a better chance to eventually become a more 
accepted generic solution.

You prefer Option1, I Option2, we keep going in circles :-), and at this 
stage IMHO it will be good for us to politely agree to disagree.

The other thing I'd like note though is as I said earlier, the whole 
idea of making the optional parameters (query params are optional by 
theor nature) strongly required is questionable IMHO.

If you have a service at
/bar

then this service, being a good HTTP service, should be able to accept 
/bar without /bar?a=c.

This is what for ex JAX-RS DefaultValue is for. Or a good service would 
simply return the complete /bar representation if an optional parameter 
is missing.

Enforcing the presence of 'a' effectively makes your top level API being 
not "/bar" but "/bar?a=..." which is not good IMHO.

Providing some top level support in CXF does seem to me a good 
investment of time.

Finally, you have option 3:
@GET
someMethod(@QueryParam("a") MyBean bean) {}

This will work OOB for wadl-to-java and will be trivial enough to 
support for Java to Wadl. Works both ways, standard JAX-RS 2.0, you 
control the instantiation of MyBean in your custom 
ParamConverter<MyBean> and there you will validate this bean as needed.

Hope you appreciate I've tried to justify my position as much as I can.
Sometimes it is good to have a break in discussions which go too long, 
think about the whole issue a bit more and then may be revisit it later

Thanks, Sergey


On 18/11/16 21:27, J. Fiala wrote:
> Hi Sergey,
>
> So far you can reference any simpletype at the WADL, but it seems the
> idea of adding picking up the restrictions and using it for
> beanvalidation is new (I found one related question dated 2006:
> http://markmail.org/message/2pih4jwd2dn6xidv#query:+page:1+mid:6wjzispjnd2bfnyq+state:results).
>
>
> However, I think this would be the most intuitive way and would also
> allow users to reuse existing simpletypes in their schema they use in
> complextypes (I know I already said this...). From this perspective
> adding a separate cxf namespace would be counter-intuitive and would
> disallow users to pick up their existing simpletypes (e.g. if they
> defined a simpletype nameType with maximum of 255 chars and they want to
> use this both for a search parameter and in a complextype personType).
>
> Also from the Swagger-perspective Swagger has a separate parameterType
> where you can define their restrictions, so they also reuse the existing
> mechanisms of the Swagger contract and don't add new stuff for this.
>
> Even if you prefer setting up a cxf-namespace, users with existing
> reference to simpletypes in their parameters would then complain that
> they have to add separate cxf:xx tags to get the beanvalidation support.
> So I think you need to support both anyway.
>
> The only funny thing is that no one has thrown this up in the last years
> here (except the question I found at the link above, but unfortunately
> the user needed a binary decision not a range) - in the Swagger-spec
> this is just a natural thing - adding restrictions to parameters, and I
> think it should be exactly like this!
>
> But I'll do more research on this and hopefully come back with more hard
> facts on interoperability .... :).
>
> I'll put a hold on this until we have come to a decision, I just needed
> the new PR to move to a separate branch to get a clean master to get the
> lastest updates :).
>
> best regards,
> Johannes
>
>
> Am 08.11.2016 um 18:11 schrieb J. Fiala:
>> Hi Sergey,
>>
>> Thx for all the feedback. I think this is a good idea - check what
>> other projects are doing / generating WADLs to see how we can make
>> this cross-framework in a way that makes sense for portability.
>>
>> Best regards,
>> Johannes
>>
>>
>> Am 08.11.2016 um 12:33 schrieb Sergey Beryozkin:
>>> And finally, I'm not saying inlining XML schema fragments is going
>>> nowhere, if you are passionate about this particular approach then
>>> please try to get some positive feedback form a team supporting an
>>> original Sun wadl-to-java tool - I'll support you at the CXF level if
>>> you will some progress.
>>>
>>> But in meantime I'd like to encourage you to review Option 1 & 2 I
>>> listed earlier deeper. IMHO Option1 has a higher chance of getting an
>>> eventual wider adoption (with a diff namespace of course)
>>>
>>> Cheers, Sergey
>>> On 08/11/16 11:22, Sergey Beryozkin wrote:
>>>> Hi Johannes
>>>>
>>>> I'd like to clarify.
>>>>
>>>> Rather than going the XML schema path, with the incomplete but possibly
>>>> nested schema types to keep even this already invalid incomplete schema
>>>> fragment being a single 'piece', and effectively starting modeling
>>>> BeanValidation via XML schema, and trying to figure out how to support
>>>> it cleanly both ways, all for the sake of letting the user to avoid
>>>> doing a 'null' check or some size check in the code,
>>>>
>>>> I'd rather like to see a simple solution which works and which 'speaks'
>>>> it is about a parameter validation.
>>>>
>>>> The fact that the Swagger2 supports this approach is not convincing.
>>>> And
>>>> now that I think about it it is even unusual to hear about Swagger
>>>> inlining somewhere incomplete XML schema fragments, being itself very
>>>> much JSON centric.
>>>>
>>>> So I'd not even call this proposed extension a 'beanValidation' but
>>>> simply 'validation':
>>>> <wadl ... xmlns:val="http://cxf.apache.org/wadl/validation">
>>>> <wadl:param>
>>>>  <val:validation>
>>>>     ...
>>>>  </val:validation>
>>>> </wadl:param>
>>>>
>>>> I look at it and see it is about the extra validation of a given
>>>> non-representation (non XMLSchema related) parameter.
>>>>
>>>> If XMLSchema is a must for you then simply follow an Option2 I outlined
>>>> earlier. It already works on a WADL to Java a path. The only compromise
>>>> you'd have to make is to have non-simple parameter types in the
>>>> signature and register ParamConverterProvider. This is still a
>>>> perfectly
>>>> valid JAX-RS 2.0.
>>>>
>>>> Cheers, Sergey
>>>>
>>>>
>>>> On 08/11/16 10:25, Sergey Beryozkin wrote:
>>>>> Hi
>>>>> On 07/11/16 22:52, J. Fiala wrote:
>>>>>> Hi Sergey,
>>>>>>
>>>>>> I think we should split the whole thing into two topics (issues/PRs):
>>>>>>
>>>>> Well. I'd rather have a single approach working both ways.
>>>>>
>>>>>> 1.) SourceGenerator for contract-first-only with 100% portability
>>>>>> This should be supported for people who only practice contract
>>>>>> first and
>>>>>> don't care of the WadlGenerator and simply want to use clean
>>>>>> simple/nested types for their WADL parameters. This warrants 100%
>>>>>> portability for the WADL contract.
>>>>>>
>>>>>> a) support simpletypes:
>>>>>>
>>>>>> <param name="username" style="query" type="myns:username"
>>>>>> required="false" />
>>>>>>
>>>>>> <xs:simpleType name="username">
>>>>>>         <xs:restriction base="xs:string">
>>>>>>             <xs:maxLength value="50"/>
>>>>>>         </xs:restriction>
>>>>>>     </xs:simpleType>
>>>>>>
>>>>>> This is what I already implemented, but only for the directly
>>>>>> resolved
>>>>>> type (like example here), here I could go deeper as well to further
>>>>>> restrictions (<xs restriction base="mydeepersimpletype"...>).
>>>>>>
>>>>>> b) support nested types:
>>>>>>
>>>>>> <param name="username" style="query" type="myns:username"
>>>>>> required="false" >
>>>>>> <xs:simpleType>
>>>>>> <xs:restriction base="xs:string">
>>>>>> <xs:maxLength value="50" />
>>>>>> </xs:restriction>
>>>>>> </param>
>>>>>>
>>>>>> This is what I already implemented (check if nested simpleType is
>>>>>> present + pick it up).
>>>>>>
>>>>>> If you like to I can rework the PR
>>>>>> https://github.com/apache/cxf/pull/146 and add only the
>>>>>> implementation
>>>>>> of SourceGenerator so you can merge conveniently.
>>>>>>
>>>>> As I said I'm not keen on this particular approach because using an
>>>>> incomplete XML schema fragments to implicitly carry the optional
>>>>> parameter validation info, where any of this String/int parameters has
>>>>> nothing to do with XML schema, look wrong to me. It does not scale.
>>>>>
>>>>>
>>>>>> 2.) BeanValidation for the WadlGenerator and for SourceGenerator for
>>>>>> easier roundtrip development
>>>>>>
>>>>> It is not the easier roundtrip dev but about having a complete
>>>>> solution
>>>>>
>>>>>> I think the main task should be to pickup the beanvalidation
>>>>>> annotations
>>>>>> for both wadl:param AND xs:element/xs:complexTypes.
>>>>>> If we only add support for parameters and don't support it in the
>>>>>> complextypes it is only  the minor part of the deal.
>>>>>> However, with the apporach to get working what is possible without
>>>>>> big
>>>>>> effort, we can in first place only support wadl:param.
>>>>>>
>>>>> I honestly would not like to go into the whole XML schema for the
>>>>> purpose of optionally adding some bean validations, we've spent a
>>>>> lot of
>>>>> time talking about it.
>>>>>
>>>>>> For wadl:param:
>>>>>> For @NotNull I'd prefer to use wadl:param@required, no need for the
>>>>>> custom namespace here.
>>>>> Sure start with supporting NotNull.
>>>>>
>>>>>> So I can start with @Size (minLength/maxLength) here and setup a
>>>>>> first
>>>>>> implementation like the following.
>>>>>>
>>>>>> WadlGenerator:
>>>>>> <wadl:param name="username" required="true">
>>>>>> <cxfrs:beanValidation>
>>>>>>   <cxfrs:minLength value="1"/>
>>>>>>   <cxfrs:maxLength value="100" />
>>>>>> </cxfrs:beanValidation>
>>>>>> </wadl:param>
>>>>> That won't scale once you'd want to add one more annotation
>>>>> support. It
>>>>> would have to be something like
>>>>>
>>>>> <cxfrs:beanValidation>
>>>>>    <cxfrs:size minLength="1" maxLength="100" />
>>>>> </cxfrs:beanValidation>
>>>>>
>>>>> without any nested minLength/etc to simplify the processing of 'size'
>>>>> and to support adding of other beanVal, including NotNull, ex:
>>>>>
>>>>> <cxfrs:beanValidation>
>>>>>    <cxfrs:size minLength="1" maxLength="100" />
>>>>>    <cxfrs:notNull/>
>>>>> </cxfrs:beanValidation>
>>>>>
>>>>>
>>>>> It is better to have a single place for everything related to beanVal.
>>>>>>
>>>>>> SourceGenerator: look for nested beanValidation tag and pick
>>>>>> validations
>>>>>> up.
>>>>>>
>>>>> yes
>>>>>> After implementing this, the next step would be to support the custom
>>>>>> tag for the complexTypes/JAXB-processing...
>>>>>>
>>>>> I'm sorry I disagree. Lets keep XMLSchema out of the picture for
>>>>> now as
>>>>> far as the validation of optional parameters is concerned
>>>>>
>>>>> Cheers, Sergey
>>>>>> If you agree with that, I suggest setting up two separate Jira
>>>>>> issues so
>>>>>> we can move all the further comments there.
>>>>>>
>>>>>> What do you think of this idea?
>>>>>>
>>>>>> Best regards,
>>>>>>
>>>>>> Johannes
>>>>>>
>>>>>>
>>>>>>
>>>>>> Am 07.11.2016 um 22:12 schrieb Sergey Beryozkin:
>>>>>>> Perhaps you can start with supporting a not null only ?
>>>>>>> If a parameter @required is set (this can be enabled on the WADL to
>>>>>>> Java if BeanVal NotNull is set) then SourceGenerator can add this
>>>>>>> annotation back if its -beanValidation is set.
>>>>>>> The only restriction is that please use String class names of the
>>>>>>> BeanValidation for now until we figure our a neater approach to
>>>>>>> avoid
>>>>>>> the strong BeanVal dependencies
>>>>>>>
>>>>>>> Cheers, Sergey
>>>>>>> On 07/11/16 21:08, Sergey Beryozkin wrote:
>>>>>>>> Hi Johannes
>>>>>>>>
>>>>>>>> Option 2 already works in the WADL to Java case. The only
>>>>>>>> problem with
>>>>>>>> it, as discussed earlier, is that WADL grammar is meant to
>>>>>>>> represent
>>>>>>>> the
>>>>>>>> data representations, but SourceGenerator does not enforce it right
>>>>>>>> now
>>>>>>>> and referring from the parameters to the schema elements is still
>>>>>>>> supported.
>>>>>>>>
>>>>>>>> IMHO it makes sense to have a solution which works both ways first
>>>>>>>> without doing a massive effort as we don't really have
>>>>>>>> time/scope for
>>>>>>>> it.
>>>>>>>>
>>>>>>>> Completing Option2 support will only require adding the
>>>>>>>> parameter bean
>>>>>>>> classes to the JAXB context.
>>>>>>>> Option 1 will require a bit more work at the start but once you
>>>>>>>> have
>>>>>>>> something like
>>>>>>>> <wadl:param>
>>>>>>>> <cxfrs:beanValidation>
>>>>>>>>   <notNull/>
>>>>>>>>   <someOtherBeanValName a="b" "c"="d">
>>>>>>>> </cxfrs:beanValidation>
>>>>>>>> </wadl:param>
>>>>>>>>
>>>>>>>> then it will become quite straigtforward on the WADL to Java
>>>>>>>> side...
>>>>>>>>
>>>>>>>> Ideally one would even allocate a namespace which would extend the
>>>>>>>> core
>>>>>>>> WADL namespace. Ex,
>>>>>>>>
>>>>>>>> http://wadl.dev.java.net/extensions/bval
>>>>>>>>
>>>>>>>> Might be worth investigating if it is allowed or not.
>>>>>>>>
>>>>>>>> Cheers, Sergey
>>>>>>>>
>>>>>>>> On 07/11/16 18:01, J. Fiala wrote:
>>>>>>>>> Hi Sergey,
>>>>>>>>>
>>>>>>>>> Thx for the analysis.
>>>>>>>>>
>>>>>>>>> Regarding the WadlGenerator I'd also prefer option 1 opposing to
>>>>>>>>> option
>>>>>>>>> 2 (without the original idea available).
>>>>>>>>>
>>>>>>>>> Regarding the SourceGenerator I think it should support clean
>>>>>>>>> parameter
>>>>>>>>> type references in any way. So even if we follow option 1, we
>>>>>>>>> would
>>>>>>>>> need
>>>>>>>>> to support correctly referenced simpletypes from parameters as
>>>>>>>>> well as
>>>>>>>>> the cxfrs:beanValidation extension.
>>>>>>>>>
>>>>>>>>> But probably it's easier to discuss this with examples together
>>>>>>>>> :).
>>>>>>>>>
>>>>>>>>> Best regards,
>>>>>>>>> Johannes
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Am 07.11.2016 um 18:13 schrieb Sergey Beryozkin:
>>>>>>>>>> Hi Johannes
>>>>>>>>>>
>>>>>>>>>> I've looked through various messages and pull requests.
>>>>>>>>>>
>>>>>>>>>> One approach was to insert incomplete schema fragments into
>>>>>>>>>> wadl:param
>>>>>>>>>> with the implicit understanding it was meant to create BeanVal
>>>>>>>>>> parameters and I felt quite uncomfortable about pursuing that
>>>>>>>>>> particular path.
>>>>>>>>>>
>>>>>>>>>> The last idea we were trying to narrow upon was using a
>>>>>>>>>> separate XML
>>>>>>>>>> schema grammar which would be used to create Bean validation if a
>>>>>>>>>> bean
>>>>>>>>>> validation flag is set. This is a bit more WADL friendly but
>>>>>>>>>> again it
>>>>>>>>>> does not look to me like a solution which says "this is to
>>>>>>>>>> support
>>>>>>>>>> the
>>>>>>>>>> bean validation" for parameters and I'm finding it difficult
>>>>>>>>>> to see
>>>>>>>>>> how it will work both ways.
>>>>>>>>>>
>>>>>>>>>> I'd to revisit these 2 proposals
>>>>>>>>>>
>>>>>>>>>> 1. have a CXF WADL extension, ex, cxfrs:beanValidation. This
>>>>>>>>>> will be
>>>>>>>>>> in wadl:param and will be optimized around supporting all
>>>>>>>>>> whatever is
>>>>>>>>>> needed to generate BeanVal annotations and represent any
>>>>>>>>>> BeanVal in
>>>>>>>>>> the Java to WADL case.
>>>>>>>>>> This works both ways and IMHO simpler and cleaner, instead of
>>>>>>>>>> trying
>>>>>>>>>> to 'carry' the bean validation info via XML schema fragments,
>>>>>>>>>> with
>>>>>>>>>> all
>>>>>>>>>> the limitations which seems ultimately wrong to me.
>>>>>>>>>> cxfrs:beanValidation will be of course only recognized by a CXF
>>>>>>>>>> wadl-to-java tool but I feel this approach will have more
>>>>>>>>>> chances to
>>>>>>>>>> act getting more support via other provider's tool extensions
>>>>>>>>>> than
>>>>>>>>>> the
>>>>>>>>>> pseudo XML schema approach which is in fact would be equally CXF
>>>>>>>>>> specific.
>>>>>>>>>>
>>>>>>>>>> 2. Do not do anything at all but have wadl:param refer to XML
>>>>>>>>>> complex
>>>>>>>>>> types. As I said earlier, this will require the use of
>>>>>>>>>> ParamConverterProvider which will have a chance to validate the
>>>>>>>>>> beans.
>>>>>>>>>> These beans will already have BeanVal annotations in them.
>>>>>>>>>> This also
>>>>>>>>>> works both ways - on the WADLToJava side you'd just add these
>>>>>>>>>> bean
>>>>>>>>>> classes to a JAXBContext for the JAXB schema gen to add the
>>>>>>>>>> relevant
>>>>>>>>>> schema definitions.
>>>>>>>>>>
>>>>>>>>>> My preference is option 1).
>>>>>>>>>>
>>>>>>>>>> We can discuss the options next week too,
>>>>>>>>>>
>>>>>>>>>> Thanks, Sergey
>>>>>>>>>>
>>>>>>>>>> On 06/11/16 22:25, Sergey Beryozkin wrote:
>>>>>>>>>>> Hi Johannes
>>>>>>>>>>>
>>>>>>>>>>> Can you please briefly summarize the proposed changes to
>>>>>>>>>>> WADLGen &
>>>>>>>>>>> SourceGen ? There've been many emails and I recall I thought
>>>>>>>>>>> more
>>>>>>>>>>> work
>>>>>>>>>>> was needed to keep both approaches in sync. Right now I see
>>>>>>>>>>> WADLGen has
>>>>>>>>>>> some explicit BeanVal dependencies. I def remember objecting to
>>>>>>>>>>> this
>>>>>>>>>>> particular approach.
>>>>>>>>>>> So how this can be generalized, be WADL friendly, and work both
>>>>>>>>>>> ways ?
>>>>>>>>>>>
>>>>>>>>>>> Sergey
>>>>>>>>>>> On 06/11/16 21:59, J. Fiala wrote:
>>>>>>>>>>>> Hi Sergey,
>>>>>>>>>>>>
>>>>>>>>>>>> OK, I agree 100%, it would be great to have some progress with
>>>>>>>>>>>> the PR
>>>>>>>>>>>> here if you have time for it.
>>>>>>>>>>>>
>>>>>>>>>>>> Best regards,
>>>>>>>>>>>> Johannes
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> Am 06.11.2016 um 22:58 schrieb Sergey Beryozkin:
>>>>>>>>>>>>> Hi Johannes
>>>>>>>>>>>>>
>>>>>>>>>>>>> I'd say the WADL-related updates should be limited to
>>>>>>>>>>>>> WADLGen/SourceGen
>>>>>>>>>>>>>
>>>>>>>>>>>>> Cheers, Sergey
>>>>>>>>>>>>> On 06/11/16 21:46, J. Fiala wrote:
>>>>>>>>>>>>>> Hi Sergey,
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> I can ask him or simply do a fork of the complete project and
>>>>>>>>>>>>>> then
>>>>>>>>>>>>>> cover
>>>>>>>>>>>>>> it under the Apache license provided the author agrees with
>>>>>>>>>>>>>> this.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Do you think further BeanValidation extensions for CXF should
>>>>>>>>>>>>>> also go
>>>>>>>>>>>>>> there and I should subclass the
>>>>>>>>>>>>>> WadlGenerator/SourceGenerator? Or
>>>>>>>>>>>>>> shall
>>>>>>>>>>>>>> we merge this at the Hackathon at ApacheCon maybe?
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Best regards,
>>>>>>>>>>>>>> Johannes
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Am 06.11.2016 um 22:40 schrieb Sergey Beryozkin:
>>>>>>>>>>>>>>> Hi Johannes
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Would it make sense asking the author to give you the commit
>>>>>>>>>>>>>>> rights to
>>>>>>>>>>>>>>> the project ?
>>>>>>>>>>>>>>> IMHO it can't go to the CXF master though perhaps an
>>>>>>>>>>>>>>> option of
>>>>>>>>>>>>>>> opening
>>>>>>>>>>>>>>> a CXF sub-project is viable which will need to be
>>>>>>>>>>>>>>> discussed on
>>>>>>>>>>>>>>> the CXF
>>>>>>>>>>>>>>> dev list. Whether it will stay where it is now or end up
>>>>>>>>>>>>>>> as a
>>>>>>>>>>>>>>> CXF
>>>>>>>>>>>>>>> project, you'd have to support and release it, so I'm not
>>>>>>>>>>>>>>> sure
>>>>>>>>>>>>>>> what
>>>>>>>>>>>>>>> difference would it make if it ended up being a CXF
>>>>>>>>>>>>>>> sub-project
>>>>>>>>>>>>>>> given
>>>>>>>>>>>>>>> it already has a home...
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Thanks, Sergey
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> On 06/11/16 19:32, Johannes Fiala wrote:
>>>>>>>>>>>>>>>> Hi there,
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> The JAXB annotation plugin provided by krasa
>>>>>>>>>>>>>>>> (https://github.com/krasa/krasa-jaxb-tools) is no longer
>>>>>>>>>>>>>>>> supported,
>>>>>>>>>>>>>>>> does
>>>>>>>>>>>>>>>> it make sense to contact the author to merge this into CXF
>>>>>>>>>>>>>>>> master?
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Maybe we could also get the BeanValidation for parameters
>>>>>>>>>>>>>>>> working
>>>>>>>>>>>>>>>> (https://github.com/apache/cxf/pull/146/files) to
>>>>>>>>>>>>>>>> improve the
>>>>>>>>>>>>>>>> overall
>>>>>>>>>>>>>>>> BeanValidation experience.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Is anybody interested in putting this on the agenda for the
>>>>>>>>>>>>>>>> hackathon?
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Best regards,
>>>>>>>>>>>>>>>> Johannes
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>>
>>
>>
>


Re: CXF BeanValidation annotation support

Posted by "J. Fiala" <mo...@fwd.at>.
Hi Sergey,

So far you can reference any simpletype at the WADL, but it seems the 
idea of adding picking up the restrictions and using it for 
beanvalidation is new (I found one related question dated 2006: 
http://markmail.org/message/2pih4jwd2dn6xidv#query:+page:1+mid:6wjzispjnd2bfnyq+state:results). 


However, I think this would be the most intuitive way and would also 
allow users to reuse existing simpletypes in their schema they use in 
complextypes (I know I already said this...). From this perspective 
adding a separate cxf namespace would be counter-intuitive and would 
disallow users to pick up their existing simpletypes (e.g. if they 
defined a simpletype nameType with maximum of 255 chars and they want to 
use this both for a search parameter and in a complextype personType).

Also from the Swagger-perspective Swagger has a separate parameterType 
where you can define their restrictions, so they also reuse the existing 
mechanisms of the Swagger contract and don't add new stuff for this.

Even if you prefer setting up a cxf-namespace, users with existing 
reference to simpletypes in their parameters would then complain that 
they have to add separate cxf:xx tags to get the beanvalidation support. 
So I think you need to support both anyway.

The only funny thing is that no one has thrown this up in the last years 
here (except the question I found at the link above, but unfortunately 
the user needed a binary decision not a range) - in the Swagger-spec 
this is just a natural thing - adding restrictions to parameters, and I 
think it should be exactly like this!

But I'll do more research on this and hopefully come back with more hard 
facts on interoperability .... :).

I'll put a hold on this until we have come to a decision, I just needed 
the new PR to move to a separate branch to get a clean master to get the 
lastest updates :).

best regards,
Johannes


Am 08.11.2016 um 18:11 schrieb J. Fiala:
> Hi Sergey,
>
> Thx for all the feedback. I think this is a good idea - check what 
> other projects are doing / generating WADLs to see how we can make 
> this cross-framework in a way that makes sense for portability.
>
> Best regards,
> Johannes
>
>
> Am 08.11.2016 um 12:33 schrieb Sergey Beryozkin:
>> And finally, I'm not saying inlining XML schema fragments is going 
>> nowhere, if you are passionate about this particular approach then 
>> please try to get some positive feedback form a team supporting an 
>> original Sun wadl-to-java tool - I'll support you at the CXF level if 
>> you will some progress.
>>
>> But in meantime I'd like to encourage you to review Option 1 & 2 I 
>> listed earlier deeper. IMHO Option1 has a higher chance of getting an 
>> eventual wider adoption (with a diff namespace of course)
>>
>> Cheers, Sergey
>> On 08/11/16 11:22, Sergey Beryozkin wrote:
>>> Hi Johannes
>>>
>>> I'd like to clarify.
>>>
>>> Rather than going the XML schema path, with the incomplete but possibly
>>> nested schema types to keep even this already invalid incomplete schema
>>> fragment being a single 'piece', and effectively starting modeling
>>> BeanValidation via XML schema, and trying to figure out how to support
>>> it cleanly both ways, all for the sake of letting the user to avoid
>>> doing a 'null' check or some size check in the code,
>>>
>>> I'd rather like to see a simple solution which works and which 'speaks'
>>> it is about a parameter validation.
>>>
>>> The fact that the Swagger2 supports this approach is not convincing. 
>>> And
>>> now that I think about it it is even unusual to hear about Swagger
>>> inlining somewhere incomplete XML schema fragments, being itself very
>>> much JSON centric.
>>>
>>> So I'd not even call this proposed extension a 'beanValidation' but
>>> simply 'validation':
>>> <wadl ... xmlns:val="http://cxf.apache.org/wadl/validation">
>>> <wadl:param>
>>>  <val:validation>
>>>     ...
>>>  </val:validation>
>>> </wadl:param>
>>>
>>> I look at it and see it is about the extra validation of a given
>>> non-representation (non XMLSchema related) parameter.
>>>
>>> If XMLSchema is a must for you then simply follow an Option2 I outlined
>>> earlier. It already works on a WADL to Java a path. The only compromise
>>> you'd have to make is to have non-simple parameter types in the
>>> signature and register ParamConverterProvider. This is still a 
>>> perfectly
>>> valid JAX-RS 2.0.
>>>
>>> Cheers, Sergey
>>>
>>>
>>> On 08/11/16 10:25, Sergey Beryozkin wrote:
>>>> Hi
>>>> On 07/11/16 22:52, J. Fiala wrote:
>>>>> Hi Sergey,
>>>>>
>>>>> I think we should split the whole thing into two topics (issues/PRs):
>>>>>
>>>> Well. I'd rather have a single approach working both ways.
>>>>
>>>>> 1.) SourceGenerator for contract-first-only with 100% portability
>>>>> This should be supported for people who only practice contract 
>>>>> first and
>>>>> don't care of the WadlGenerator and simply want to use clean
>>>>> simple/nested types for their WADL parameters. This warrants 100%
>>>>> portability for the WADL contract.
>>>>>
>>>>> a) support simpletypes:
>>>>>
>>>>> <param name="username" style="query" type="myns:username"
>>>>> required="false" />
>>>>>
>>>>> <xs:simpleType name="username">
>>>>>         <xs:restriction base="xs:string">
>>>>>             <xs:maxLength value="50"/>
>>>>>         </xs:restriction>
>>>>>     </xs:simpleType>
>>>>>
>>>>> This is what I already implemented, but only for the directly 
>>>>> resolved
>>>>> type (like example here), here I could go deeper as well to further
>>>>> restrictions (<xs restriction base="mydeepersimpletype"...>).
>>>>>
>>>>> b) support nested types:
>>>>>
>>>>> <param name="username" style="query" type="myns:username"
>>>>> required="false" >
>>>>> <xs:simpleType>
>>>>> <xs:restriction base="xs:string">
>>>>> <xs:maxLength value="50" />
>>>>> </xs:restriction>
>>>>> </param>
>>>>>
>>>>> This is what I already implemented (check if nested simpleType is
>>>>> present + pick it up).
>>>>>
>>>>> If you like to I can rework the PR
>>>>> https://github.com/apache/cxf/pull/146 and add only the 
>>>>> implementation
>>>>> of SourceGenerator so you can merge conveniently.
>>>>>
>>>> As I said I'm not keen on this particular approach because using an
>>>> incomplete XML schema fragments to implicitly carry the optional
>>>> parameter validation info, where any of this String/int parameters has
>>>> nothing to do with XML schema, look wrong to me. It does not scale.
>>>>
>>>>
>>>>> 2.) BeanValidation for the WadlGenerator and for SourceGenerator for
>>>>> easier roundtrip development
>>>>>
>>>> It is not the easier roundtrip dev but about having a complete 
>>>> solution
>>>>
>>>>> I think the main task should be to pickup the beanvalidation 
>>>>> annotations
>>>>> for both wadl:param AND xs:element/xs:complexTypes.
>>>>> If we only add support for parameters and don't support it in the
>>>>> complextypes it is only  the minor part of the deal.
>>>>> However, with the apporach to get working what is possible without 
>>>>> big
>>>>> effort, we can in first place only support wadl:param.
>>>>>
>>>> I honestly would not like to go into the whole XML schema for the
>>>> purpose of optionally adding some bean validations, we've spent a 
>>>> lot of
>>>> time talking about it.
>>>>
>>>>> For wadl:param:
>>>>> For @NotNull I'd prefer to use wadl:param@required, no need for the
>>>>> custom namespace here.
>>>> Sure start with supporting NotNull.
>>>>
>>>>> So I can start with @Size (minLength/maxLength) here and setup a 
>>>>> first
>>>>> implementation like the following.
>>>>>
>>>>> WadlGenerator:
>>>>> <wadl:param name="username" required="true">
>>>>> <cxfrs:beanValidation>
>>>>>   <cxfrs:minLength value="1"/>
>>>>>   <cxfrs:maxLength value="100" />
>>>>> </cxfrs:beanValidation>
>>>>> </wadl:param>
>>>> That won't scale once you'd want to add one more annotation 
>>>> support. It
>>>> would have to be something like
>>>>
>>>> <cxfrs:beanValidation>
>>>>    <cxfrs:size minLength="1" maxLength="100" />
>>>> </cxfrs:beanValidation>
>>>>
>>>> without any nested minLength/etc to simplify the processing of 'size'
>>>> and to support adding of other beanVal, including NotNull, ex:
>>>>
>>>> <cxfrs:beanValidation>
>>>>    <cxfrs:size minLength="1" maxLength="100" />
>>>>    <cxfrs:notNull/>
>>>> </cxfrs:beanValidation>
>>>>
>>>>
>>>> It is better to have a single place for everything related to beanVal.
>>>>>
>>>>> SourceGenerator: look for nested beanValidation tag and pick 
>>>>> validations
>>>>> up.
>>>>>
>>>> yes
>>>>> After implementing this, the next step would be to support the custom
>>>>> tag for the complexTypes/JAXB-processing...
>>>>>
>>>> I'm sorry I disagree. Lets keep XMLSchema out of the picture for 
>>>> now as
>>>> far as the validation of optional parameters is concerned
>>>>
>>>> Cheers, Sergey
>>>>> If you agree with that, I suggest setting up two separate Jira 
>>>>> issues so
>>>>> we can move all the further comments there.
>>>>>
>>>>> What do you think of this idea?
>>>>>
>>>>> Best regards,
>>>>>
>>>>> Johannes
>>>>>
>>>>>
>>>>>
>>>>> Am 07.11.2016 um 22:12 schrieb Sergey Beryozkin:
>>>>>> Perhaps you can start with supporting a not null only ?
>>>>>> If a parameter @required is set (this can be enabled on the WADL to
>>>>>> Java if BeanVal NotNull is set) then SourceGenerator can add this
>>>>>> annotation back if its -beanValidation is set.
>>>>>> The only restriction is that please use String class names of the
>>>>>> BeanValidation for now until we figure our a neater approach to 
>>>>>> avoid
>>>>>> the strong BeanVal dependencies
>>>>>>
>>>>>> Cheers, Sergey
>>>>>> On 07/11/16 21:08, Sergey Beryozkin wrote:
>>>>>>> Hi Johannes
>>>>>>>
>>>>>>> Option 2 already works in the WADL to Java case. The only 
>>>>>>> problem with
>>>>>>> it, as discussed earlier, is that WADL grammar is meant to 
>>>>>>> represent
>>>>>>> the
>>>>>>> data representations, but SourceGenerator does not enforce it right
>>>>>>> now
>>>>>>> and referring from the parameters to the schema elements is still
>>>>>>> supported.
>>>>>>>
>>>>>>> IMHO it makes sense to have a solution which works both ways first
>>>>>>> without doing a massive effort as we don't really have 
>>>>>>> time/scope for
>>>>>>> it.
>>>>>>>
>>>>>>> Completing Option2 support will only require adding the 
>>>>>>> parameter bean
>>>>>>> classes to the JAXB context.
>>>>>>> Option 1 will require a bit more work at the start but once you 
>>>>>>> have
>>>>>>> something like
>>>>>>> <wadl:param>
>>>>>>> <cxfrs:beanValidation>
>>>>>>>   <notNull/>
>>>>>>>   <someOtherBeanValName a="b" "c"="d">
>>>>>>> </cxfrs:beanValidation>
>>>>>>> </wadl:param>
>>>>>>>
>>>>>>> then it will become quite straigtforward on the WADL to Java 
>>>>>>> side...
>>>>>>>
>>>>>>> Ideally one would even allocate a namespace which would extend the
>>>>>>> core
>>>>>>> WADL namespace. Ex,
>>>>>>>
>>>>>>> http://wadl.dev.java.net/extensions/bval
>>>>>>>
>>>>>>> Might be worth investigating if it is allowed or not.
>>>>>>>
>>>>>>> Cheers, Sergey
>>>>>>>
>>>>>>> On 07/11/16 18:01, J. Fiala wrote:
>>>>>>>> Hi Sergey,
>>>>>>>>
>>>>>>>> Thx for the analysis.
>>>>>>>>
>>>>>>>> Regarding the WadlGenerator I'd also prefer option 1 opposing to
>>>>>>>> option
>>>>>>>> 2 (without the original idea available).
>>>>>>>>
>>>>>>>> Regarding the SourceGenerator I think it should support clean
>>>>>>>> parameter
>>>>>>>> type references in any way. So even if we follow option 1, we 
>>>>>>>> would
>>>>>>>> need
>>>>>>>> to support correctly referenced simpletypes from parameters as
>>>>>>>> well as
>>>>>>>> the cxfrs:beanValidation extension.
>>>>>>>>
>>>>>>>> But probably it's easier to discuss this with examples together 
>>>>>>>> :).
>>>>>>>>
>>>>>>>> Best regards,
>>>>>>>> Johannes
>>>>>>>>
>>>>>>>>
>>>>>>>> Am 07.11.2016 um 18:13 schrieb Sergey Beryozkin:
>>>>>>>>> Hi Johannes
>>>>>>>>>
>>>>>>>>> I've looked through various messages and pull requests.
>>>>>>>>>
>>>>>>>>> One approach was to insert incomplete schema fragments into
>>>>>>>>> wadl:param
>>>>>>>>> with the implicit understanding it was meant to create BeanVal
>>>>>>>>> parameters and I felt quite uncomfortable about pursuing that
>>>>>>>>> particular path.
>>>>>>>>>
>>>>>>>>> The last idea we were trying to narrow upon was using a 
>>>>>>>>> separate XML
>>>>>>>>> schema grammar which would be used to create Bean validation if a
>>>>>>>>> bean
>>>>>>>>> validation flag is set. This is a bit more WADL friendly but
>>>>>>>>> again it
>>>>>>>>> does not look to me like a solution which says "this is to 
>>>>>>>>> support
>>>>>>>>> the
>>>>>>>>> bean validation" for parameters and I'm finding it difficult 
>>>>>>>>> to see
>>>>>>>>> how it will work both ways.
>>>>>>>>>
>>>>>>>>> I'd to revisit these 2 proposals
>>>>>>>>>
>>>>>>>>> 1. have a CXF WADL extension, ex, cxfrs:beanValidation. This 
>>>>>>>>> will be
>>>>>>>>> in wadl:param and will be optimized around supporting all
>>>>>>>>> whatever is
>>>>>>>>> needed to generate BeanVal annotations and represent any 
>>>>>>>>> BeanVal in
>>>>>>>>> the Java to WADL case.
>>>>>>>>> This works both ways and IMHO simpler and cleaner, instead of 
>>>>>>>>> trying
>>>>>>>>> to 'carry' the bean validation info via XML schema fragments, 
>>>>>>>>> with
>>>>>>>>> all
>>>>>>>>> the limitations which seems ultimately wrong to me.
>>>>>>>>> cxfrs:beanValidation will be of course only recognized by a CXF
>>>>>>>>> wadl-to-java tool but I feel this approach will have more 
>>>>>>>>> chances to
>>>>>>>>> act getting more support via other provider's tool extensions 
>>>>>>>>> than
>>>>>>>>> the
>>>>>>>>> pseudo XML schema approach which is in fact would be equally CXF
>>>>>>>>> specific.
>>>>>>>>>
>>>>>>>>> 2. Do not do anything at all but have wadl:param refer to XML
>>>>>>>>> complex
>>>>>>>>> types. As I said earlier, this will require the use of
>>>>>>>>> ParamConverterProvider which will have a chance to validate the
>>>>>>>>> beans.
>>>>>>>>> These beans will already have BeanVal annotations in them. 
>>>>>>>>> This also
>>>>>>>>> works both ways - on the WADLToJava side you'd just add these 
>>>>>>>>> bean
>>>>>>>>> classes to a JAXBContext for the JAXB schema gen to add the 
>>>>>>>>> relevant
>>>>>>>>> schema definitions.
>>>>>>>>>
>>>>>>>>> My preference is option 1).
>>>>>>>>>
>>>>>>>>> We can discuss the options next week too,
>>>>>>>>>
>>>>>>>>> Thanks, Sergey
>>>>>>>>>
>>>>>>>>> On 06/11/16 22:25, Sergey Beryozkin wrote:
>>>>>>>>>> Hi Johannes
>>>>>>>>>>
>>>>>>>>>> Can you please briefly summarize the proposed changes to 
>>>>>>>>>> WADLGen &
>>>>>>>>>> SourceGen ? There've been many emails and I recall I thought 
>>>>>>>>>> more
>>>>>>>>>> work
>>>>>>>>>> was needed to keep both approaches in sync. Right now I see
>>>>>>>>>> WADLGen has
>>>>>>>>>> some explicit BeanVal dependencies. I def remember objecting to
>>>>>>>>>> this
>>>>>>>>>> particular approach.
>>>>>>>>>> So how this can be generalized, be WADL friendly, and work both
>>>>>>>>>> ways ?
>>>>>>>>>>
>>>>>>>>>> Sergey
>>>>>>>>>> On 06/11/16 21:59, J. Fiala wrote:
>>>>>>>>>>> Hi Sergey,
>>>>>>>>>>>
>>>>>>>>>>> OK, I agree 100%, it would be great to have some progress with
>>>>>>>>>>> the PR
>>>>>>>>>>> here if you have time for it.
>>>>>>>>>>>
>>>>>>>>>>> Best regards,
>>>>>>>>>>> Johannes
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Am 06.11.2016 um 22:58 schrieb Sergey Beryozkin:
>>>>>>>>>>>> Hi Johannes
>>>>>>>>>>>>
>>>>>>>>>>>> I'd say the WADL-related updates should be limited to
>>>>>>>>>>>> WADLGen/SourceGen
>>>>>>>>>>>>
>>>>>>>>>>>> Cheers, Sergey
>>>>>>>>>>>> On 06/11/16 21:46, J. Fiala wrote:
>>>>>>>>>>>>> Hi Sergey,
>>>>>>>>>>>>>
>>>>>>>>>>>>> I can ask him or simply do a fork of the complete project and
>>>>>>>>>>>>> then
>>>>>>>>>>>>> cover
>>>>>>>>>>>>> it under the Apache license provided the author agrees with
>>>>>>>>>>>>> this.
>>>>>>>>>>>>>
>>>>>>>>>>>>> Do you think further BeanValidation extensions for CXF should
>>>>>>>>>>>>> also go
>>>>>>>>>>>>> there and I should subclass the
>>>>>>>>>>>>> WadlGenerator/SourceGenerator? Or
>>>>>>>>>>>>> shall
>>>>>>>>>>>>> we merge this at the Hackathon at ApacheCon maybe?
>>>>>>>>>>>>>
>>>>>>>>>>>>> Best regards,
>>>>>>>>>>>>> Johannes
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> Am 06.11.2016 um 22:40 schrieb Sergey Beryozkin:
>>>>>>>>>>>>>> Hi Johannes
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Would it make sense asking the author to give you the commit
>>>>>>>>>>>>>> rights to
>>>>>>>>>>>>>> the project ?
>>>>>>>>>>>>>> IMHO it can't go to the CXF master though perhaps an 
>>>>>>>>>>>>>> option of
>>>>>>>>>>>>>> opening
>>>>>>>>>>>>>> a CXF sub-project is viable which will need to be 
>>>>>>>>>>>>>> discussed on
>>>>>>>>>>>>>> the CXF
>>>>>>>>>>>>>> dev list. Whether it will stay where it is now or end up 
>>>>>>>>>>>>>> as a
>>>>>>>>>>>>>> CXF
>>>>>>>>>>>>>> project, you'd have to support and release it, so I'm not 
>>>>>>>>>>>>>> sure
>>>>>>>>>>>>>> what
>>>>>>>>>>>>>> difference would it make if it ended up being a CXF 
>>>>>>>>>>>>>> sub-project
>>>>>>>>>>>>>> given
>>>>>>>>>>>>>> it already has a home...
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Thanks, Sergey
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> On 06/11/16 19:32, Johannes Fiala wrote:
>>>>>>>>>>>>>>> Hi there,
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> The JAXB annotation plugin provided by krasa
>>>>>>>>>>>>>>> (https://github.com/krasa/krasa-jaxb-tools) is no longer
>>>>>>>>>>>>>>> supported,
>>>>>>>>>>>>>>> does
>>>>>>>>>>>>>>> it make sense to contact the author to merge this into CXF
>>>>>>>>>>>>>>> master?
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Maybe we could also get the BeanValidation for parameters
>>>>>>>>>>>>>>> working
>>>>>>>>>>>>>>> (https://github.com/apache/cxf/pull/146/files) to 
>>>>>>>>>>>>>>> improve the
>>>>>>>>>>>>>>> overall
>>>>>>>>>>>>>>> BeanValidation experience.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Is anybody interested in putting this on the agenda for the
>>>>>>>>>>>>>>> hackathon?
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Best regards,
>>>>>>>>>>>>>>> Johannes
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>
>>>
>>
>>
>
>


Re: CXF BeanValidation annotation support

Posted by "J. Fiala" <mo...@fwd.at>.
Hi Sergey,

Thx for all the feedback. I think this is a good idea - check what other 
projects are doing / generating WADLs to see how we can make this 
cross-framework in a way that makes sense for portability.

Best regards,
Johannes


Am 08.11.2016 um 12:33 schrieb Sergey Beryozkin:
> And finally, I'm not saying inlining XML schema fragments is going 
> nowhere, if you are passionate about this particular approach then 
> please try to get some positive feedback form a team supporting an 
> original Sun wadl-to-java tool - I'll support you at the CXF level if 
> you will some progress.
>
> But in meantime I'd like to encourage you to review Option 1 & 2 I 
> listed earlier deeper. IMHO Option1 has a higher chance of getting an 
> eventual wider adoption (with a diff namespace of course)
>
> Cheers, Sergey
> On 08/11/16 11:22, Sergey Beryozkin wrote:
>> Hi Johannes
>>
>> I'd like to clarify.
>>
>> Rather than going the XML schema path, with the incomplete but possibly
>> nested schema types to keep even this already invalid incomplete schema
>> fragment being a single 'piece', and effectively starting modeling
>> BeanValidation via XML schema, and trying to figure out how to support
>> it cleanly both ways, all for the sake of letting the user to avoid
>> doing a 'null' check or some size check in the code,
>>
>> I'd rather like to see a simple solution which works and which 'speaks'
>> it is about a parameter validation.
>>
>> The fact that the Swagger2 supports this approach is not convincing. And
>> now that I think about it it is even unusual to hear about Swagger
>> inlining somewhere incomplete XML schema fragments, being itself very
>> much JSON centric.
>>
>> So I'd not even call this proposed extension a 'beanValidation' but
>> simply 'validation':
>> <wadl ... xmlns:val="http://cxf.apache.org/wadl/validation">
>> <wadl:param>
>>  <val:validation>
>>     ...
>>  </val:validation>
>> </wadl:param>
>>
>> I look at it and see it is about the extra validation of a given
>> non-representation (non XMLSchema related) parameter.
>>
>> If XMLSchema is a must for you then simply follow an Option2 I outlined
>> earlier. It already works on a WADL to Java a path. The only compromise
>> you'd have to make is to have non-simple parameter types in the
>> signature and register ParamConverterProvider. This is still a perfectly
>> valid JAX-RS 2.0.
>>
>> Cheers, Sergey
>>
>>
>> On 08/11/16 10:25, Sergey Beryozkin wrote:
>>> Hi
>>> On 07/11/16 22:52, J. Fiala wrote:
>>>> Hi Sergey,
>>>>
>>>> I think we should split the whole thing into two topics (issues/PRs):
>>>>
>>> Well. I'd rather have a single approach working both ways.
>>>
>>>> 1.) SourceGenerator for contract-first-only with 100% portability
>>>> This should be supported for people who only practice contract 
>>>> first and
>>>> don't care of the WadlGenerator and simply want to use clean
>>>> simple/nested types for their WADL parameters. This warrants 100%
>>>> portability for the WADL contract.
>>>>
>>>> a) support simpletypes:
>>>>
>>>> <param name="username" style="query" type="myns:username"
>>>> required="false" />
>>>>
>>>> <xs:simpleType name="username">
>>>>         <xs:restriction base="xs:string">
>>>>             <xs:maxLength value="50"/>
>>>>         </xs:restriction>
>>>>     </xs:simpleType>
>>>>
>>>> This is what I already implemented, but only for the directly resolved
>>>> type (like example here), here I could go deeper as well to further
>>>> restrictions (<xs restriction base="mydeepersimpletype"...>).
>>>>
>>>> b) support nested types:
>>>>
>>>> <param name="username" style="query" type="myns:username"
>>>> required="false" >
>>>> <xs:simpleType>
>>>> <xs:restriction base="xs:string">
>>>> <xs:maxLength value="50" />
>>>> </xs:restriction>
>>>> </param>
>>>>
>>>> This is what I already implemented (check if nested simpleType is
>>>> present + pick it up).
>>>>
>>>> If you like to I can rework the PR
>>>> https://github.com/apache/cxf/pull/146 and add only the implementation
>>>> of SourceGenerator so you can merge conveniently.
>>>>
>>> As I said I'm not keen on this particular approach because using an
>>> incomplete XML schema fragments to implicitly carry the optional
>>> parameter validation info, where any of this String/int parameters has
>>> nothing to do with XML schema, look wrong to me. It does not scale.
>>>
>>>
>>>> 2.) BeanValidation for the WadlGenerator and for SourceGenerator for
>>>> easier roundtrip development
>>>>
>>> It is not the easier roundtrip dev but about having a complete solution
>>>
>>>> I think the main task should be to pickup the beanvalidation 
>>>> annotations
>>>> for both wadl:param AND xs:element/xs:complexTypes.
>>>> If we only add support for parameters and don't support it in the
>>>> complextypes it is only  the minor part of the deal.
>>>> However, with the apporach to get working what is possible without big
>>>> effort, we can in first place only support wadl:param.
>>>>
>>> I honestly would not like to go into the whole XML schema for the
>>> purpose of optionally adding some bean validations, we've spent a 
>>> lot of
>>> time talking about it.
>>>
>>>> For wadl:param:
>>>> For @NotNull I'd prefer to use wadl:param@required, no need for the
>>>> custom namespace here.
>>> Sure start with supporting NotNull.
>>>
>>>> So I can start with @Size (minLength/maxLength) here and setup a first
>>>> implementation like the following.
>>>>
>>>> WadlGenerator:
>>>> <wadl:param name="username" required="true">
>>>> <cxfrs:beanValidation>
>>>>   <cxfrs:minLength value="1"/>
>>>>   <cxfrs:maxLength value="100" />
>>>> </cxfrs:beanValidation>
>>>> </wadl:param>
>>> That won't scale once you'd want to add one more annotation support. It
>>> would have to be something like
>>>
>>> <cxfrs:beanValidation>
>>>    <cxfrs:size minLength="1" maxLength="100" />
>>> </cxfrs:beanValidation>
>>>
>>> without any nested minLength/etc to simplify the processing of 'size'
>>> and to support adding of other beanVal, including NotNull, ex:
>>>
>>> <cxfrs:beanValidation>
>>>    <cxfrs:size minLength="1" maxLength="100" />
>>>    <cxfrs:notNull/>
>>> </cxfrs:beanValidation>
>>>
>>>
>>> It is better to have a single place for everything related to beanVal.
>>>>
>>>> SourceGenerator: look for nested beanValidation tag and pick 
>>>> validations
>>>> up.
>>>>
>>> yes
>>>> After implementing this, the next step would be to support the custom
>>>> tag for the complexTypes/JAXB-processing...
>>>>
>>> I'm sorry I disagree. Lets keep XMLSchema out of the picture for now as
>>> far as the validation of optional parameters is concerned
>>>
>>> Cheers, Sergey
>>>> If you agree with that, I suggest setting up two separate Jira 
>>>> issues so
>>>> we can move all the further comments there.
>>>>
>>>> What do you think of this idea?
>>>>
>>>> Best regards,
>>>>
>>>> Johannes
>>>>
>>>>
>>>>
>>>> Am 07.11.2016 um 22:12 schrieb Sergey Beryozkin:
>>>>> Perhaps you can start with supporting a not null only ?
>>>>> If a parameter @required is set (this can be enabled on the WADL to
>>>>> Java if BeanVal NotNull is set) then SourceGenerator can add this
>>>>> annotation back if its -beanValidation is set.
>>>>> The only restriction is that please use String class names of the
>>>>> BeanValidation for now until we figure our a neater approach to avoid
>>>>> the strong BeanVal dependencies
>>>>>
>>>>> Cheers, Sergey
>>>>> On 07/11/16 21:08, Sergey Beryozkin wrote:
>>>>>> Hi Johannes
>>>>>>
>>>>>> Option 2 already works in the WADL to Java case. The only problem 
>>>>>> with
>>>>>> it, as discussed earlier, is that WADL grammar is meant to represent
>>>>>> the
>>>>>> data representations, but SourceGenerator does not enforce it right
>>>>>> now
>>>>>> and referring from the parameters to the schema elements is still
>>>>>> supported.
>>>>>>
>>>>>> IMHO it makes sense to have a solution which works both ways first
>>>>>> without doing a massive effort as we don't really have time/scope 
>>>>>> for
>>>>>> it.
>>>>>>
>>>>>> Completing Option2 support will only require adding the parameter 
>>>>>> bean
>>>>>> classes to the JAXB context.
>>>>>> Option 1 will require a bit more work at the start but once you have
>>>>>> something like
>>>>>> <wadl:param>
>>>>>> <cxfrs:beanValidation>
>>>>>>   <notNull/>
>>>>>>   <someOtherBeanValName a="b" "c"="d">
>>>>>> </cxfrs:beanValidation>
>>>>>> </wadl:param>
>>>>>>
>>>>>> then it will become quite straigtforward on the WADL to Java side...
>>>>>>
>>>>>> Ideally one would even allocate a namespace which would extend the
>>>>>> core
>>>>>> WADL namespace. Ex,
>>>>>>
>>>>>> http://wadl.dev.java.net/extensions/bval
>>>>>>
>>>>>> Might be worth investigating if it is allowed or not.
>>>>>>
>>>>>> Cheers, Sergey
>>>>>>
>>>>>> On 07/11/16 18:01, J. Fiala wrote:
>>>>>>> Hi Sergey,
>>>>>>>
>>>>>>> Thx for the analysis.
>>>>>>>
>>>>>>> Regarding the WadlGenerator I'd also prefer option 1 opposing to
>>>>>>> option
>>>>>>> 2 (without the original idea available).
>>>>>>>
>>>>>>> Regarding the SourceGenerator I think it should support clean
>>>>>>> parameter
>>>>>>> type references in any way. So even if we follow option 1, we would
>>>>>>> need
>>>>>>> to support correctly referenced simpletypes from parameters as
>>>>>>> well as
>>>>>>> the cxfrs:beanValidation extension.
>>>>>>>
>>>>>>> But probably it's easier to discuss this with examples together :).
>>>>>>>
>>>>>>> Best regards,
>>>>>>> Johannes
>>>>>>>
>>>>>>>
>>>>>>> Am 07.11.2016 um 18:13 schrieb Sergey Beryozkin:
>>>>>>>> Hi Johannes
>>>>>>>>
>>>>>>>> I've looked through various messages and pull requests.
>>>>>>>>
>>>>>>>> One approach was to insert incomplete schema fragments into
>>>>>>>> wadl:param
>>>>>>>> with the implicit understanding it was meant to create BeanVal
>>>>>>>> parameters and I felt quite uncomfortable about pursuing that
>>>>>>>> particular path.
>>>>>>>>
>>>>>>>> The last idea we were trying to narrow upon was using a 
>>>>>>>> separate XML
>>>>>>>> schema grammar which would be used to create Bean validation if a
>>>>>>>> bean
>>>>>>>> validation flag is set. This is a bit more WADL friendly but
>>>>>>>> again it
>>>>>>>> does not look to me like a solution which says "this is to support
>>>>>>>> the
>>>>>>>> bean validation" for parameters and I'm finding it difficult to 
>>>>>>>> see
>>>>>>>> how it will work both ways.
>>>>>>>>
>>>>>>>> I'd to revisit these 2 proposals
>>>>>>>>
>>>>>>>> 1. have a CXF WADL extension, ex, cxfrs:beanValidation. This 
>>>>>>>> will be
>>>>>>>> in wadl:param and will be optimized around supporting all
>>>>>>>> whatever is
>>>>>>>> needed to generate BeanVal annotations and represent any 
>>>>>>>> BeanVal in
>>>>>>>> the Java to WADL case.
>>>>>>>> This works both ways and IMHO simpler and cleaner, instead of 
>>>>>>>> trying
>>>>>>>> to 'carry' the bean validation info via XML schema fragments, with
>>>>>>>> all
>>>>>>>> the limitations which seems ultimately wrong to me.
>>>>>>>> cxfrs:beanValidation will be of course only recognized by a CXF
>>>>>>>> wadl-to-java tool but I feel this approach will have more 
>>>>>>>> chances to
>>>>>>>> act getting more support via other provider's tool extensions than
>>>>>>>> the
>>>>>>>> pseudo XML schema approach which is in fact would be equally CXF
>>>>>>>> specific.
>>>>>>>>
>>>>>>>> 2. Do not do anything at all but have wadl:param refer to XML
>>>>>>>> complex
>>>>>>>> types. As I said earlier, this will require the use of
>>>>>>>> ParamConverterProvider which will have a chance to validate the
>>>>>>>> beans.
>>>>>>>> These beans will already have BeanVal annotations in them. This 
>>>>>>>> also
>>>>>>>> works both ways - on the WADLToJava side you'd just add these bean
>>>>>>>> classes to a JAXBContext for the JAXB schema gen to add the 
>>>>>>>> relevant
>>>>>>>> schema definitions.
>>>>>>>>
>>>>>>>> My preference is option 1).
>>>>>>>>
>>>>>>>> We can discuss the options next week too,
>>>>>>>>
>>>>>>>> Thanks, Sergey
>>>>>>>>
>>>>>>>> On 06/11/16 22:25, Sergey Beryozkin wrote:
>>>>>>>>> Hi Johannes
>>>>>>>>>
>>>>>>>>> Can you please briefly summarize the proposed changes to 
>>>>>>>>> WADLGen &
>>>>>>>>> SourceGen ? There've been many emails and I recall I thought more
>>>>>>>>> work
>>>>>>>>> was needed to keep both approaches in sync. Right now I see
>>>>>>>>> WADLGen has
>>>>>>>>> some explicit BeanVal dependencies. I def remember objecting to
>>>>>>>>> this
>>>>>>>>> particular approach.
>>>>>>>>> So how this can be generalized, be WADL friendly, and work both
>>>>>>>>> ways ?
>>>>>>>>>
>>>>>>>>> Sergey
>>>>>>>>> On 06/11/16 21:59, J. Fiala wrote:
>>>>>>>>>> Hi Sergey,
>>>>>>>>>>
>>>>>>>>>> OK, I agree 100%, it would be great to have some progress with
>>>>>>>>>> the PR
>>>>>>>>>> here if you have time for it.
>>>>>>>>>>
>>>>>>>>>> Best regards,
>>>>>>>>>> Johannes
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Am 06.11.2016 um 22:58 schrieb Sergey Beryozkin:
>>>>>>>>>>> Hi Johannes
>>>>>>>>>>>
>>>>>>>>>>> I'd say the WADL-related updates should be limited to
>>>>>>>>>>> WADLGen/SourceGen
>>>>>>>>>>>
>>>>>>>>>>> Cheers, Sergey
>>>>>>>>>>> On 06/11/16 21:46, J. Fiala wrote:
>>>>>>>>>>>> Hi Sergey,
>>>>>>>>>>>>
>>>>>>>>>>>> I can ask him or simply do a fork of the complete project and
>>>>>>>>>>>> then
>>>>>>>>>>>> cover
>>>>>>>>>>>> it under the Apache license provided the author agrees with
>>>>>>>>>>>> this.
>>>>>>>>>>>>
>>>>>>>>>>>> Do you think further BeanValidation extensions for CXF should
>>>>>>>>>>>> also go
>>>>>>>>>>>> there and I should subclass the
>>>>>>>>>>>> WadlGenerator/SourceGenerator? Or
>>>>>>>>>>>> shall
>>>>>>>>>>>> we merge this at the Hackathon at ApacheCon maybe?
>>>>>>>>>>>>
>>>>>>>>>>>> Best regards,
>>>>>>>>>>>> Johannes
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> Am 06.11.2016 um 22:40 schrieb Sergey Beryozkin:
>>>>>>>>>>>>> Hi Johannes
>>>>>>>>>>>>>
>>>>>>>>>>>>> Would it make sense asking the author to give you the commit
>>>>>>>>>>>>> rights to
>>>>>>>>>>>>> the project ?
>>>>>>>>>>>>> IMHO it can't go to the CXF master though perhaps an 
>>>>>>>>>>>>> option of
>>>>>>>>>>>>> opening
>>>>>>>>>>>>> a CXF sub-project is viable which will need to be 
>>>>>>>>>>>>> discussed on
>>>>>>>>>>>>> the CXF
>>>>>>>>>>>>> dev list. Whether it will stay where it is now or end up as a
>>>>>>>>>>>>> CXF
>>>>>>>>>>>>> project, you'd have to support and release it, so I'm not 
>>>>>>>>>>>>> sure
>>>>>>>>>>>>> what
>>>>>>>>>>>>> difference would it make if it ended up being a CXF 
>>>>>>>>>>>>> sub-project
>>>>>>>>>>>>> given
>>>>>>>>>>>>> it already has a home...
>>>>>>>>>>>>>
>>>>>>>>>>>>> Thanks, Sergey
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> On 06/11/16 19:32, Johannes Fiala wrote:
>>>>>>>>>>>>>> Hi there,
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> The JAXB annotation plugin provided by krasa
>>>>>>>>>>>>>> (https://github.com/krasa/krasa-jaxb-tools) is no longer
>>>>>>>>>>>>>> supported,
>>>>>>>>>>>>>> does
>>>>>>>>>>>>>> it make sense to contact the author to merge this into CXF
>>>>>>>>>>>>>> master?
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Maybe we could also get the BeanValidation for parameters
>>>>>>>>>>>>>> working
>>>>>>>>>>>>>> (https://github.com/apache/cxf/pull/146/files) to improve 
>>>>>>>>>>>>>> the
>>>>>>>>>>>>>> overall
>>>>>>>>>>>>>> BeanValidation experience.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Is anybody interested in putting this on the agenda for the
>>>>>>>>>>>>>> hackathon?
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Best regards,
>>>>>>>>>>>>>> Johannes
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>
>>
>
>


Re: CXF BeanValidation annotation support

Posted by Sergey Beryozkin <sb...@gmail.com>.
And finally, I'm not saying inlining XML schema fragments is going 
nowhere, if you are passionate about this particular approach then 
please try to get some positive feedback form a team supporting an 
original Sun wadl-to-java tool - I'll support you at the CXF level if 
you will some progress.

But in meantime I'd like to encourage you to review Option 1 & 2 I 
listed earlier deeper. IMHO Option1 has a higher chance of getting an 
eventual wider adoption (with a diff namespace of course)

Cheers, Sergey
On 08/11/16 11:22, Sergey Beryozkin wrote:
> Hi Johannes
>
> I'd like to clarify.
>
> Rather than going the XML schema path, with the incomplete but possibly
> nested schema types to keep even this already invalid incomplete schema
> fragment being a single 'piece', and effectively starting modeling
> BeanValidation via XML schema, and trying to figure out how to support
> it cleanly both ways, all for the sake of letting the user to avoid
> doing a 'null' check or some size check in the code,
>
> I'd rather like to see a simple solution which works and which 'speaks'
> it is about a parameter validation.
>
> The fact that the Swagger2 supports this approach is not convincing. And
> now that I think about it it is even unusual to hear about Swagger
> inlining somewhere incomplete XML schema fragments, being itself very
> much JSON centric.
>
> So I'd not even call this proposed extension a 'beanValidation' but
> simply 'validation':
> <wadl ... xmlns:val="http://cxf.apache.org/wadl/validation">
> <wadl:param>
>  <val:validation>
>     ...
>  </val:validation>
> </wadl:param>
>
> I look at it and see it is about the extra validation of a given
> non-representation (non XMLSchema related) parameter.
>
> If XMLSchema is a must for you then simply follow an Option2 I outlined
> earlier. It already works on a WADL to Java a path. The only compromise
> you'd have to make is to have non-simple parameter types in the
> signature and register ParamConverterProvider. This is still a perfectly
> valid JAX-RS 2.0.
>
> Cheers, Sergey
>
>
> On 08/11/16 10:25, Sergey Beryozkin wrote:
>> Hi
>> On 07/11/16 22:52, J. Fiala wrote:
>>> Hi Sergey,
>>>
>>> I think we should split the whole thing into two topics (issues/PRs):
>>>
>> Well. I'd rather have a single approach working both ways.
>>
>>> 1.) SourceGenerator for contract-first-only with 100% portability
>>> This should be supported for people who only practice contract first and
>>> don't care of the WadlGenerator and simply want to use clean
>>> simple/nested types for their WADL parameters. This warrants 100%
>>> portability for the WADL contract.
>>>
>>> a) support simpletypes:
>>>
>>> <param name="username" style="query" type="myns:username"
>>> required="false" />
>>>
>>> <xs:simpleType name="username">
>>>         <xs:restriction base="xs:string">
>>>             <xs:maxLength value="50"/>
>>>         </xs:restriction>
>>>     </xs:simpleType>
>>>
>>> This is what I already implemented, but only for the directly resolved
>>> type (like example here), here I could go deeper as well to further
>>> restrictions (<xs restriction base="mydeepersimpletype"...>).
>>>
>>> b) support nested types:
>>>
>>> <param name="username" style="query" type="myns:username"
>>> required="false" >
>>> <xs:simpleType>
>>> <xs:restriction base="xs:string">
>>> <xs:maxLength value="50" />
>>> </xs:restriction>
>>> </param>
>>>
>>> This is what I already implemented (check if nested simpleType is
>>> present + pick it up).
>>>
>>> If you like to I can rework the PR
>>> https://github.com/apache/cxf/pull/146 and add only the implementation
>>> of SourceGenerator so you can merge conveniently.
>>>
>> As I said I'm not keen on this particular approach because using an
>> incomplete XML schema fragments to implicitly carry the optional
>> parameter validation info, where any of this String/int parameters has
>> nothing to do with XML schema, look wrong to me. It does not scale.
>>
>>
>>> 2.) BeanValidation for the WadlGenerator and for SourceGenerator for
>>> easier roundtrip development
>>>
>> It is not the easier roundtrip dev but about having a complete solution
>>
>>> I think the main task should be to pickup the beanvalidation annotations
>>> for both wadl:param AND xs:element/xs:complexTypes.
>>> If we only add support for parameters and don't support it in the
>>> complextypes it is only  the minor part of the deal.
>>> However, with the apporach to get working what is possible without big
>>> effort, we can in first place only support wadl:param.
>>>
>> I honestly would not like to go into the whole XML schema for the
>> purpose of optionally adding some bean validations, we've spent a lot of
>> time talking about it.
>>
>>> For wadl:param:
>>> For @NotNull I'd prefer to use wadl:param@required, no need for the
>>> custom namespace here.
>> Sure start with supporting NotNull.
>>
>>> So I can start with @Size (minLength/maxLength) here and setup a first
>>> implementation like the following.
>>>
>>> WadlGenerator:
>>> <wadl:param name="username" required="true">
>>> <cxfrs:beanValidation>
>>>   <cxfrs:minLength value="1"/>
>>>   <cxfrs:maxLength value="100" />
>>> </cxfrs:beanValidation>
>>> </wadl:param>
>> That won't scale once you'd want to add one more annotation support. It
>> would have to be something like
>>
>> <cxfrs:beanValidation>
>>    <cxfrs:size minLength="1" maxLength="100" />
>> </cxfrs:beanValidation>
>>
>> without any nested minLength/etc to simplify the processing of 'size'
>> and to support adding of other beanVal, including NotNull, ex:
>>
>> <cxfrs:beanValidation>
>>    <cxfrs:size minLength="1" maxLength="100" />
>>    <cxfrs:notNull/>
>> </cxfrs:beanValidation>
>>
>>
>> It is better to have a single place for everything related to beanVal.
>>>
>>> SourceGenerator: look for nested beanValidation tag and pick validations
>>> up.
>>>
>> yes
>>> After implementing this, the next step would be to support the custom
>>> tag for the complexTypes/JAXB-processing...
>>>
>> I'm sorry I disagree. Lets keep XMLSchema out of the picture for now as
>> far as the validation of optional parameters is concerned
>>
>> Cheers, Sergey
>>> If you agree with that, I suggest setting up two separate Jira issues so
>>> we can move all the further comments there.
>>>
>>> What do you think of this idea?
>>>
>>> Best regards,
>>>
>>> Johannes
>>>
>>>
>>>
>>> Am 07.11.2016 um 22:12 schrieb Sergey Beryozkin:
>>>> Perhaps you can start with supporting a not null only ?
>>>> If a parameter @required is set (this can be enabled on the WADL to
>>>> Java if BeanVal NotNull is set) then SourceGenerator can add this
>>>> annotation back if its -beanValidation is set.
>>>> The only restriction is that please use String class names of the
>>>> BeanValidation for now until we figure our a neater approach to avoid
>>>> the strong BeanVal dependencies
>>>>
>>>> Cheers, Sergey
>>>> On 07/11/16 21:08, Sergey Beryozkin wrote:
>>>>> Hi Johannes
>>>>>
>>>>> Option 2 already works in the WADL to Java case. The only problem with
>>>>> it, as discussed earlier, is that WADL grammar is meant to represent
>>>>> the
>>>>> data representations, but SourceGenerator does not enforce it right
>>>>> now
>>>>> and referring from the parameters to the schema elements is still
>>>>> supported.
>>>>>
>>>>> IMHO it makes sense to have a solution which works both ways first
>>>>> without doing a massive effort as we don't really have time/scope for
>>>>> it.
>>>>>
>>>>> Completing Option2 support will only require adding the parameter bean
>>>>> classes to the JAXB context.
>>>>> Option 1 will require a bit more work at the start but once you have
>>>>> something like
>>>>> <wadl:param>
>>>>> <cxfrs:beanValidation>
>>>>>   <notNull/>
>>>>>   <someOtherBeanValName a="b" "c"="d">
>>>>> </cxfrs:beanValidation>
>>>>> </wadl:param>
>>>>>
>>>>> then it will become quite straigtforward on the WADL to Java side...
>>>>>
>>>>> Ideally one would even allocate a namespace which would extend the
>>>>> core
>>>>> WADL namespace. Ex,
>>>>>
>>>>> http://wadl.dev.java.net/extensions/bval
>>>>>
>>>>> Might be worth investigating if it is allowed or not.
>>>>>
>>>>> Cheers, Sergey
>>>>>
>>>>> On 07/11/16 18:01, J. Fiala wrote:
>>>>>> Hi Sergey,
>>>>>>
>>>>>> Thx for the analysis.
>>>>>>
>>>>>> Regarding the WadlGenerator I'd also prefer option 1 opposing to
>>>>>> option
>>>>>> 2 (without the original idea available).
>>>>>>
>>>>>> Regarding the SourceGenerator I think it should support clean
>>>>>> parameter
>>>>>> type references in any way. So even if we follow option 1, we would
>>>>>> need
>>>>>> to support correctly referenced simpletypes from parameters as
>>>>>> well as
>>>>>> the cxfrs:beanValidation extension.
>>>>>>
>>>>>> But probably it's easier to discuss this with examples together :).
>>>>>>
>>>>>> Best regards,
>>>>>> Johannes
>>>>>>
>>>>>>
>>>>>> Am 07.11.2016 um 18:13 schrieb Sergey Beryozkin:
>>>>>>> Hi Johannes
>>>>>>>
>>>>>>> I've looked through various messages and pull requests.
>>>>>>>
>>>>>>> One approach was to insert incomplete schema fragments into
>>>>>>> wadl:param
>>>>>>> with the implicit understanding it was meant to create BeanVal
>>>>>>> parameters and I felt quite uncomfortable about pursuing that
>>>>>>> particular path.
>>>>>>>
>>>>>>> The last idea we were trying to narrow upon was using a separate XML
>>>>>>> schema grammar which would be used to create Bean validation if a
>>>>>>> bean
>>>>>>> validation flag is set. This is a bit more WADL friendly but
>>>>>>> again it
>>>>>>> does not look to me like a solution which says "this is to support
>>>>>>> the
>>>>>>> bean validation" for parameters and I'm finding it difficult to see
>>>>>>> how it will work both ways.
>>>>>>>
>>>>>>> I'd to revisit these 2 proposals
>>>>>>>
>>>>>>> 1. have a CXF WADL extension, ex, cxfrs:beanValidation. This will be
>>>>>>> in wadl:param and will be optimized around supporting all
>>>>>>> whatever is
>>>>>>> needed to generate BeanVal annotations and represent any BeanVal in
>>>>>>> the Java to WADL case.
>>>>>>> This works both ways and IMHO simpler and cleaner, instead of trying
>>>>>>> to 'carry' the bean validation info via XML schema fragments, with
>>>>>>> all
>>>>>>> the limitations which seems ultimately wrong to me.
>>>>>>> cxfrs:beanValidation will be of course only recognized by a CXF
>>>>>>> wadl-to-java tool but I feel this approach will have more chances to
>>>>>>> act getting more support via other provider's tool extensions than
>>>>>>> the
>>>>>>> pseudo XML schema approach which is in fact would be equally CXF
>>>>>>> specific.
>>>>>>>
>>>>>>> 2. Do not do anything at all but have wadl:param refer to XML
>>>>>>> complex
>>>>>>> types. As I said earlier, this will require the use of
>>>>>>> ParamConverterProvider which will have a chance to validate the
>>>>>>> beans.
>>>>>>> These beans will already have BeanVal annotations in them. This also
>>>>>>> works both ways - on the WADLToJava side you'd just add these bean
>>>>>>> classes to a JAXBContext for the JAXB schema gen to add the relevant
>>>>>>> schema definitions.
>>>>>>>
>>>>>>> My preference is option 1).
>>>>>>>
>>>>>>> We can discuss the options next week too,
>>>>>>>
>>>>>>> Thanks, Sergey
>>>>>>>
>>>>>>> On 06/11/16 22:25, Sergey Beryozkin wrote:
>>>>>>>> Hi Johannes
>>>>>>>>
>>>>>>>> Can you please briefly summarize the proposed changes to WADLGen &
>>>>>>>> SourceGen ? There've been many emails and I recall I thought more
>>>>>>>> work
>>>>>>>> was needed to keep both approaches in sync. Right now I see
>>>>>>>> WADLGen has
>>>>>>>> some explicit BeanVal dependencies. I def remember objecting to
>>>>>>>> this
>>>>>>>> particular approach.
>>>>>>>> So how this can be generalized, be WADL friendly, and work both
>>>>>>>> ways ?
>>>>>>>>
>>>>>>>> Sergey
>>>>>>>> On 06/11/16 21:59, J. Fiala wrote:
>>>>>>>>> Hi Sergey,
>>>>>>>>>
>>>>>>>>> OK, I agree 100%, it would be great to have some progress with
>>>>>>>>> the PR
>>>>>>>>> here if you have time for it.
>>>>>>>>>
>>>>>>>>> Best regards,
>>>>>>>>> Johannes
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Am 06.11.2016 um 22:58 schrieb Sergey Beryozkin:
>>>>>>>>>> Hi Johannes
>>>>>>>>>>
>>>>>>>>>> I'd say the WADL-related updates should be limited to
>>>>>>>>>> WADLGen/SourceGen
>>>>>>>>>>
>>>>>>>>>> Cheers, Sergey
>>>>>>>>>> On 06/11/16 21:46, J. Fiala wrote:
>>>>>>>>>>> Hi Sergey,
>>>>>>>>>>>
>>>>>>>>>>> I can ask him or simply do a fork of the complete project and
>>>>>>>>>>> then
>>>>>>>>>>> cover
>>>>>>>>>>> it under the Apache license provided the author agrees with
>>>>>>>>>>> this.
>>>>>>>>>>>
>>>>>>>>>>> Do you think further BeanValidation extensions for CXF should
>>>>>>>>>>> also go
>>>>>>>>>>> there and I should subclass the
>>>>>>>>>>> WadlGenerator/SourceGenerator? Or
>>>>>>>>>>> shall
>>>>>>>>>>> we merge this at the Hackathon at ApacheCon maybe?
>>>>>>>>>>>
>>>>>>>>>>> Best regards,
>>>>>>>>>>> Johannes
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Am 06.11.2016 um 22:40 schrieb Sergey Beryozkin:
>>>>>>>>>>>> Hi Johannes
>>>>>>>>>>>>
>>>>>>>>>>>> Would it make sense asking the author to give you the commit
>>>>>>>>>>>> rights to
>>>>>>>>>>>> the project ?
>>>>>>>>>>>> IMHO it can't go to the CXF master though perhaps an option of
>>>>>>>>>>>> opening
>>>>>>>>>>>> a CXF sub-project is viable which will need to be discussed on
>>>>>>>>>>>> the CXF
>>>>>>>>>>>> dev list. Whether it will stay where it is now or end up as a
>>>>>>>>>>>> CXF
>>>>>>>>>>>> project, you'd have to support and release it, so I'm not sure
>>>>>>>>>>>> what
>>>>>>>>>>>> difference would it make if it ended up being a CXF sub-project
>>>>>>>>>>>> given
>>>>>>>>>>>> it already has a home...
>>>>>>>>>>>>
>>>>>>>>>>>> Thanks, Sergey
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> On 06/11/16 19:32, Johannes Fiala wrote:
>>>>>>>>>>>>> Hi there,
>>>>>>>>>>>>>
>>>>>>>>>>>>> The JAXB annotation plugin provided by krasa
>>>>>>>>>>>>> (https://github.com/krasa/krasa-jaxb-tools) is no longer
>>>>>>>>>>>>> supported,
>>>>>>>>>>>>> does
>>>>>>>>>>>>> it make sense to contact the author to merge this into CXF
>>>>>>>>>>>>> master?
>>>>>>>>>>>>>
>>>>>>>>>>>>> Maybe we could also get the BeanValidation for parameters
>>>>>>>>>>>>> working
>>>>>>>>>>>>> (https://github.com/apache/cxf/pull/146/files) to improve the
>>>>>>>>>>>>> overall
>>>>>>>>>>>>> BeanValidation experience.
>>>>>>>>>>>>>
>>>>>>>>>>>>> Is anybody interested in putting this on the agenda for the
>>>>>>>>>>>>> hackathon?
>>>>>>>>>>>>>
>>>>>>>>>>>>> Best regards,
>>>>>>>>>>>>> Johannes
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>>
>>>
>>>
>>
>


-- 
Sergey Beryozkin

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

Re: CXF BeanValidation annotation support

Posted by Sergey Beryozkin <sb...@gmail.com>.
Hi Johannes

I'd like to clarify.

Rather than going the XML schema path, with the incomplete but possibly 
nested schema types to keep even this already invalid incomplete schema 
fragment being a single 'piece', and effectively starting modeling 
BeanValidation via XML schema, and trying to figure out how to support 
it cleanly both ways, all for the sake of letting the user to avoid 
doing a 'null' check or some size check in the code,

I'd rather like to see a simple solution which works and which 'speaks' 
it is about a parameter validation.

The fact that the Swagger2 supports this approach is not convincing. And 
now that I think about it it is even unusual to hear about Swagger 
inlining somewhere incomplete XML schema fragments, being itself very 
much JSON centric.

So I'd not even call this proposed extension a 'beanValidation' but 
simply 'validation':
<wadl ... xmlns:val="http://cxf.apache.org/wadl/validation">
<wadl:param>
  <val:validation>
     ...
  </val:validation>
</wadl:param>

I look at it and see it is about the extra validation of a given 
non-representation (non XMLSchema related) parameter.

If XMLSchema is a must for you then simply follow an Option2 I outlined 
earlier. It already works on a WADL to Java a path. The only compromise 
you'd have to make is to have non-simple parameter types in the 
signature and register ParamConverterProvider. This is still a perfectly 
valid JAX-RS 2.0.

Cheers, Sergey


On 08/11/16 10:25, Sergey Beryozkin wrote:
> Hi
> On 07/11/16 22:52, J. Fiala wrote:
>> Hi Sergey,
>>
>> I think we should split the whole thing into two topics (issues/PRs):
>>
> Well. I'd rather have a single approach working both ways.
>
>> 1.) SourceGenerator for contract-first-only with 100% portability
>> This should be supported for people who only practice contract first and
>> don't care of the WadlGenerator and simply want to use clean
>> simple/nested types for their WADL parameters. This warrants 100%
>> portability for the WADL contract.
>>
>> a) support simpletypes:
>>
>> <param name="username" style="query" type="myns:username"
>> required="false" />
>>
>> <xs:simpleType name="username">
>>         <xs:restriction base="xs:string">
>>             <xs:maxLength value="50"/>
>>         </xs:restriction>
>>     </xs:simpleType>
>>
>> This is what I already implemented, but only for the directly resolved
>> type (like example here), here I could go deeper as well to further
>> restrictions (<xs restriction base="mydeepersimpletype"...>).
>>
>> b) support nested types:
>>
>> <param name="username" style="query" type="myns:username"
>> required="false" >
>> <xs:simpleType>
>> <xs:restriction base="xs:string">
>> <xs:maxLength value="50" />
>> </xs:restriction>
>> </param>
>>
>> This is what I already implemented (check if nested simpleType is
>> present + pick it up).
>>
>> If you like to I can rework the PR
>> https://github.com/apache/cxf/pull/146 and add only the implementation
>> of SourceGenerator so you can merge conveniently.
>>
> As I said I'm not keen on this particular approach because using an
> incomplete XML schema fragments to implicitly carry the optional
> parameter validation info, where any of this String/int parameters has
> nothing to do with XML schema, look wrong to me. It does not scale.
>
>
>> 2.) BeanValidation for the WadlGenerator and for SourceGenerator for
>> easier roundtrip development
>>
> It is not the easier roundtrip dev but about having a complete solution
>
>> I think the main task should be to pickup the beanvalidation annotations
>> for both wadl:param AND xs:element/xs:complexTypes.
>> If we only add support for parameters and don't support it in the
>> complextypes it is only  the minor part of the deal.
>> However, with the apporach to get working what is possible without big
>> effort, we can in first place only support wadl:param.
>>
> I honestly would not like to go into the whole XML schema for the
> purpose of optionally adding some bean validations, we've spent a lot of
> time talking about it.
>
>> For wadl:param:
>> For @NotNull I'd prefer to use wadl:param@required, no need for the
>> custom namespace here.
> Sure start with supporting NotNull.
>
>> So I can start with @Size (minLength/maxLength) here and setup a first
>> implementation like the following.
>>
>> WadlGenerator:
>> <wadl:param name="username" required="true">
>> <cxfrs:beanValidation>
>>   <cxfrs:minLength value="1"/>
>>   <cxfrs:maxLength value="100" />
>> </cxfrs:beanValidation>
>> </wadl:param>
> That won't scale once you'd want to add one more annotation support. It
> would have to be something like
>
> <cxfrs:beanValidation>
>    <cxfrs:size minLength="1" maxLength="100" />
> </cxfrs:beanValidation>
>
> without any nested minLength/etc to simplify the processing of 'size'
> and to support adding of other beanVal, including NotNull, ex:
>
> <cxfrs:beanValidation>
>    <cxfrs:size minLength="1" maxLength="100" />
>    <cxfrs:notNull/>
> </cxfrs:beanValidation>
>
>
> It is better to have a single place for everything related to beanVal.
>>
>> SourceGenerator: look for nested beanValidation tag and pick validations
>> up.
>>
> yes
>> After implementing this, the next step would be to support the custom
>> tag for the complexTypes/JAXB-processing...
>>
> I'm sorry I disagree. Lets keep XMLSchema out of the picture for now as
> far as the validation of optional parameters is concerned
>
> Cheers, Sergey
>> If you agree with that, I suggest setting up two separate Jira issues so
>> we can move all the further comments there.
>>
>> What do you think of this idea?
>>
>> Best regards,
>>
>> Johannes
>>
>>
>>
>> Am 07.11.2016 um 22:12 schrieb Sergey Beryozkin:
>>> Perhaps you can start with supporting a not null only ?
>>> If a parameter @required is set (this can be enabled on the WADL to
>>> Java if BeanVal NotNull is set) then SourceGenerator can add this
>>> annotation back if its -beanValidation is set.
>>> The only restriction is that please use String class names of the
>>> BeanValidation for now until we figure our a neater approach to avoid
>>> the strong BeanVal dependencies
>>>
>>> Cheers, Sergey
>>> On 07/11/16 21:08, Sergey Beryozkin wrote:
>>>> Hi Johannes
>>>>
>>>> Option 2 already works in the WADL to Java case. The only problem with
>>>> it, as discussed earlier, is that WADL grammar is meant to represent
>>>> the
>>>> data representations, but SourceGenerator does not enforce it right now
>>>> and referring from the parameters to the schema elements is still
>>>> supported.
>>>>
>>>> IMHO it makes sense to have a solution which works both ways first
>>>> without doing a massive effort as we don't really have time/scope for
>>>> it.
>>>>
>>>> Completing Option2 support will only require adding the parameter bean
>>>> classes to the JAXB context.
>>>> Option 1 will require a bit more work at the start but once you have
>>>> something like
>>>> <wadl:param>
>>>> <cxfrs:beanValidation>
>>>>   <notNull/>
>>>>   <someOtherBeanValName a="b" "c"="d">
>>>> </cxfrs:beanValidation>
>>>> </wadl:param>
>>>>
>>>> then it will become quite straigtforward on the WADL to Java side...
>>>>
>>>> Ideally one would even allocate a namespace which would extend the core
>>>> WADL namespace. Ex,
>>>>
>>>> http://wadl.dev.java.net/extensions/bval
>>>>
>>>> Might be worth investigating if it is allowed or not.
>>>>
>>>> Cheers, Sergey
>>>>
>>>> On 07/11/16 18:01, J. Fiala wrote:
>>>>> Hi Sergey,
>>>>>
>>>>> Thx for the analysis.
>>>>>
>>>>> Regarding the WadlGenerator I'd also prefer option 1 opposing to
>>>>> option
>>>>> 2 (without the original idea available).
>>>>>
>>>>> Regarding the SourceGenerator I think it should support clean
>>>>> parameter
>>>>> type references in any way. So even if we follow option 1, we would
>>>>> need
>>>>> to support correctly referenced simpletypes from parameters as well as
>>>>> the cxfrs:beanValidation extension.
>>>>>
>>>>> But probably it's easier to discuss this with examples together :).
>>>>>
>>>>> Best regards,
>>>>> Johannes
>>>>>
>>>>>
>>>>> Am 07.11.2016 um 18:13 schrieb Sergey Beryozkin:
>>>>>> Hi Johannes
>>>>>>
>>>>>> I've looked through various messages and pull requests.
>>>>>>
>>>>>> One approach was to insert incomplete schema fragments into
>>>>>> wadl:param
>>>>>> with the implicit understanding it was meant to create BeanVal
>>>>>> parameters and I felt quite uncomfortable about pursuing that
>>>>>> particular path.
>>>>>>
>>>>>> The last idea we were trying to narrow upon was using a separate XML
>>>>>> schema grammar which would be used to create Bean validation if a
>>>>>> bean
>>>>>> validation flag is set. This is a bit more WADL friendly but again it
>>>>>> does not look to me like a solution which says "this is to support
>>>>>> the
>>>>>> bean validation" for parameters and I'm finding it difficult to see
>>>>>> how it will work both ways.
>>>>>>
>>>>>> I'd to revisit these 2 proposals
>>>>>>
>>>>>> 1. have a CXF WADL extension, ex, cxfrs:beanValidation. This will be
>>>>>> in wadl:param and will be optimized around supporting all whatever is
>>>>>> needed to generate BeanVal annotations and represent any BeanVal in
>>>>>> the Java to WADL case.
>>>>>> This works both ways and IMHO simpler and cleaner, instead of trying
>>>>>> to 'carry' the bean validation info via XML schema fragments, with
>>>>>> all
>>>>>> the limitations which seems ultimately wrong to me.
>>>>>> cxfrs:beanValidation will be of course only recognized by a CXF
>>>>>> wadl-to-java tool but I feel this approach will have more chances to
>>>>>> act getting more support via other provider's tool extensions than
>>>>>> the
>>>>>> pseudo XML schema approach which is in fact would be equally CXF
>>>>>> specific.
>>>>>>
>>>>>> 2. Do not do anything at all but have wadl:param refer to XML complex
>>>>>> types. As I said earlier, this will require the use of
>>>>>> ParamConverterProvider which will have a chance to validate the
>>>>>> beans.
>>>>>> These beans will already have BeanVal annotations in them. This also
>>>>>> works both ways - on the WADLToJava side you'd just add these bean
>>>>>> classes to a JAXBContext for the JAXB schema gen to add the relevant
>>>>>> schema definitions.
>>>>>>
>>>>>> My preference is option 1).
>>>>>>
>>>>>> We can discuss the options next week too,
>>>>>>
>>>>>> Thanks, Sergey
>>>>>>
>>>>>> On 06/11/16 22:25, Sergey Beryozkin wrote:
>>>>>>> Hi Johannes
>>>>>>>
>>>>>>> Can you please briefly summarize the proposed changes to WADLGen &
>>>>>>> SourceGen ? There've been many emails and I recall I thought more
>>>>>>> work
>>>>>>> was needed to keep both approaches in sync. Right now I see
>>>>>>> WADLGen has
>>>>>>> some explicit BeanVal dependencies. I def remember objecting to this
>>>>>>> particular approach.
>>>>>>> So how this can be generalized, be WADL friendly, and work both
>>>>>>> ways ?
>>>>>>>
>>>>>>> Sergey
>>>>>>> On 06/11/16 21:59, J. Fiala wrote:
>>>>>>>> Hi Sergey,
>>>>>>>>
>>>>>>>> OK, I agree 100%, it would be great to have some progress with
>>>>>>>> the PR
>>>>>>>> here if you have time for it.
>>>>>>>>
>>>>>>>> Best regards,
>>>>>>>> Johannes
>>>>>>>>
>>>>>>>>
>>>>>>>> Am 06.11.2016 um 22:58 schrieb Sergey Beryozkin:
>>>>>>>>> Hi Johannes
>>>>>>>>>
>>>>>>>>> I'd say the WADL-related updates should be limited to
>>>>>>>>> WADLGen/SourceGen
>>>>>>>>>
>>>>>>>>> Cheers, Sergey
>>>>>>>>> On 06/11/16 21:46, J. Fiala wrote:
>>>>>>>>>> Hi Sergey,
>>>>>>>>>>
>>>>>>>>>> I can ask him or simply do a fork of the complete project and
>>>>>>>>>> then
>>>>>>>>>> cover
>>>>>>>>>> it under the Apache license provided the author agrees with this.
>>>>>>>>>>
>>>>>>>>>> Do you think further BeanValidation extensions for CXF should
>>>>>>>>>> also go
>>>>>>>>>> there and I should subclass the WadlGenerator/SourceGenerator? Or
>>>>>>>>>> shall
>>>>>>>>>> we merge this at the Hackathon at ApacheCon maybe?
>>>>>>>>>>
>>>>>>>>>> Best regards,
>>>>>>>>>> Johannes
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Am 06.11.2016 um 22:40 schrieb Sergey Beryozkin:
>>>>>>>>>>> Hi Johannes
>>>>>>>>>>>
>>>>>>>>>>> Would it make sense asking the author to give you the commit
>>>>>>>>>>> rights to
>>>>>>>>>>> the project ?
>>>>>>>>>>> IMHO it can't go to the CXF master though perhaps an option of
>>>>>>>>>>> opening
>>>>>>>>>>> a CXF sub-project is viable which will need to be discussed on
>>>>>>>>>>> the CXF
>>>>>>>>>>> dev list. Whether it will stay where it is now or end up as a
>>>>>>>>>>> CXF
>>>>>>>>>>> project, you'd have to support and release it, so I'm not sure
>>>>>>>>>>> what
>>>>>>>>>>> difference would it make if it ended up being a CXF sub-project
>>>>>>>>>>> given
>>>>>>>>>>> it already has a home...
>>>>>>>>>>>
>>>>>>>>>>> Thanks, Sergey
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> On 06/11/16 19:32, Johannes Fiala wrote:
>>>>>>>>>>>> Hi there,
>>>>>>>>>>>>
>>>>>>>>>>>> The JAXB annotation plugin provided by krasa
>>>>>>>>>>>> (https://github.com/krasa/krasa-jaxb-tools) is no longer
>>>>>>>>>>>> supported,
>>>>>>>>>>>> does
>>>>>>>>>>>> it make sense to contact the author to merge this into CXF
>>>>>>>>>>>> master?
>>>>>>>>>>>>
>>>>>>>>>>>> Maybe we could also get the BeanValidation for parameters
>>>>>>>>>>>> working
>>>>>>>>>>>> (https://github.com/apache/cxf/pull/146/files) to improve the
>>>>>>>>>>>> overall
>>>>>>>>>>>> BeanValidation experience.
>>>>>>>>>>>>
>>>>>>>>>>>> Is anybody interested in putting this on the agenda for the
>>>>>>>>>>>> hackathon?
>>>>>>>>>>>>
>>>>>>>>>>>> Best regards,
>>>>>>>>>>>> Johannes
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>>
>>
>>
>


Re: CXF BeanValidation annotation support

Posted by Sergey Beryozkin <sb...@gmail.com>.
Hi
On 07/11/16 22:52, J. Fiala wrote:
> Hi Sergey,
>
> I think we should split the whole thing into two topics (issues/PRs):
>
Well. I'd rather have a single approach working both ways.

> 1.) SourceGenerator for contract-first-only with 100% portability
> This should be supported for people who only practice contract first and
> don't care of the WadlGenerator and simply want to use clean
> simple/nested types for their WADL parameters. This warrants 100%
> portability for the WADL contract.
>
> a) support simpletypes:
>
> <param name="username" style="query" type="myns:username"
> required="false" />
>
> <xs:simpleType name="username">
>         <xs:restriction base="xs:string">
>             <xs:maxLength value="50"/>
>         </xs:restriction>
>     </xs:simpleType>
>
> This is what I already implemented, but only for the directly resolved
> type (like example here), here I could go deeper as well to further
> restrictions (<xs restriction base="mydeepersimpletype"...>).
>
> b) support nested types:
>
> <param name="username" style="query" type="myns:username"
> required="false" >
> <xs:simpleType>
> <xs:restriction base="xs:string">
> <xs:maxLength value="50" />
> </xs:restriction>
> </param>
>
> This is what I already implemented (check if nested simpleType is
> present + pick it up).
>
> If you like to I can rework the PR
> https://github.com/apache/cxf/pull/146 and add only the implementation
> of SourceGenerator so you can merge conveniently.
>
As I said I'm not keen on this particular approach because using an 
incomplete XML schema fragments to implicitly carry the optional 
parameter validation info, where any of this String/int parameters has 
nothing to do with XML schema, look wrong to me. It does not scale.


> 2.) BeanValidation for the WadlGenerator and for SourceGenerator for
> easier roundtrip development
>
It is not the easier roundtrip dev but about having a complete solution

> I think the main task should be to pickup the beanvalidation annotations
> for both wadl:param AND xs:element/xs:complexTypes.
> If we only add support for parameters and don't support it in the
> complextypes it is only  the minor part of the deal.
> However, with the apporach to get working what is possible without big
> effort, we can in first place only support wadl:param.
>
I honestly would not like to go into the whole XML schema for the 
purpose of optionally adding some bean validations, we've spent a lot of 
time talking about it.

> For wadl:param:
> For @NotNull I'd prefer to use wadl:param@required, no need for the
> custom namespace here.
Sure start with supporting NotNull.

> So I can start with @Size (minLength/maxLength) here and setup a first
> implementation like the following.
>
> WadlGenerator:
> <wadl:param name="username" required="true">
> <cxfrs:beanValidation>
>   <cxfrs:minLength value="1"/>
>   <cxfrs:maxLength value="100" />
> </cxfrs:beanValidation>
> </wadl:param>
That won't scale once you'd want to add one more annotation support. It 
would have to be something like

<cxfrs:beanValidation>
    <cxfrs:size minLength="1" maxLength="100" />
</cxfrs:beanValidation>

without any nested minLength/etc to simplify the processing of 'size' 
and to support adding of other beanVal, including NotNull, ex:

<cxfrs:beanValidation>
    <cxfrs:size minLength="1" maxLength="100" />
    <cxfrs:notNull/>
</cxfrs:beanValidation>


It is better to have a single place for everything related to beanVal.
>
> SourceGenerator: look for nested beanValidation tag and pick validations
> up.
>
yes
> After implementing this, the next step would be to support the custom
> tag for the complexTypes/JAXB-processing...
>
I'm sorry I disagree. Lets keep XMLSchema out of the picture for now as 
far as the validation of optional parameters is concerned

Cheers, Sergey
> If you agree with that, I suggest setting up two separate Jira issues so
> we can move all the further comments there.
>
> What do you think of this idea?
>
> Best regards,
>
> Johannes
>
>
>
> Am 07.11.2016 um 22:12 schrieb Sergey Beryozkin:
>> Perhaps you can start with supporting a not null only ?
>> If a parameter @required is set (this can be enabled on the WADL to
>> Java if BeanVal NotNull is set) then SourceGenerator can add this
>> annotation back if its -beanValidation is set.
>> The only restriction is that please use String class names of the
>> BeanValidation for now until we figure our a neater approach to avoid
>> the strong BeanVal dependencies
>>
>> Cheers, Sergey
>> On 07/11/16 21:08, Sergey Beryozkin wrote:
>>> Hi Johannes
>>>
>>> Option 2 already works in the WADL to Java case. The only problem with
>>> it, as discussed earlier, is that WADL grammar is meant to represent the
>>> data representations, but SourceGenerator does not enforce it right now
>>> and referring from the parameters to the schema elements is still
>>> supported.
>>>
>>> IMHO it makes sense to have a solution which works both ways first
>>> without doing a massive effort as we don't really have time/scope for
>>> it.
>>>
>>> Completing Option2 support will only require adding the parameter bean
>>> classes to the JAXB context.
>>> Option 1 will require a bit more work at the start but once you have
>>> something like
>>> <wadl:param>
>>> <cxfrs:beanValidation>
>>>   <notNull/>
>>>   <someOtherBeanValName a="b" "c"="d">
>>> </cxfrs:beanValidation>
>>> </wadl:param>
>>>
>>> then it will become quite straigtforward on the WADL to Java side...
>>>
>>> Ideally one would even allocate a namespace which would extend the core
>>> WADL namespace. Ex,
>>>
>>> http://wadl.dev.java.net/extensions/bval
>>>
>>> Might be worth investigating if it is allowed or not.
>>>
>>> Cheers, Sergey
>>>
>>> On 07/11/16 18:01, J. Fiala wrote:
>>>> Hi Sergey,
>>>>
>>>> Thx for the analysis.
>>>>
>>>> Regarding the WadlGenerator I'd also prefer option 1 opposing to option
>>>> 2 (without the original idea available).
>>>>
>>>> Regarding the SourceGenerator I think it should support clean parameter
>>>> type references in any way. So even if we follow option 1, we would
>>>> need
>>>> to support correctly referenced simpletypes from parameters as well as
>>>> the cxfrs:beanValidation extension.
>>>>
>>>> But probably it's easier to discuss this with examples together :).
>>>>
>>>> Best regards,
>>>> Johannes
>>>>
>>>>
>>>> Am 07.11.2016 um 18:13 schrieb Sergey Beryozkin:
>>>>> Hi Johannes
>>>>>
>>>>> I've looked through various messages and pull requests.
>>>>>
>>>>> One approach was to insert incomplete schema fragments into wadl:param
>>>>> with the implicit understanding it was meant to create BeanVal
>>>>> parameters and I felt quite uncomfortable about pursuing that
>>>>> particular path.
>>>>>
>>>>> The last idea we were trying to narrow upon was using a separate XML
>>>>> schema grammar which would be used to create Bean validation if a bean
>>>>> validation flag is set. This is a bit more WADL friendly but again it
>>>>> does not look to me like a solution which says "this is to support the
>>>>> bean validation" for parameters and I'm finding it difficult to see
>>>>> how it will work both ways.
>>>>>
>>>>> I'd to revisit these 2 proposals
>>>>>
>>>>> 1. have a CXF WADL extension, ex, cxfrs:beanValidation. This will be
>>>>> in wadl:param and will be optimized around supporting all whatever is
>>>>> needed to generate BeanVal annotations and represent any BeanVal in
>>>>> the Java to WADL case.
>>>>> This works both ways and IMHO simpler and cleaner, instead of trying
>>>>> to 'carry' the bean validation info via XML schema fragments, with all
>>>>> the limitations which seems ultimately wrong to me.
>>>>> cxfrs:beanValidation will be of course only recognized by a CXF
>>>>> wadl-to-java tool but I feel this approach will have more chances to
>>>>> act getting more support via other provider's tool extensions than the
>>>>> pseudo XML schema approach which is in fact would be equally CXF
>>>>> specific.
>>>>>
>>>>> 2. Do not do anything at all but have wadl:param refer to XML complex
>>>>> types. As I said earlier, this will require the use of
>>>>> ParamConverterProvider which will have a chance to validate the beans.
>>>>> These beans will already have BeanVal annotations in them. This also
>>>>> works both ways - on the WADLToJava side you'd just add these bean
>>>>> classes to a JAXBContext for the JAXB schema gen to add the relevant
>>>>> schema definitions.
>>>>>
>>>>> My preference is option 1).
>>>>>
>>>>> We can discuss the options next week too,
>>>>>
>>>>> Thanks, Sergey
>>>>>
>>>>> On 06/11/16 22:25, Sergey Beryozkin wrote:
>>>>>> Hi Johannes
>>>>>>
>>>>>> Can you please briefly summarize the proposed changes to WADLGen &
>>>>>> SourceGen ? There've been many emails and I recall I thought more
>>>>>> work
>>>>>> was needed to keep both approaches in sync. Right now I see
>>>>>> WADLGen has
>>>>>> some explicit BeanVal dependencies. I def remember objecting to this
>>>>>> particular approach.
>>>>>> So how this can be generalized, be WADL friendly, and work both
>>>>>> ways ?
>>>>>>
>>>>>> Sergey
>>>>>> On 06/11/16 21:59, J. Fiala wrote:
>>>>>>> Hi Sergey,
>>>>>>>
>>>>>>> OK, I agree 100%, it would be great to have some progress with
>>>>>>> the PR
>>>>>>> here if you have time for it.
>>>>>>>
>>>>>>> Best regards,
>>>>>>> Johannes
>>>>>>>
>>>>>>>
>>>>>>> Am 06.11.2016 um 22:58 schrieb Sergey Beryozkin:
>>>>>>>> Hi Johannes
>>>>>>>>
>>>>>>>> I'd say the WADL-related updates should be limited to
>>>>>>>> WADLGen/SourceGen
>>>>>>>>
>>>>>>>> Cheers, Sergey
>>>>>>>> On 06/11/16 21:46, J. Fiala wrote:
>>>>>>>>> Hi Sergey,
>>>>>>>>>
>>>>>>>>> I can ask him or simply do a fork of the complete project and then
>>>>>>>>> cover
>>>>>>>>> it under the Apache license provided the author agrees with this.
>>>>>>>>>
>>>>>>>>> Do you think further BeanValidation extensions for CXF should
>>>>>>>>> also go
>>>>>>>>> there and I should subclass the WadlGenerator/SourceGenerator? Or
>>>>>>>>> shall
>>>>>>>>> we merge this at the Hackathon at ApacheCon maybe?
>>>>>>>>>
>>>>>>>>> Best regards,
>>>>>>>>> Johannes
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Am 06.11.2016 um 22:40 schrieb Sergey Beryozkin:
>>>>>>>>>> Hi Johannes
>>>>>>>>>>
>>>>>>>>>> Would it make sense asking the author to give you the commit
>>>>>>>>>> rights to
>>>>>>>>>> the project ?
>>>>>>>>>> IMHO it can't go to the CXF master though perhaps an option of
>>>>>>>>>> opening
>>>>>>>>>> a CXF sub-project is viable which will need to be discussed on
>>>>>>>>>> the CXF
>>>>>>>>>> dev list. Whether it will stay where it is now or end up as a CXF
>>>>>>>>>> project, you'd have to support and release it, so I'm not sure
>>>>>>>>>> what
>>>>>>>>>> difference would it make if it ended up being a CXF sub-project
>>>>>>>>>> given
>>>>>>>>>> it already has a home...
>>>>>>>>>>
>>>>>>>>>> Thanks, Sergey
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On 06/11/16 19:32, Johannes Fiala wrote:
>>>>>>>>>>> Hi there,
>>>>>>>>>>>
>>>>>>>>>>> The JAXB annotation plugin provided by krasa
>>>>>>>>>>> (https://github.com/krasa/krasa-jaxb-tools) is no longer
>>>>>>>>>>> supported,
>>>>>>>>>>> does
>>>>>>>>>>> it make sense to contact the author to merge this into CXF
>>>>>>>>>>> master?
>>>>>>>>>>>
>>>>>>>>>>> Maybe we could also get the BeanValidation for parameters
>>>>>>>>>>> working
>>>>>>>>>>> (https://github.com/apache/cxf/pull/146/files) to improve the
>>>>>>>>>>> overall
>>>>>>>>>>> BeanValidation experience.
>>>>>>>>>>>
>>>>>>>>>>> Is anybody interested in putting this on the agenda for the
>>>>>>>>>>> hackathon?
>>>>>>>>>>>
>>>>>>>>>>> Best regards,
>>>>>>>>>>> Johannes
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>
>>>
>>
>>
>
>


Re: CXF BeanValidation annotation support

Posted by "J. Fiala" <mo...@fwd.at>.
Hi Sergey,

I think we should split the whole thing into two topics (issues/PRs):

1.) SourceGenerator for contract-first-only with 100% portability
This should be supported for people who only practice contract first and 
don't care of the WadlGenerator and simply want to use clean 
simple/nested types for their WADL parameters. This warrants 100% 
portability for the WADL contract.

a) support simpletypes:

<param name="username" style="query" type="myns:username" 
required="false" />

<xs:simpleType name="username">
         <xs:restriction base="xs:string">
             <xs:maxLength value="50"/>
         </xs:restriction>
     </xs:simpleType>

This is what I already implemented, but only for the directly resolved 
type (like example here), here I could go deeper as well to further 
restrictions (<xs restriction base="mydeepersimpletype"...>).

b) support nested types:

<param name="username" style="query" type="myns:username" required="false" >
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="50" />
</xs:restriction>
</param>

This is what I already implemented (check if nested simpleType is 
present + pick it up).

If you like to I can rework the PR 
https://github.com/apache/cxf/pull/146 and add only the implementation 
of SourceGenerator so you can merge conveniently.

2.) BeanValidation for the WadlGenerator and for SourceGenerator for 
easier roundtrip development

I think the main task should be to pickup the beanvalidation annotations 
for both wadl:param AND xs:element/xs:complexTypes.
If we only add support for parameters and don't support it in the 
complextypes it is only  the minor part of the deal.
However, with the apporach to get working what is possible without big 
effort, we can in first place only support wadl:param.

For wadl:param:
For @NotNull I'd prefer to use wadl:param@required, no need for the 
custom namespace here.
So I can start with @Size (minLength/maxLength) here and setup a first 
implementation like the following.

WadlGenerator:
<wadl:param name="username" required="true">
<cxfrs:beanValidation>
   <cxfrs:minLength value="1"/>
   <cxfrs:maxLength value="100" />
</cxfrs:beanValidation>
</wadl:param>

SourceGenerator: look for nested beanValidation tag and pick validations up.

After implementing this, the next step would be to support the custom 
tag for the complexTypes/JAXB-processing...

If you agree with that, I suggest setting up two separate Jira issues so 
we can move all the further comments there.

What do you think of this idea?

Best regards,

Johannes



Am 07.11.2016 um 22:12 schrieb Sergey Beryozkin:
> Perhaps you can start with supporting a not null only ?
> If a parameter @required is set (this can be enabled on the WADL to 
> Java if BeanVal NotNull is set) then SourceGenerator can add this 
> annotation back if its -beanValidation is set.
> The only restriction is that please use String class names of the 
> BeanValidation for now until we figure our a neater approach to avoid 
> the strong BeanVal dependencies
>
> Cheers, Sergey
> On 07/11/16 21:08, Sergey Beryozkin wrote:
>> Hi Johannes
>>
>> Option 2 already works in the WADL to Java case. The only problem with
>> it, as discussed earlier, is that WADL grammar is meant to represent the
>> data representations, but SourceGenerator does not enforce it right now
>> and referring from the parameters to the schema elements is still
>> supported.
>>
>> IMHO it makes sense to have a solution which works both ways first
>> without doing a massive effort as we don't really have time/scope for 
>> it.
>>
>> Completing Option2 support will only require adding the parameter bean
>> classes to the JAXB context.
>> Option 1 will require a bit more work at the start but once you have
>> something like
>> <wadl:param>
>> <cxfrs:beanValidation>
>>   <notNull/>
>>   <someOtherBeanValName a="b" "c"="d">
>> </cxfrs:beanValidation>
>> </wadl:param>
>>
>> then it will become quite straigtforward on the WADL to Java side...
>>
>> Ideally one would even allocate a namespace which would extend the core
>> WADL namespace. Ex,
>>
>> http://wadl.dev.java.net/extensions/bval
>>
>> Might be worth investigating if it is allowed or not.
>>
>> Cheers, Sergey
>>
>> On 07/11/16 18:01, J. Fiala wrote:
>>> Hi Sergey,
>>>
>>> Thx for the analysis.
>>>
>>> Regarding the WadlGenerator I'd also prefer option 1 opposing to option
>>> 2 (without the original idea available).
>>>
>>> Regarding the SourceGenerator I think it should support clean parameter
>>> type references in any way. So even if we follow option 1, we would 
>>> need
>>> to support correctly referenced simpletypes from parameters as well as
>>> the cxfrs:beanValidation extension.
>>>
>>> But probably it's easier to discuss this with examples together :).
>>>
>>> Best regards,
>>> Johannes
>>>
>>>
>>> Am 07.11.2016 um 18:13 schrieb Sergey Beryozkin:
>>>> Hi Johannes
>>>>
>>>> I've looked through various messages and pull requests.
>>>>
>>>> One approach was to insert incomplete schema fragments into wadl:param
>>>> with the implicit understanding it was meant to create BeanVal
>>>> parameters and I felt quite uncomfortable about pursuing that
>>>> particular path.
>>>>
>>>> The last idea we were trying to narrow upon was using a separate XML
>>>> schema grammar which would be used to create Bean validation if a bean
>>>> validation flag is set. This is a bit more WADL friendly but again it
>>>> does not look to me like a solution which says "this is to support the
>>>> bean validation" for parameters and I'm finding it difficult to see
>>>> how it will work both ways.
>>>>
>>>> I'd to revisit these 2 proposals
>>>>
>>>> 1. have a CXF WADL extension, ex, cxfrs:beanValidation. This will be
>>>> in wadl:param and will be optimized around supporting all whatever is
>>>> needed to generate BeanVal annotations and represent any BeanVal in
>>>> the Java to WADL case.
>>>> This works both ways and IMHO simpler and cleaner, instead of trying
>>>> to 'carry' the bean validation info via XML schema fragments, with all
>>>> the limitations which seems ultimately wrong to me.
>>>> cxfrs:beanValidation will be of course only recognized by a CXF
>>>> wadl-to-java tool but I feel this approach will have more chances to
>>>> act getting more support via other provider's tool extensions than the
>>>> pseudo XML schema approach which is in fact would be equally CXF
>>>> specific.
>>>>
>>>> 2. Do not do anything at all but have wadl:param refer to XML complex
>>>> types. As I said earlier, this will require the use of
>>>> ParamConverterProvider which will have a chance to validate the beans.
>>>> These beans will already have BeanVal annotations in them. This also
>>>> works both ways - on the WADLToJava side you'd just add these bean
>>>> classes to a JAXBContext for the JAXB schema gen to add the relevant
>>>> schema definitions.
>>>>
>>>> My preference is option 1).
>>>>
>>>> We can discuss the options next week too,
>>>>
>>>> Thanks, Sergey
>>>>
>>>> On 06/11/16 22:25, Sergey Beryozkin wrote:
>>>>> Hi Johannes
>>>>>
>>>>> Can you please briefly summarize the proposed changes to WADLGen &
>>>>> SourceGen ? There've been many emails and I recall I thought more 
>>>>> work
>>>>> was needed to keep both approaches in sync. Right now I see 
>>>>> WADLGen has
>>>>> some explicit BeanVal dependencies. I def remember objecting to this
>>>>> particular approach.
>>>>> So how this can be generalized, be WADL friendly, and work both 
>>>>> ways ?
>>>>>
>>>>> Sergey
>>>>> On 06/11/16 21:59, J. Fiala wrote:
>>>>>> Hi Sergey,
>>>>>>
>>>>>> OK, I agree 100%, it would be great to have some progress with 
>>>>>> the PR
>>>>>> here if you have time for it.
>>>>>>
>>>>>> Best regards,
>>>>>> Johannes
>>>>>>
>>>>>>
>>>>>> Am 06.11.2016 um 22:58 schrieb Sergey Beryozkin:
>>>>>>> Hi Johannes
>>>>>>>
>>>>>>> I'd say the WADL-related updates should be limited to
>>>>>>> WADLGen/SourceGen
>>>>>>>
>>>>>>> Cheers, Sergey
>>>>>>> On 06/11/16 21:46, J. Fiala wrote:
>>>>>>>> Hi Sergey,
>>>>>>>>
>>>>>>>> I can ask him or simply do a fork of the complete project and then
>>>>>>>> cover
>>>>>>>> it under the Apache license provided the author agrees with this.
>>>>>>>>
>>>>>>>> Do you think further BeanValidation extensions for CXF should
>>>>>>>> also go
>>>>>>>> there and I should subclass the WadlGenerator/SourceGenerator? Or
>>>>>>>> shall
>>>>>>>> we merge this at the Hackathon at ApacheCon maybe?
>>>>>>>>
>>>>>>>> Best regards,
>>>>>>>> Johannes
>>>>>>>>
>>>>>>>>
>>>>>>>> Am 06.11.2016 um 22:40 schrieb Sergey Beryozkin:
>>>>>>>>> Hi Johannes
>>>>>>>>>
>>>>>>>>> Would it make sense asking the author to give you the commit
>>>>>>>>> rights to
>>>>>>>>> the project ?
>>>>>>>>> IMHO it can't go to the CXF master though perhaps an option of
>>>>>>>>> opening
>>>>>>>>> a CXF sub-project is viable which will need to be discussed on
>>>>>>>>> the CXF
>>>>>>>>> dev list. Whether it will stay where it is now or end up as a CXF
>>>>>>>>> project, you'd have to support and release it, so I'm not sure 
>>>>>>>>> what
>>>>>>>>> difference would it make if it ended up being a CXF sub-project
>>>>>>>>> given
>>>>>>>>> it already has a home...
>>>>>>>>>
>>>>>>>>> Thanks, Sergey
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On 06/11/16 19:32, Johannes Fiala wrote:
>>>>>>>>>> Hi there,
>>>>>>>>>>
>>>>>>>>>> The JAXB annotation plugin provided by krasa
>>>>>>>>>> (https://github.com/krasa/krasa-jaxb-tools) is no longer
>>>>>>>>>> supported,
>>>>>>>>>> does
>>>>>>>>>> it make sense to contact the author to merge this into CXF 
>>>>>>>>>> master?
>>>>>>>>>>
>>>>>>>>>> Maybe we could also get the BeanValidation for parameters 
>>>>>>>>>> working
>>>>>>>>>> (https://github.com/apache/cxf/pull/146/files) to improve the
>>>>>>>>>> overall
>>>>>>>>>> BeanValidation experience.
>>>>>>>>>>
>>>>>>>>>> Is anybody interested in putting this on the agenda for the
>>>>>>>>>> hackathon?
>>>>>>>>>>
>>>>>>>>>> Best regards,
>>>>>>>>>> Johannes
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>
>>
>
>


Re: CXF BeanValidation annotation support

Posted by Sergey Beryozkin <sb...@gmail.com>.
Perhaps you can start with supporting a not null only ?
If a parameter @required is set (this can be enabled on the WADL to Java 
if BeanVal NotNull is set) then SourceGenerator can add this annotation 
back if its -beanValidation is set.
The only restriction is that please use String class names of the 
BeanValidation for now until we figure our a neater approach to avoid 
the strong BeanVal dependencies

Cheers, Sergey
On 07/11/16 21:08, Sergey Beryozkin wrote:
> Hi Johannes
>
> Option 2 already works in the WADL to Java case. The only problem with
> it, as discussed earlier, is that WADL grammar is meant to represent the
> data representations, but SourceGenerator does not enforce it right now
> and referring from the parameters to the schema elements is still
> supported.
>
> IMHO it makes sense to have a solution which works both ways first
> without doing a massive effort as we don't really have time/scope for it.
>
> Completing Option2 support will only require adding the parameter bean
> classes to the JAXB context.
> Option 1 will require a bit more work at the start but once you have
> something like
> <wadl:param>
> <cxfrs:beanValidation>
>   <notNull/>
>   <someOtherBeanValName a="b" "c"="d">
> </cxfrs:beanValidation>
> </wadl:param>
>
> then it will become quite straigtforward on the WADL to Java side...
>
> Ideally one would even allocate a namespace which would extend the core
> WADL namespace. Ex,
>
> http://wadl.dev.java.net/extensions/bval
>
> Might be worth investigating if it is allowed or not.
>
> Cheers, Sergey
>
> On 07/11/16 18:01, J. Fiala wrote:
>> Hi Sergey,
>>
>> Thx for the analysis.
>>
>> Regarding the WadlGenerator I'd also prefer option 1 opposing to option
>> 2 (without the original idea available).
>>
>> Regarding the SourceGenerator I think it should support clean parameter
>> type references in any way. So even if we follow option 1, we would need
>> to support correctly referenced simpletypes from parameters as well as
>> the cxfrs:beanValidation extension.
>>
>> But probably it's easier to discuss this with examples together :).
>>
>> Best regards,
>> Johannes
>>
>>
>> Am 07.11.2016 um 18:13 schrieb Sergey Beryozkin:
>>> Hi Johannes
>>>
>>> I've looked through various messages and pull requests.
>>>
>>> One approach was to insert incomplete schema fragments into wadl:param
>>> with the implicit understanding it was meant to create BeanVal
>>> parameters and I felt quite uncomfortable about pursuing that
>>> particular path.
>>>
>>> The last idea we were trying to narrow upon was using a separate XML
>>> schema grammar which would be used to create Bean validation if a bean
>>> validation flag is set. This is a bit more WADL friendly but again it
>>> does not look to me like a solution which says "this is to support the
>>> bean validation" for parameters and I'm finding it difficult to see
>>> how it will work both ways.
>>>
>>> I'd to revisit these 2 proposals
>>>
>>> 1. have a CXF WADL extension, ex, cxfrs:beanValidation. This will be
>>> in wadl:param and will be optimized around supporting all whatever is
>>> needed to generate BeanVal annotations and represent any BeanVal in
>>> the Java to WADL case.
>>> This works both ways and IMHO simpler and cleaner, instead of trying
>>> to 'carry' the bean validation info via XML schema fragments, with all
>>> the limitations which seems ultimately wrong to me.
>>> cxfrs:beanValidation will be of course only recognized by a CXF
>>> wadl-to-java tool but I feel this approach will have more chances to
>>> act getting more support via other provider's tool extensions than the
>>> pseudo XML schema approach which is in fact would be equally CXF
>>> specific.
>>>
>>> 2. Do not do anything at all but have wadl:param refer to XML complex
>>> types. As I said earlier, this will require the use of
>>> ParamConverterProvider which will have a chance to validate the beans.
>>> These beans will already have BeanVal annotations in them. This also
>>> works both ways - on the WADLToJava side you'd just add these bean
>>> classes to a JAXBContext for the JAXB schema gen to add the relevant
>>> schema definitions.
>>>
>>> My preference is option 1).
>>>
>>> We can discuss the options next week too,
>>>
>>> Thanks, Sergey
>>>
>>> On 06/11/16 22:25, Sergey Beryozkin wrote:
>>>> Hi Johannes
>>>>
>>>> Can you please briefly summarize the proposed changes to WADLGen &
>>>> SourceGen ? There've been many emails and I recall I thought more work
>>>> was needed to keep both approaches in sync. Right now I see WADLGen has
>>>> some explicit BeanVal dependencies. I def remember objecting to this
>>>> particular approach.
>>>> So how this can be generalized, be WADL friendly, and work both ways ?
>>>>
>>>> Sergey
>>>> On 06/11/16 21:59, J. Fiala wrote:
>>>>> Hi Sergey,
>>>>>
>>>>> OK, I agree 100%, it would be great to have some progress with the PR
>>>>> here if you have time for it.
>>>>>
>>>>> Best regards,
>>>>> Johannes
>>>>>
>>>>>
>>>>> Am 06.11.2016 um 22:58 schrieb Sergey Beryozkin:
>>>>>> Hi Johannes
>>>>>>
>>>>>> I'd say the WADL-related updates should be limited to
>>>>>> WADLGen/SourceGen
>>>>>>
>>>>>> Cheers, Sergey
>>>>>> On 06/11/16 21:46, J. Fiala wrote:
>>>>>>> Hi Sergey,
>>>>>>>
>>>>>>> I can ask him or simply do a fork of the complete project and then
>>>>>>> cover
>>>>>>> it under the Apache license provided the author agrees with this.
>>>>>>>
>>>>>>> Do you think further BeanValidation extensions for CXF should
>>>>>>> also go
>>>>>>> there and I should subclass the WadlGenerator/SourceGenerator? Or
>>>>>>> shall
>>>>>>> we merge this at the Hackathon at ApacheCon maybe?
>>>>>>>
>>>>>>> Best regards,
>>>>>>> Johannes
>>>>>>>
>>>>>>>
>>>>>>> Am 06.11.2016 um 22:40 schrieb Sergey Beryozkin:
>>>>>>>> Hi Johannes
>>>>>>>>
>>>>>>>> Would it make sense asking the author to give you the commit
>>>>>>>> rights to
>>>>>>>> the project ?
>>>>>>>> IMHO it can't go to the CXF master though perhaps an option of
>>>>>>>> opening
>>>>>>>> a CXF sub-project is viable which will need to be discussed on
>>>>>>>> the CXF
>>>>>>>> dev list. Whether it will stay where it is now or end up as a CXF
>>>>>>>> project, you'd have to support and release it, so I'm not sure what
>>>>>>>> difference would it make if it ended up being a CXF sub-project
>>>>>>>> given
>>>>>>>> it already has a home...
>>>>>>>>
>>>>>>>> Thanks, Sergey
>>>>>>>>
>>>>>>>>
>>>>>>>> On 06/11/16 19:32, Johannes Fiala wrote:
>>>>>>>>> Hi there,
>>>>>>>>>
>>>>>>>>> The JAXB annotation plugin provided by krasa
>>>>>>>>> (https://github.com/krasa/krasa-jaxb-tools) is no longer
>>>>>>>>> supported,
>>>>>>>>> does
>>>>>>>>> it make sense to contact the author to merge this into CXF master?
>>>>>>>>>
>>>>>>>>> Maybe we could also get the BeanValidation for parameters working
>>>>>>>>> (https://github.com/apache/cxf/pull/146/files) to improve the
>>>>>>>>> overall
>>>>>>>>> BeanValidation experience.
>>>>>>>>>
>>>>>>>>> Is anybody interested in putting this on the agenda for the
>>>>>>>>> hackathon?
>>>>>>>>>
>>>>>>>>> Best regards,
>>>>>>>>> Johannes
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>
>>>>
>>>
>>>
>>
>


-- 
Sergey Beryozkin

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

Re: CXF BeanValidation annotation support

Posted by Sergey Beryozkin <sb...@gmail.com>.
Hi Johannes

Option 2 already works in the WADL to Java case. The only problem with 
it, as discussed earlier, is that WADL grammar is meant to represent the 
data representations, but SourceGenerator does not enforce it right now 
and referring from the parameters to the schema elements is still supported.

IMHO it makes sense to have a solution which works both ways first 
without doing a massive effort as we don't really have time/scope for it.

Completing Option2 support will only require adding the parameter bean 
classes to the JAXB context.
Option 1 will require a bit more work at the start but once you have 
something like
<wadl:param>
<cxfrs:beanValidation>
   <notNull/>
   <someOtherBeanValName a="b" "c"="d">
</cxfrs:beanValidation>
</wadl:param>

then it will become quite straigtforward on the WADL to Java side...

Ideally one would even allocate a namespace which would extend the core 
WADL namespace. Ex,

http://wadl.dev.java.net/extensions/bval

Might be worth investigating if it is allowed or not.

Cheers, Sergey

On 07/11/16 18:01, J. Fiala wrote:
> Hi Sergey,
>
> Thx for the analysis.
>
> Regarding the WadlGenerator I'd also prefer option 1 opposing to option
> 2 (without the original idea available).
>
> Regarding the SourceGenerator I think it should support clean parameter
> type references in any way. So even if we follow option 1, we would need
> to support correctly referenced simpletypes from parameters as well as
> the cxfrs:beanValidation extension.
>
> But probably it's easier to discuss this with examples together :).
>
> Best regards,
> Johannes
>
>
> Am 07.11.2016 um 18:13 schrieb Sergey Beryozkin:
>> Hi Johannes
>>
>> I've looked through various messages and pull requests.
>>
>> One approach was to insert incomplete schema fragments into wadl:param
>> with the implicit understanding it was meant to create BeanVal
>> parameters and I felt quite uncomfortable about pursuing that
>> particular path.
>>
>> The last idea we were trying to narrow upon was using a separate XML
>> schema grammar which would be used to create Bean validation if a bean
>> validation flag is set. This is a bit more WADL friendly but again it
>> does not look to me like a solution which says "this is to support the
>> bean validation" for parameters and I'm finding it difficult to see
>> how it will work both ways.
>>
>> I'd to revisit these 2 proposals
>>
>> 1. have a CXF WADL extension, ex, cxfrs:beanValidation. This will be
>> in wadl:param and will be optimized around supporting all whatever is
>> needed to generate BeanVal annotations and represent any BeanVal in
>> the Java to WADL case.
>> This works both ways and IMHO simpler and cleaner, instead of trying
>> to 'carry' the bean validation info via XML schema fragments, with all
>> the limitations which seems ultimately wrong to me.
>> cxfrs:beanValidation will be of course only recognized by a CXF
>> wadl-to-java tool but I feel this approach will have more chances to
>> act getting more support via other provider's tool extensions than the
>> pseudo XML schema approach which is in fact would be equally CXF
>> specific.
>>
>> 2. Do not do anything at all but have wadl:param refer to XML complex
>> types. As I said earlier, this will require the use of
>> ParamConverterProvider which will have a chance to validate the beans.
>> These beans will already have BeanVal annotations in them. This also
>> works both ways - on the WADLToJava side you'd just add these bean
>> classes to a JAXBContext for the JAXB schema gen to add the relevant
>> schema definitions.
>>
>> My preference is option 1).
>>
>> We can discuss the options next week too,
>>
>> Thanks, Sergey
>>
>> On 06/11/16 22:25, Sergey Beryozkin wrote:
>>> Hi Johannes
>>>
>>> Can you please briefly summarize the proposed changes to WADLGen &
>>> SourceGen ? There've been many emails and I recall I thought more work
>>> was needed to keep both approaches in sync. Right now I see WADLGen has
>>> some explicit BeanVal dependencies. I def remember objecting to this
>>> particular approach.
>>> So how this can be generalized, be WADL friendly, and work both ways ?
>>>
>>> Sergey
>>> On 06/11/16 21:59, J. Fiala wrote:
>>>> Hi Sergey,
>>>>
>>>> OK, I agree 100%, it would be great to have some progress with the PR
>>>> here if you have time for it.
>>>>
>>>> Best regards,
>>>> Johannes
>>>>
>>>>
>>>> Am 06.11.2016 um 22:58 schrieb Sergey Beryozkin:
>>>>> Hi Johannes
>>>>>
>>>>> I'd say the WADL-related updates should be limited to
>>>>> WADLGen/SourceGen
>>>>>
>>>>> Cheers, Sergey
>>>>> On 06/11/16 21:46, J. Fiala wrote:
>>>>>> Hi Sergey,
>>>>>>
>>>>>> I can ask him or simply do a fork of the complete project and then
>>>>>> cover
>>>>>> it under the Apache license provided the author agrees with this.
>>>>>>
>>>>>> Do you think further BeanValidation extensions for CXF should also go
>>>>>> there and I should subclass the WadlGenerator/SourceGenerator? Or
>>>>>> shall
>>>>>> we merge this at the Hackathon at ApacheCon maybe?
>>>>>>
>>>>>> Best regards,
>>>>>> Johannes
>>>>>>
>>>>>>
>>>>>> Am 06.11.2016 um 22:40 schrieb Sergey Beryozkin:
>>>>>>> Hi Johannes
>>>>>>>
>>>>>>> Would it make sense asking the author to give you the commit
>>>>>>> rights to
>>>>>>> the project ?
>>>>>>> IMHO it can't go to the CXF master though perhaps an option of
>>>>>>> opening
>>>>>>> a CXF sub-project is viable which will need to be discussed on
>>>>>>> the CXF
>>>>>>> dev list. Whether it will stay where it is now or end up as a CXF
>>>>>>> project, you'd have to support and release it, so I'm not sure what
>>>>>>> difference would it make if it ended up being a CXF sub-project
>>>>>>> given
>>>>>>> it already has a home...
>>>>>>>
>>>>>>> Thanks, Sergey
>>>>>>>
>>>>>>>
>>>>>>> On 06/11/16 19:32, Johannes Fiala wrote:
>>>>>>>> Hi there,
>>>>>>>>
>>>>>>>> The JAXB annotation plugin provided by krasa
>>>>>>>> (https://github.com/krasa/krasa-jaxb-tools) is no longer supported,
>>>>>>>> does
>>>>>>>> it make sense to contact the author to merge this into CXF master?
>>>>>>>>
>>>>>>>> Maybe we could also get the BeanValidation for parameters working
>>>>>>>> (https://github.com/apache/cxf/pull/146/files) to improve the
>>>>>>>> overall
>>>>>>>> BeanValidation experience.
>>>>>>>>
>>>>>>>> Is anybody interested in putting this on the agenda for the
>>>>>>>> hackathon?
>>>>>>>>
>>>>>>>> Best regards,
>>>>>>>> Johannes
>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>
>>>
>>>
>>
>>
>


Re: CXF BeanValidation annotation support

Posted by "J. Fiala" <mo...@fwd.at>.
Hi Sergey,

Thx for the analysis.

Regarding the WadlGenerator I'd also prefer option 1 opposing to option 
2 (without the original idea available).

Regarding the SourceGenerator I think it should support clean parameter 
type references in any way. So even if we follow option 1, we would need 
to support correctly referenced simpletypes from parameters as well as 
the cxfrs:beanValidation extension.

But probably it's easier to discuss this with examples together :).

Best regards,
Johannes


Am 07.11.2016 um 18:13 schrieb Sergey Beryozkin:
> Hi Johannes
>
> I've looked through various messages and pull requests.
>
> One approach was to insert incomplete schema fragments into wadl:param 
> with the implicit understanding it was meant to create BeanVal 
> parameters and I felt quite uncomfortable about pursuing that 
> particular path.
>
> The last idea we were trying to narrow upon was using a separate XML 
> schema grammar which would be used to create Bean validation if a bean 
> validation flag is set. This is a bit more WADL friendly but again it 
> does not look to me like a solution which says "this is to support the 
> bean validation" for parameters and I'm finding it difficult to see 
> how it will work both ways.
>
> I'd to revisit these 2 proposals
>
> 1. have a CXF WADL extension, ex, cxfrs:beanValidation. This will be 
> in wadl:param and will be optimized around supporting all whatever is 
> needed to generate BeanVal annotations and represent any BeanVal in 
> the Java to WADL case.
> This works both ways and IMHO simpler and cleaner, instead of trying 
> to 'carry' the bean validation info via XML schema fragments, with all 
> the limitations which seems ultimately wrong to me.
> cxfrs:beanValidation will be of course only recognized by a CXF 
> wadl-to-java tool but I feel this approach will have more chances to 
> act getting more support via other provider's tool extensions than the 
> pseudo XML schema approach which is in fact would be equally CXF 
> specific.
>
> 2. Do not do anything at all but have wadl:param refer to XML complex 
> types. As I said earlier, this will require the use of 
> ParamConverterProvider which will have a chance to validate the beans.
> These beans will already have BeanVal annotations in them. This also 
> works both ways - on the WADLToJava side you'd just add these bean 
> classes to a JAXBContext for the JAXB schema gen to add the relevant 
> schema definitions.
>
> My preference is option 1).
>
> We can discuss the options next week too,
>
> Thanks, Sergey
>
> On 06/11/16 22:25, Sergey Beryozkin wrote:
>> Hi Johannes
>>
>> Can you please briefly summarize the proposed changes to WADLGen &
>> SourceGen ? There've been many emails and I recall I thought more work
>> was needed to keep both approaches in sync. Right now I see WADLGen has
>> some explicit BeanVal dependencies. I def remember objecting to this
>> particular approach.
>> So how this can be generalized, be WADL friendly, and work both ways ?
>>
>> Sergey
>> On 06/11/16 21:59, J. Fiala wrote:
>>> Hi Sergey,
>>>
>>> OK, I agree 100%, it would be great to have some progress with the PR
>>> here if you have time for it.
>>>
>>> Best regards,
>>> Johannes
>>>
>>>
>>> Am 06.11.2016 um 22:58 schrieb Sergey Beryozkin:
>>>> Hi Johannes
>>>>
>>>> I'd say the WADL-related updates should be limited to 
>>>> WADLGen/SourceGen
>>>>
>>>> Cheers, Sergey
>>>> On 06/11/16 21:46, J. Fiala wrote:
>>>>> Hi Sergey,
>>>>>
>>>>> I can ask him or simply do a fork of the complete project and then
>>>>> cover
>>>>> it under the Apache license provided the author agrees with this.
>>>>>
>>>>> Do you think further BeanValidation extensions for CXF should also go
>>>>> there and I should subclass the WadlGenerator/SourceGenerator? Or 
>>>>> shall
>>>>> we merge this at the Hackathon at ApacheCon maybe?
>>>>>
>>>>> Best regards,
>>>>> Johannes
>>>>>
>>>>>
>>>>> Am 06.11.2016 um 22:40 schrieb Sergey Beryozkin:
>>>>>> Hi Johannes
>>>>>>
>>>>>> Would it make sense asking the author to give you the commit 
>>>>>> rights to
>>>>>> the project ?
>>>>>> IMHO it can't go to the CXF master though perhaps an option of 
>>>>>> opening
>>>>>> a CXF sub-project is viable which will need to be discussed on 
>>>>>> the CXF
>>>>>> dev list. Whether it will stay where it is now or end up as a CXF
>>>>>> project, you'd have to support and release it, so I'm not sure what
>>>>>> difference would it make if it ended up being a CXF sub-project 
>>>>>> given
>>>>>> it already has a home...
>>>>>>
>>>>>> Thanks, Sergey
>>>>>>
>>>>>>
>>>>>> On 06/11/16 19:32, Johannes Fiala wrote:
>>>>>>> Hi there,
>>>>>>>
>>>>>>> The JAXB annotation plugin provided by krasa
>>>>>>> (https://github.com/krasa/krasa-jaxb-tools) is no longer supported,
>>>>>>> does
>>>>>>> it make sense to contact the author to merge this into CXF master?
>>>>>>>
>>>>>>> Maybe we could also get the BeanValidation for parameters working
>>>>>>> (https://github.com/apache/cxf/pull/146/files) to improve the 
>>>>>>> overall
>>>>>>> BeanValidation experience.
>>>>>>>
>>>>>>> Is anybody interested in putting this on the agenda for the
>>>>>>> hackathon?
>>>>>>>
>>>>>>> Best regards,
>>>>>>> Johannes
>>>>>>
>>>>>>
>>>>>
>>>>
>>>>
>>>
>>
>>
>
>


Re: CXF BeanValidation annotation support

Posted by Sergey Beryozkin <sb...@gmail.com>.
Hi Johannes

I've looked through various messages and pull requests.

One approach was to insert incomplete schema fragments into wadl:param 
with the implicit understanding it was meant to create BeanVal 
parameters and I felt quite uncomfortable about pursuing that particular 
path.

The last idea we were trying to narrow upon was using a separate XML 
schema grammar which would be used to create Bean validation if a bean 
validation flag is set. This is a bit more WADL friendly but again it 
does not look to me like a solution which says "this is to support the 
bean validation" for parameters and I'm finding it difficult to see how 
it will work both ways.

I'd to revisit these 2 proposals

1. have a CXF WADL extension, ex, cxfrs:beanValidation. This will be in 
wadl:param and will be optimized around supporting all whatever is 
needed to generate BeanVal annotations and represent any BeanVal in the 
Java to WADL case.
This works both ways and IMHO simpler and cleaner, instead of trying to 
'carry' the bean validation info via XML schema fragments, with all the 
limitations which seems ultimately wrong to me.
cxfrs:beanValidation will be of course only recognized by a CXF 
wadl-to-java tool but I feel this approach will have more chances to act 
getting more support via other provider's tool extensions than the 
pseudo XML schema approach which is in fact would be equally CXF specific.

2. Do not do anything at all but have wadl:param refer to XML complex 
types. As I said earlier, this will require the use of 
ParamConverterProvider which will have a chance to validate the beans.
These beans will already have BeanVal annotations in them. This also 
works both ways - on the WADLToJava side you'd just add these bean 
classes to a JAXBContext for the JAXB schema gen to add the relevant 
schema definitions.

My preference is option 1).

We can discuss the options next week too,

Thanks, Sergey

On 06/11/16 22:25, Sergey Beryozkin wrote:
> Hi Johannes
>
> Can you please briefly summarize the proposed changes to WADLGen &
> SourceGen ? There've been many emails and I recall I thought more work
> was needed to keep both approaches in sync. Right now I see WADLGen has
> some explicit BeanVal dependencies. I def remember objecting to this
> particular approach.
> So how this can be generalized, be WADL friendly, and work both ways ?
>
> Sergey
> On 06/11/16 21:59, J. Fiala wrote:
>> Hi Sergey,
>>
>> OK, I agree 100%, it would be great to have some progress with the PR
>> here if you have time for it.
>>
>> Best regards,
>> Johannes
>>
>>
>> Am 06.11.2016 um 22:58 schrieb Sergey Beryozkin:
>>> Hi Johannes
>>>
>>> I'd say the WADL-related updates should be limited to WADLGen/SourceGen
>>>
>>> Cheers, Sergey
>>> On 06/11/16 21:46, J. Fiala wrote:
>>>> Hi Sergey,
>>>>
>>>> I can ask him or simply do a fork of the complete project and then
>>>> cover
>>>> it under the Apache license provided the author agrees with this.
>>>>
>>>> Do you think further BeanValidation extensions for CXF should also go
>>>> there and I should subclass the WadlGenerator/SourceGenerator? Or shall
>>>> we merge this at the Hackathon at ApacheCon maybe?
>>>>
>>>> Best regards,
>>>> Johannes
>>>>
>>>>
>>>> Am 06.11.2016 um 22:40 schrieb Sergey Beryozkin:
>>>>> Hi Johannes
>>>>>
>>>>> Would it make sense asking the author to give you the commit rights to
>>>>> the project ?
>>>>> IMHO it can't go to the CXF master though perhaps an option of opening
>>>>> a CXF sub-project is viable which will need to be discussed on the CXF
>>>>> dev list. Whether it will stay where it is now or end up as a CXF
>>>>> project, you'd have to support and release it, so I'm not sure what
>>>>> difference would it make if it ended up being a CXF sub-project given
>>>>> it already has a home...
>>>>>
>>>>> Thanks, Sergey
>>>>>
>>>>>
>>>>> On 06/11/16 19:32, Johannes Fiala wrote:
>>>>>> Hi there,
>>>>>>
>>>>>> The JAXB annotation plugin provided by krasa
>>>>>> (https://github.com/krasa/krasa-jaxb-tools) is no longer supported,
>>>>>> does
>>>>>> it make sense to contact the author to merge this into CXF master?
>>>>>>
>>>>>> Maybe we could also get the BeanValidation for parameters working
>>>>>> (https://github.com/apache/cxf/pull/146/files) to improve the overall
>>>>>> BeanValidation experience.
>>>>>>
>>>>>> Is anybody interested in putting this on the agenda for the
>>>>>> hackathon?
>>>>>>
>>>>>> Best regards,
>>>>>> Johannes
>>>>>
>>>>>
>>>>
>>>
>>>
>>
>
>


-- 
Sergey Beryozkin

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

Re: CXF BeanValidation annotation support

Posted by Sergey Beryozkin <sb...@gmail.com>.
Hi Johannes

Can you please briefly summarize the proposed changes to WADLGen & 
SourceGen ? There've been many emails and I recall I thought more work 
was needed to keep both approaches in sync. Right now I see WADLGen has 
some explicit BeanVal dependencies. I def remember objecting to this 
particular approach.
So how this can be generalized, be WADL friendly, and work both ways ?

Sergey
On 06/11/16 21:59, J. Fiala wrote:
> Hi Sergey,
>
> OK, I agree 100%, it would be great to have some progress with the PR
> here if you have time for it.
>
> Best regards,
> Johannes
>
>
> Am 06.11.2016 um 22:58 schrieb Sergey Beryozkin:
>> Hi Johannes
>>
>> I'd say the WADL-related updates should be limited to WADLGen/SourceGen
>>
>> Cheers, Sergey
>> On 06/11/16 21:46, J. Fiala wrote:
>>> Hi Sergey,
>>>
>>> I can ask him or simply do a fork of the complete project and then cover
>>> it under the Apache license provided the author agrees with this.
>>>
>>> Do you think further BeanValidation extensions for CXF should also go
>>> there and I should subclass the WadlGenerator/SourceGenerator? Or shall
>>> we merge this at the Hackathon at ApacheCon maybe?
>>>
>>> Best regards,
>>> Johannes
>>>
>>>
>>> Am 06.11.2016 um 22:40 schrieb Sergey Beryozkin:
>>>> Hi Johannes
>>>>
>>>> Would it make sense asking the author to give you the commit rights to
>>>> the project ?
>>>> IMHO it can't go to the CXF master though perhaps an option of opening
>>>> a CXF sub-project is viable which will need to be discussed on the CXF
>>>> dev list. Whether it will stay where it is now or end up as a CXF
>>>> project, you'd have to support and release it, so I'm not sure what
>>>> difference would it make if it ended up being a CXF sub-project given
>>>> it already has a home...
>>>>
>>>> Thanks, Sergey
>>>>
>>>>
>>>> On 06/11/16 19:32, Johannes Fiala wrote:
>>>>> Hi there,
>>>>>
>>>>> The JAXB annotation plugin provided by krasa
>>>>> (https://github.com/krasa/krasa-jaxb-tools) is no longer supported,
>>>>> does
>>>>> it make sense to contact the author to merge this into CXF master?
>>>>>
>>>>> Maybe we could also get the BeanValidation for parameters working
>>>>> (https://github.com/apache/cxf/pull/146/files) to improve the overall
>>>>> BeanValidation experience.
>>>>>
>>>>> Is anybody interested in putting this on the agenda for the hackathon?
>>>>>
>>>>> Best regards,
>>>>> Johannes
>>>>
>>>>
>>>
>>
>>
>


-- 
Sergey Beryozkin

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

Re: CXF BeanValidation annotation support

Posted by "J. Fiala" <mo...@fwd.at>.
Hi Sergey,

OK, I agree 100%, it would be great to have some progress with the PR 
here if you have time for it.

Best regards,
Johannes


Am 06.11.2016 um 22:58 schrieb Sergey Beryozkin:
> Hi Johannes
>
> I'd say the WADL-related updates should be limited to WADLGen/SourceGen
>
> Cheers, Sergey
> On 06/11/16 21:46, J. Fiala wrote:
>> Hi Sergey,
>>
>> I can ask him or simply do a fork of the complete project and then cover
>> it under the Apache license provided the author agrees with this.
>>
>> Do you think further BeanValidation extensions for CXF should also go
>> there and I should subclass the WadlGenerator/SourceGenerator? Or shall
>> we merge this at the Hackathon at ApacheCon maybe?
>>
>> Best regards,
>> Johannes
>>
>>
>> Am 06.11.2016 um 22:40 schrieb Sergey Beryozkin:
>>> Hi Johannes
>>>
>>> Would it make sense asking the author to give you the commit rights to
>>> the project ?
>>> IMHO it can't go to the CXF master though perhaps an option of opening
>>> a CXF sub-project is viable which will need to be discussed on the CXF
>>> dev list. Whether it will stay where it is now or end up as a CXF
>>> project, you'd have to support and release it, so I'm not sure what
>>> difference would it make if it ended up being a CXF sub-project given
>>> it already has a home...
>>>
>>> Thanks, Sergey
>>>
>>>
>>> On 06/11/16 19:32, Johannes Fiala wrote:
>>>> Hi there,
>>>>
>>>> The JAXB annotation plugin provided by krasa
>>>> (https://github.com/krasa/krasa-jaxb-tools) is no longer supported, 
>>>> does
>>>> it make sense to contact the author to merge this into CXF master?
>>>>
>>>> Maybe we could also get the BeanValidation for parameters working
>>>> (https://github.com/apache/cxf/pull/146/files) to improve the overall
>>>> BeanValidation experience.
>>>>
>>>> Is anybody interested in putting this on the agenda for the hackathon?
>>>>
>>>> Best regards,
>>>> Johannes
>>>
>>>
>>
>
>


Re: CXF BeanValidation annotation support

Posted by Sergey Beryozkin <sb...@gmail.com>.
Hi Johannes

I'd say the WADL-related updates should be limited to WADLGen/SourceGen

Cheers, Sergey
On 06/11/16 21:46, J. Fiala wrote:
> Hi Sergey,
>
> I can ask him or simply do a fork of the complete project and then cover
> it under the Apache license provided the author agrees with this.
>
> Do you think further BeanValidation extensions for CXF should also go
> there and I should subclass the WadlGenerator/SourceGenerator? Or shall
> we merge this at the Hackathon at ApacheCon maybe?
>
> Best regards,
> Johannes
>
>
> Am 06.11.2016 um 22:40 schrieb Sergey Beryozkin:
>> Hi Johannes
>>
>> Would it make sense asking the author to give you the commit rights to
>> the project ?
>> IMHO it can't go to the CXF master though perhaps an option of opening
>> a CXF sub-project is viable which will need to be discussed on the CXF
>> dev list. Whether it will stay where it is now or end up as a CXF
>> project, you'd have to support and release it, so I'm not sure what
>> difference would it make if it ended up being a CXF sub-project given
>> it already has a home...
>>
>> Thanks, Sergey
>>
>>
>> On 06/11/16 19:32, Johannes Fiala wrote:
>>> Hi there,
>>>
>>> The JAXB annotation plugin provided by krasa
>>> (https://github.com/krasa/krasa-jaxb-tools) is no longer supported, does
>>> it make sense to contact the author to merge this into CXF master?
>>>
>>> Maybe we could also get the BeanValidation for parameters working
>>> (https://github.com/apache/cxf/pull/146/files) to improve the overall
>>> BeanValidation experience.
>>>
>>> Is anybody interested in putting this on the agenda for the hackathon?
>>>
>>> Best regards,
>>> Johannes
>>
>>
>


-- 
Sergey Beryozkin

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

Re: CXF BeanValidation annotation support

Posted by "J. Fiala" <mo...@fwd.at>.
Hi Sergey,

Asked him: https://github.com/krasa/krasa-jaxb-tools/issues/57

Best regards,

Johannes


Am 06.11.2016 um 22:46 schrieb J. Fiala:
> Hi Sergey,
>
> I can ask him or simply do a fork of the complete project and then 
> cover it under the Apache license provided the author agrees with this.
>
> Do you think further BeanValidation extensions for CXF should also go 
> there and I should subclass the WadlGenerator/SourceGenerator? Or 
> shall we merge this at the Hackathon at ApacheCon maybe?
>
> Best regards,
> Johannes
>
>
> Am 06.11.2016 um 22:40 schrieb Sergey Beryozkin:
>> Hi Johannes
>>
>> Would it make sense asking the author to give you the commit rights 
>> to the project ?
>> IMHO it can't go to the CXF master though perhaps an option of 
>> opening a CXF sub-project is viable which will need to be discussed 
>> on the CXF dev list. Whether it will stay where it is now or end up 
>> as a CXF project, you'd have to support and release it, so I'm not 
>> sure what difference would it make if it ended up being a CXF 
>> sub-project given it already has a home...
>>
>> Thanks, Sergey
>>
>>
>> On 06/11/16 19:32, Johannes Fiala wrote:
>>> Hi there,
>>>
>>> The JAXB annotation plugin provided by krasa
>>> (https://github.com/krasa/krasa-jaxb-tools) is no longer supported, 
>>> does
>>> it make sense to contact the author to merge this into CXF master?
>>>
>>> Maybe we could also get the BeanValidation for parameters working
>>> (https://github.com/apache/cxf/pull/146/files) to improve the overall
>>> BeanValidation experience.
>>>
>>> Is anybody interested in putting this on the agenda for the hackathon?
>>>
>>> Best regards,
>>> Johannes
>>
>>
>
>


Re: CXF BeanValidation annotation support

Posted by "J. Fiala" <mo...@fwd.at>.
Hi Sergey,

I can ask him or simply do a fork of the complete project and then cover 
it under the Apache license provided the author agrees with this.

Do you think further BeanValidation extensions for CXF should also go 
there and I should subclass the WadlGenerator/SourceGenerator? Or shall 
we merge this at the Hackathon at ApacheCon maybe?

Best regards,
Johannes


Am 06.11.2016 um 22:40 schrieb Sergey Beryozkin:
> Hi Johannes
>
> Would it make sense asking the author to give you the commit rights to 
> the project ?
> IMHO it can't go to the CXF master though perhaps an option of opening 
> a CXF sub-project is viable which will need to be discussed on the CXF 
> dev list. Whether it will stay where it is now or end up as a CXF 
> project, you'd have to support and release it, so I'm not sure what 
> difference would it make if it ended up being a CXF sub-project given 
> it already has a home...
>
> Thanks, Sergey
>
>
> On 06/11/16 19:32, Johannes Fiala wrote:
>> Hi there,
>>
>> The JAXB annotation plugin provided by krasa
>> (https://github.com/krasa/krasa-jaxb-tools) is no longer supported, does
>> it make sense to contact the author to merge this into CXF master?
>>
>> Maybe we could also get the BeanValidation for parameters working
>> (https://github.com/apache/cxf/pull/146/files) to improve the overall
>> BeanValidation experience.
>>
>> Is anybody interested in putting this on the agenda for the hackathon?
>>
>> Best regards,
>> Johannes
>
>


Re: CXF BeanValidation annotation support

Posted by Sergey Beryozkin <sb...@gmail.com>.
Hi Johannes

Would it make sense asking the author to give you the commit rights to 
the project ?
IMHO it can't go to the CXF master though perhaps an option of opening a 
CXF sub-project is viable which will need to be discussed on the CXF dev 
list. Whether it will stay where it is now or end up as a CXF project, 
you'd have to support and release it, so I'm not sure what difference 
would it make if it ended up being a CXF sub-project given it already 
has a home...

Thanks, Sergey


On 06/11/16 19:32, Johannes Fiala wrote:
> Hi there,
>
> The JAXB annotation plugin provided by krasa
> (https://github.com/krasa/krasa-jaxb-tools) is no longer supported, does
> it make sense to contact the author to merge this into CXF master?
>
> Maybe we could also get the BeanValidation for parameters working
> (https://github.com/apache/cxf/pull/146/files) to improve the overall
> BeanValidation experience.
>
> Is anybody interested in putting this on the agenda for the hackathon?
>
> Best regards,
> Johannes