Uploaded image for project: 'Struts 2'
  1. Struts 2
  2. WW-4932

Conversion fails when generic type is an interface

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Closed
    • Minor
    • Resolution: Fixed
    • None
    • 6.0.0
    • Other
    • None

    Description

      Hi, I was asked to create this issue after exchanging some emails in the struts mailing list.

      I had the following problem:

      Hi,
      
      I am having problems populating an action variable Set by request using
      struts type conversion if the Set has the element type defined as an
      interface.
      I have a UserAction-conversion.properties file with the following
      configuration using the class implementation:
      
      KeyProperty_roles=id
      Element_roles=path.to.class.Roles
      CreateIfNull_roles=true
      
      And UserAction has the collection Set<RolesInterface>. Roles obviously
      implements RolesInterface.
      
      If the Set element type <RolesInterface> is deleted it works just fine.
      Am I doing something wrong or is this not possible?
      
      Thanks

      And this was the response, which fixed my problem. :

      I reproduced it and seems it's because it tries to instantiate a new
      element but the interface cannot being instantiated. Please see [1] to
      know why it tries to instantiate interface instead of class.
      
      Annotating the getRoles or setRoles method with @Element(value =
      path.to.class.Roles.class) may fix this issue. (shouldn't it be
      path.to.class.Role instead? it seems Roles is a list not element)
      
      Regards.
      
      [1]
      github.com/apache/struts/blob/05829e3faadd15cfa67eb234cd1775f2b98918cb/core/src/main/java/com/opensymphony/xwork2/conversion/impl/DefaultObjectTypeDeterminer.java#L100

      After acknowledging the issue is fixed, the fix suggestion:

      You're welcome :) glad to hear this. However, I think it's better that
      Struts honor .properties file (where element class has been defined
      strictly by user) before the generic parametrics [1]. Could you please
      register an issue at [2] with title "conversion fails when generic type
      is an interface" then paste these emails contents in it's description.
      
      Thanks for your report!
      
      [1]
      github.com/apache/struts/blob/05829e3faadd15cfa67eb234cd1775f2b98918cb/core/src/main/java/com/opensymphony/xwork2/conversion/impl/DefaultObjectTypeDeterminer.java#L100
      [2] issues.apache.org/jira/projects/WW/
      

       

      Attachments

        Issue Links

          Activity

            People

              yasserzamani Yasser Zamani
              nrad0 Nuno Oliveira
              Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: