[ 
https://issues.apache.org/jira/browse/WW-3427?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Lukasz Lenart updated WW-3427:
------------------------------
    Description: 
If you define an alias to a property like so:

{code:java}
@Actions({
  @Action(
    value="/icc/saveScan",
    interceptorRefs=@InterceptorRef("ptiDefault"),
    results={
      @Result(name="input", location="/error.jsp"), 
      @Result(name="success", location="/success.jsp")
    },
    params={"aliases", 
      "#{\"plateId\" : \"plate\", " +
        "\"machineAbbr\" : \"machine\", "+
        "\"imageFiles\" : \"scanData\"}"
    }
    */
  )
})
{code}

and the property (say imageFiles/scanData) has a custom TypeConverter 
configured like so:

{code:java}
        @ConversionErrorFieldValidator(type = ValidatorType.FIELD, 
                key="invalid.fieldvalue.xxx",
                message = "well not found or imageFiles not in format: 
file,wellId|file,wellId|...",
                shortCircuit=true)
        @TypeConversion(rule = ConversionRule.COLLECTION, 
                converter = "com.ptilabs.icc.action.ScanData")
        public void setScanData(List<ScanData> imageFiles) {
                this.imageFiles = imageFiles;
        }
{code}{

If the {{TypeConverter}} throws a {{TypeConversionException}} the exception is 
never caught by the {{ConversionErrorInterceptor}} or 
{{ConversionErrorFieldValidator}}.

If I disable the aliasing and rename the method {{setImageFiles}} everything 
works correctly.

I'm trying to debug on my own but I can't find the class responsible for 
catching the {{TypeConversionException}} and placing it in the 
{{invocationContext.getConversionErrors()}}
                

  was:
If you define an alias to a property like so:
@Actions({
                @Action(value="/icc/saveScan",
                        interceptorRefs=@InterceptorRef("ptiDefault"),
                        results={
                                @Result(name="input", location="/error.jsp"), 
                                @Result(name="success", location="/success.jsp")
                                },
                         params={"aliases", 
                                "#{\"plateId\" : \"plate\", " +
                                        "\"machineAbbr\" : \"machine\", "+
                                        "\"imageFiles\" : \"scanData\"}"}
                 */
                        )
                })


and the property (say imageFiles/scanData) has a custom TypeConverter 
configured like so:
        @ConversionErrorFieldValidator(type = ValidatorType.FIELD, 
                key="invalid.fieldvalue.xxx",
                message = "well not found or imageFiles not in format: 
file,wellId|file,wellId|...",
                shortCircuit=true)
        @TypeConversion(rule = ConversionRule.COLLECTION, 
                converter = "com.ptilabs.icc.action.ScanData")
        public void setScanData(List<ScanData> imageFiles) {
                this.imageFiles = imageFiles;
        }

If the TypeConverter throws a TypeConversionException the exception is never 
caught by the ConversionErrorInterceptor or ConversionErrorFieldValidator.

If I disable the aliasing and rename the method setImageFiles everything works 
correctly.

I'm trying to debug on my own but I can't find the class responsible for 
catching the TypeConversionException and placing it in the 
invocationContext.getConversionErrors()
                


> If you alias a property that uses a custom TypeConverter and it throws 
> TypeConversionException the error is never caught
> ------------------------------------------------------------------------------------------------------------------------
>
>                 Key: WW-3427
>                 URL: https://issues.apache.org/jira/browse/WW-3427
>             Project: Struts 2
>          Issue Type: Bug
>          Components: Core Interceptors
>    Affects Versions: 2.1.8.1
>         Environment: Windows
>            Reporter: Sloan Seaman
>            Priority: Major
>              Labels: conversion, struts, type
>             Fix For: 6.1.0
>
>
> If you define an alias to a property like so:
> {code:java}
> @Actions({
>   @Action(
>     value="/icc/saveScan",
>     interceptorRefs=@InterceptorRef("ptiDefault"),
>     results={
>       @Result(name="input", location="/error.jsp"), 
>       @Result(name="success", location="/success.jsp")
>     },
>     params={"aliases", 
>       "#{\"plateId\" : \"plate\", " +
>         "\"machineAbbr\" : \"machine\", "+
>         "\"imageFiles\" : \"scanData\"}"
>     }
>     */
>   )
> })
> {code}
> and the property (say imageFiles/scanData) has a custom TypeConverter 
> configured like so:
> {code:java}
>       @ConversionErrorFieldValidator(type = ValidatorType.FIELD, 
>               key="invalid.fieldvalue.xxx",
>               message = "well not found or imageFiles not in format: 
> file,wellId|file,wellId|...",
>               shortCircuit=true)
>       @TypeConversion(rule = ConversionRule.COLLECTION, 
>               converter = "com.ptilabs.icc.action.ScanData")
>       public void setScanData(List<ScanData> imageFiles) {
>               this.imageFiles = imageFiles;
>       }
> {code}{
> If the {{TypeConverter}} throws a {{TypeConversionException}} the exception 
> is never caught by the {{ConversionErrorInterceptor}} or 
> {{ConversionErrorFieldValidator}}.
> If I disable the aliasing and rename the method {{setImageFiles}} everything 
> works correctly.
> I'm trying to debug on my own but I can't find the class responsible for 
> catching the {{TypeConversionException}} and placing it in the 
> {{invocationContext.getConversionErrors()}}
>               



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to