public static <X> BasicTypeInfo<X> getInfoFor(Class<X> type) {
    if (type == null) {
      throw new NullPointerException();
    }

    @SuppressWarnings("unchecked")
    BasicTypeInfo<X> info = (BasicTypeInfo<X>) TYPES.get(type);
    return info;
  }
 @Override
 public void begin(final String name, final Attributes attrs) {
   @SuppressWarnings("unchecked")
   ArrayList<Object> types = (ArrayList<Object>) ((HashMap<?, ?>) peek()).get(name);
   String type = attrs.getValue("type");
   if ("uninitialized".equals(type)) {
     types.add(getLabel(attrs.getValue("label")));
   } else {
     Integer t = TYPES.get(type);
     if (t == null) {
       types.add(type);
     } else {
       types.add(t);
     }
   }
 }
Example #3
0
 public static List<EndpointDescription> getEndpointDescriptions(String data)
     throws XMLStreamException {
   List<EndpointDescription> endpoints = new ArrayList<EndpointDescription>();
   Map<String, Object> properties = null;
   String key = null;
   String type = null;
   String value = null;
   Object val = null;
   String txt = null;
   XMLStreamReader reader =
       XMLInputFactory.newInstance().createXMLStreamReader(new StringReader(data));
   for (; ; ) {
     int code = reader.next();
     switch (code) {
       case XMLStreamConstants.START_DOCUMENT:
         break;
       case XMLStreamConstants.START_ELEMENT:
         if (ENDPOINT_DESCRIPTION.equals(reader.getLocalName())) {
           properties = new HashMap<String, Object>();
         } else if (PROPERTY.equals(reader.getLocalName())) {
           key = reader.getAttributeValue(null, NAME);
           type = reader.getAttributeValue(null, VALUE_TYPE);
           value = reader.getAttributeValue(null, VALUE);
           val = null;
         } else if (ARRAY.equals(reader.getLocalName())) {
           val = Array.newInstance(TYPES.get(type == null ? "String" : type), 0);
         } else if (SET.equals(reader.getLocalName())) {
           val = new HashSet<Object>();
         } else if (LIST.equals(reader.getLocalName())) {
           val = new ArrayList<Object>();
         } else if (VALUE.equals(reader.getLocalName())) {
           txt = null;
         }
         break;
       case XMLStreamConstants.CHARACTERS:
         if (txt == null) {
           txt = reader.getText();
         } else {
           txt += reader.getText();
         }
         break;
       case XMLStreamConstants.END_ELEMENT:
         if (ENDPOINT_DESCRIPTION.equals(reader.getLocalName())) {
           endpoints.add(new EndpointDescription(properties));
           properties = null;
         } else if (PROPERTY.equals(reader.getLocalName())) {
           if (key == null || (val == null && value == null) || (val != null && value != null)) {
             throw new IllegalArgumentException();
           }
           if (value != null) {
             val = instantiate(type == null ? "String" : type, value);
           }
           properties.put(key, val);
         } else if (VALUE.equals(reader.getLocalName())) {
           if (val.getClass().isArray()) {
             int len = Array.getLength(val);
             Object a = Array.newInstance(TYPES.get(type == null ? "String" : type), len + 1);
             System.arraycopy(val, 0, a, 0, len);
             Array.set(a, len, instantiate(type == null ? "String" : type, txt));
             val = a;
           } else {
             ((Collection) val).add(instantiate(type == null ? "String" : type, txt));
           }
         }
         break;
       case XMLStreamConstants.END_DOCUMENT:
         return endpoints;
     }
   }
 }
 private static ParameterExtractor parameterExtractor(
     Type type, Parameter parameter, Description description) {
   if (type instanceof ParameterizedType) {
     ParameterizedType paramType = (ParameterizedType) type;
     Class<?> raw = (Class<?>) paramType.getRawType();
     Type componentType = paramType.getActualTypeArguments()[0];
     Class<?> component = null;
     if (componentType instanceof Class<?>) {
       component = (Class<?>) componentType;
     }
     if (Set.class == raw) {
       TypeCaster caster = TYPES.get(component);
       if (caster != null) {
         return new ListParameterExtractor(caster, component, parameter, description) {
           @Override
           Object convert(Object[] result) {
             return new HashSet<Object>(Arrays.asList(result));
           }
         };
       }
     } else if (List.class == raw || Collection.class == raw || Iterable.class == raw) {
       TypeCaster caster = TYPES.get(component);
       if (caster != null) {
         return new ListParameterExtractor(caster, component, parameter, description) {
           @Override
           Object convert(Object[] result) {
             return Arrays.asList(result);
           }
         };
       }
     }
   } else if (type instanceof Class<?>) {
     Class<?> raw = (Class<?>) type;
     if (raw.isArray()) {
       TypeCaster caster = TYPES.get(raw.getComponentType());
       if (caster != null) {
         return new ListParameterExtractor(
             caster, raw.getComponentType(), parameter, description) {
           @Override
           Object convert(Object[] result) {
             return result;
           }
         };
       }
     } else {
       TypeCaster caster = TYPES.get(raw);
       if (caster != null) {
         return new ParameterExtractor(caster, raw, parameter, description);
       }
     }
   } else if (type instanceof GenericArrayType) {
     GenericArrayType array = (GenericArrayType) type;
     Type component = array.getGenericComponentType();
     if (component instanceof Class<?>) {
       TypeCaster caster = TYPES.get(component);
       if (caster != null) {
         return new ListParameterExtractor(caster, (Class<?>) component, parameter, description) {
           @Override
           Object convert(Object[] result) {
             return result;
           }
         };
       }
     }
   }
   throw new IllegalStateException("Unsupported parameter type: " + type);
 }