title: How can I configure my custom result type using conventions plugin in result
body: <p>I have created custom result class to serialize json data to xml. I want to configure this result class as a result type for some specific actions via conventions plug ins. 
  But it is giving errors at the time of starting container. My code and error is given below.</p>
  
  <p>My custom Result class:</p>
  
  <pre><code>package actions;
  
  import example.*;
  import java.io.PrintWriter;
  
  import org.apache.struts2.ServletActionContext;
  
  import com.opensymphony.xwork2.ActionInvocation;
  import com.opensymphony.xwork2.Result;
  import com.opensymphony.xwork2.util.ValueStack;
  import com.thoughtworks.xstream.XStream;
  import com.thoughtworks.xstream.io.json.JsonHierarchicalStreamDriver;
  
  
  public class JSONResult implements Result {
  
  public static final String DEFAULT_PARAM = "classAlias";
  String classAlias;
  
  public String getClassAlias() {
      return classAlias;
  }
  
  public void setClassAlias(String classAlias) {
      this.classAlias = classAlias;
  }
  
  public void execute(ActionInvocation invocation) throws Exception {
      System.out.println("executing JSONResult execute()");
      ServletActionContext.getResponse().setContentType("text/plain");
      PrintWriter responseStream = ServletActionContext.getResponse().getWriter();
      /* Retrieve Objects to Serialize to JSON from ValueStack */
      ValueStack valueStack = invocation.getStack();
      Object jsonModel = valueStack.findValue("jsonModel");
  
      XStream xstream = new XStream(new JsonHierarchicalStreamDriver());
  
     /*
       * If there's no parameter passed in, just write the objects under a
       * default name.
       */
      if (classAlias == null) {
          classAlias = "object";
      }
      xstream.registerConverter(new XStreamHashConverter());
      xstream.alias(classAlias, jsonModel.getClass());
  
      /* Write to the response stream */
      System.out.println("xstream.toXML(jsonModel) == "+xstream.toXML(jsonModel));
      responseStream.println(xstream.toXML(jsonModel));
  }
  }
  </code></pre>
  
  <p>my Actions class with annotations follows:</p>
  
  <pre><code>package actions;
  
  import com.opensymphony.xwork2.ActionSupport;
  import java.util.HashMap;
  import java.util.Map;
  import org.apache.struts2.convention.annotation.Action;
  import org.apache.struts2.convention.annotation.Result;
  import org.apache.struts2.convention.annotation.Namespace;
  import org.apache.struts2.convention.annotation.ParentPackage;
  import org.apache.struts2.interceptor.ParameterAware;
  
  
  @ParentPackage("actions")
  @Namespace("/actions")
  public class ZipDataSupplier extends ActionSupport implements ParameterAware
  {
   private Map parameters;
   private Object jsonModel;
  
   public Map getParameters()
   {
      return this.parameters;
   }
   public void setParameters(Map parameters)
   {
     this.parameters=parameters;
   }
  public Object getJsonModel()
  {
     return this.jsonModel;
  }
  public void setJsonModel(Object jsonModel)
  {
     this.jsonModel = jsonModel;
  }
  
  @Action(value="/getZipData",results={@Result(name="success",location="ajaxCall", **type="actions.JSONResult")**})
  public String getZipData()
  {
     System.out.println("inside getZipData ... ...");
     Map map =  getParameters();
     System.out.println("parameter map = "+map);
     String htmlIds = ((String[])map.get("htmlIds"))[0];
     System.out.println("htmlIds = "+htmlIds);
     String jsonIds = ((String[])map.get("jsonIds"))[0];
     System.out.println("jsonIds = "+jsonIds);
     ZipData zipData = new ZipData();
     zipData.getCity().put("Dulles", "Dulles");
     zipData.getCity().put("New York", "New York");
     setJsonModel(zipData);
     return SUCCESS;
   }
  }
  
  class ZipData
  {
  private String zipCode = "20101";
  private String stateCode = "VA";
  private String stateName = "Virginia";
  
  private HashMap&lt;String,String&gt; city=new HashMap&lt;String, String&gt;();
  
  //private JSONObject city = null;//JSONArray.fromObject( getCityMap());
  
  /**
   * @return the zipCode
   */
  public String getZipCode() {
      return zipCode;
  }
  
  /**
   * @param zipCode the zipCode to set
   */
  public void setZipCode(String zipCode) {
      this.zipCode = zipCode;
  }
  
  /**
   * @return the stateCode
   */
  public String getStateCode() {
      return stateCode;
  }
  
  /**
   * @param stateCode the stateCode to set
   */
  public void setStateCode(String stateCode) {
      this.stateCode = stateCode;
  }
  
  /**
   * @return the stateName
   */
  public String getStateName() {
      return stateName;
  }
  
  /**
   * @param stateName the stateName to set
   */
  public void setStateName(String stateName) {
      this.stateName = stateName;
  }
  
  /**
   * @return the city
   /
  public JSONObject getCity() {
      this.city = JSONObject.fromObject( getCityMap());
      return this.city;
  }
  
  /**
   * @param city the city to set
   /
  public void setCity(JSONObject city) {
      this.city = city;
  }
  
  /**
   * @return the cityMap
   */
  public HashMap&lt;String, String&gt; getCity() {
      //city.put("Dulles", "Dulles");
      //city.put("ABC", "ABC");
      return city;
  }
  
  /**
   * @param city the city to set
   */
  public void setCity(HashMap&lt;String, String&gt; city) {
      this.city = city;
  }
  
  
  
  /**
   * @return the city
   /
  public String getCity() {
      return city;
  }
  
  /**
   * @param city the city to set
   /
  public void setCity(String city) {
      this.city = city;
  }
  
  /**
   * @return the city
   /
  public Map&lt;String, String&gt; getCity() {
      return city;
  }
  
  /**
   * @param city the city to set
   /
  public void setCity(Map&lt;String, String&gt; city) {
      this.city = city;
  }
   * */
  }
  </code></pre>
  
  <p>Struts.XML file follows:</p>
  
  <pre><code>&lt;?xml version="1.0" encoding="UTF-8" ?&gt;
  &lt;!DOCTYPE struts PUBLIC
      "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
      "http://struts.apache.org/dtds/struts-2.0.dtd"&gt;
  
  &lt;struts&gt;
      &lt;constant name="struts.enable.DynamicMethodInvocation" value="false" /&gt;
      &lt;constant name="struts.devMode" value="true"/&gt;
      &lt;constant name="struts.configuration.xml.reload" value="true"/&gt;
  &lt;/struts&gt;
  </code></pre>