You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@cxf.apache.org by "Dieter Freismuth (JIRA)" <ji...@apache.org> on 2010/03/08 15:50:27 UTC

[jira] Created: (CXF-2698) REST type conversion to Byte, Integer, ... (non primitives) not working

REST type conversion to Byte, Integer, ... (non primitives) not working
-----------------------------------------------------------------------

                 Key: CXF-2698
                 URL: https://issues.apache.org/jira/browse/CXF-2698
             Project: CXF
          Issue Type: Bug
          Components: JAX-WS Runtime
    Affects Versions: 2.2.5
         Environment: using JAXD Databinding, JAX-WS with REST 
            Reporter: Dieter Freismuth


methods like 
public String sayHi(@WebParam(name="number") Byte number)
taking java.lang.Number can not be called via REST HTTP GET methods since there is not type conversion from String to Byte.
This works using primitive types like byte!

The root cause can be found at the end of URIMappingInterceptor.getParameters(...) method:
           
if (type != null && type.isPrimitive() && queries.get(key) != null) {
  param = PrimitiveUtils.read(queries.get(key), type);
} else {
  param = queries.get(key);
}

either PrimitiveUtils.read(..) should also work for Integer, Byte,.. types or there should be an extra method like:
         public Object readNullableTypes(String value, Class type) {
            Object ret = value;
            if (Integer.class == type) {
                ret = Integer.valueOf(value);
            }
            if (Byte.class == type) {
                ret = Byte.valueOf(value);
            }
            if (Short.class == type) {
                ret = Short.valueOf(value);
            }
            if (Long.class == type) {
                ret = Long.valueOf(value);
            }
            if (Float.class == type) {
                ret = Float.valueOf(value);
            }
            if (Double.class == type) {
                ret = Double.valueOf(value);
            }
            if (Boolean.class == type) {
                ret = Boolean.valueOf(value);
            }
            if (Character.class == type) {
                ret = value.charAt(0);
            }
            return ret;
        }


-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Assigned: (CXF-2698) REST type conversion to Byte, Integer, ... (non primitives) not working

Posted by "Daniel Kulp (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/CXF-2698?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Daniel Kulp reassigned CXF-2698:
--------------------------------

    Assignee: Daniel Kulp

> REST type conversion to Byte, Integer, ... (non primitives) not working
> -----------------------------------------------------------------------
>
>                 Key: CXF-2698
>                 URL: https://issues.apache.org/jira/browse/CXF-2698
>             Project: CXF
>          Issue Type: Bug
>          Components: JAX-WS Runtime
>    Affects Versions: 2.2.5
>         Environment: using JAXD Databinding, JAX-WS with REST 
>            Reporter: Dieter Freismuth
>            Assignee: Daniel Kulp
>   Original Estimate: 1h
>  Remaining Estimate: 1h
>
> methods like 
> public String sayHi(@WebParam(name="number") Byte number)
> taking java.lang.Number can not be called via REST HTTP GET methods since there is not type conversion from String to Byte.
> This works using primitive types like byte!
> The root cause can be found at the end of URIMappingInterceptor.getParameters(...) method:
>            
> if (type != null && type.isPrimitive() && queries.get(key) != null) {
>   param = PrimitiveUtils.read(queries.get(key), type);
> } else {
>   param = queries.get(key);
> }
> either PrimitiveUtils.read(..) should also work for Integer, Byte,.. types or there should be an extra method like:
>          public Object readNullableTypes(String value, Class type) {
>             Object ret = value;
>             if (Integer.class == type) {
>                 ret = Integer.valueOf(value);
>             }
>             if (Byte.class == type) {
>                 ret = Byte.valueOf(value);
>             }
>             if (Short.class == type) {
>                 ret = Short.valueOf(value);
>             }
>             if (Long.class == type) {
>                 ret = Long.valueOf(value);
>             }
>             if (Float.class == type) {
>                 ret = Float.valueOf(value);
>             }
>             if (Double.class == type) {
>                 ret = Double.valueOf(value);
>             }
>             if (Boolean.class == type) {
>                 ret = Boolean.valueOf(value);
>             }
>             if (Character.class == type) {
>                 ret = value.charAt(0);
>             }
>             return ret;
>         }

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Resolved: (CXF-2698) REST type conversion to Byte, Integer, ... (non primitives) not working

Posted by "Daniel Kulp (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/CXF-2698?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Daniel Kulp resolved CXF-2698.
------------------------------

       Resolution: Fixed
    Fix Version/s: 2.2.7

> REST type conversion to Byte, Integer, ... (non primitives) not working
> -----------------------------------------------------------------------
>
>                 Key: CXF-2698
>                 URL: https://issues.apache.org/jira/browse/CXF-2698
>             Project: CXF
>          Issue Type: Bug
>          Components: JAX-WS Runtime
>    Affects Versions: 2.2.5
>         Environment: using JAXD Databinding, JAX-WS with REST 
>            Reporter: Dieter Freismuth
>            Assignee: Daniel Kulp
>             Fix For: 2.2.7
>
>   Original Estimate: 1h
>  Remaining Estimate: 1h
>
> methods like 
> public String sayHi(@WebParam(name="number") Byte number)
> taking java.lang.Number can not be called via REST HTTP GET methods since there is not type conversion from String to Byte.
> This works using primitive types like byte!
> The root cause can be found at the end of URIMappingInterceptor.getParameters(...) method:
>            
> if (type != null && type.isPrimitive() && queries.get(key) != null) {
>   param = PrimitiveUtils.read(queries.get(key), type);
> } else {
>   param = queries.get(key);
> }
> either PrimitiveUtils.read(..) should also work for Integer, Byte,.. types or there should be an extra method like:
>          public Object readNullableTypes(String value, Class type) {
>             Object ret = value;
>             if (Integer.class == type) {
>                 ret = Integer.valueOf(value);
>             }
>             if (Byte.class == type) {
>                 ret = Byte.valueOf(value);
>             }
>             if (Short.class == type) {
>                 ret = Short.valueOf(value);
>             }
>             if (Long.class == type) {
>                 ret = Long.valueOf(value);
>             }
>             if (Float.class == type) {
>                 ret = Float.valueOf(value);
>             }
>             if (Double.class == type) {
>                 ret = Double.valueOf(value);
>             }
>             if (Boolean.class == type) {
>                 ret = Boolean.valueOf(value);
>             }
>             if (Character.class == type) {
>                 ret = value.charAt(0);
>             }
>             return ret;
>         }

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.