miércoles, 24 de mayo de 2017

JAX-WS returning map


Hace muchos años que había abandonado el blog, recordando viejos tiempos quise retomarlo y les traigo el siguiente ejemplo:

Hace unos días me solicitaron realizar un Core de servicios web en SOAP y REST, quise mandar la misma salida en ambos solo que uno como objeto JSON y otro como XML en el SOAP, en el JSON envío un Map y quise hacer lo mismo en el SOAP sin embargo el WAX-WS no permite retornar este tipo de objetos. Para ello realice una Clase Wrapper que dentro tuviera un objeto de tipo Map, y con ello se resolvió dicho tema.


Les dejo por aquí el ejemplo:


Clase Wrapper

import java.io.Serializable;
import java.util.Map;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;

@XmlAccessorType(XmlAccessType.FIELD)
public class MapWrapper implements Serializable{
    private static final long serialVersionUID = 1L;
   
    private Map<String, Object> map;
   
    public MapWrapper() {}

    public MapWrapper(Map<String, Object> map) {
        this.map = map;
    }
   
    public Map<String, Object> getMap() {
        return map;
    }
   
    public void setMap(Map<String, Object> map) {
        this.map = map;
    }

    @Override
    public String toString() {
        StringBuilder builder = new StringBuilder();
        builder.append("MapWrapper [map=");
        builder.append(map);
        builder.append("]");
        return builder.toString();
    }
       
   
}





 Método del WebService

    @WebMethod(operationName = "consultaCt")
    public MapWrapper consultaCt() {
        Map<String, Object> map = new HashMap<String,Object>();
        map.put("estatus", 1);
        map.put("msg", "Respuesta correcta");
        map.put("cts", ctBO.selectAll());
        MapWrapper mapWrapper = new MapWrapper(map);
        return mapWrapper;
    }