Exemplo n.º 1
0
  private void addBeanMapping(
      WSDDService service, Class<?> clazz, Collection<Class<?>> mappedClasses) {
    while (clazz != null) {
      while (clazz.isArray()) {
        clazz = clazz.getComponentType();
      }
      if (!needsMapping(clazz)) return;
      if (mappedClasses.contains(clazz)) return;
      mappedClasses.add(clazz);

      for (Method m : clazz.getDeclaredMethods()) {
        if (!m.isSynthetic()
            && m.getName().startsWith("get")
            && m.getParameterTypes().length == 0
            && (m.getModifiers() & Modifier.PUBLIC) != 0) {
          addBeanMapping(service, m.getReturnType(), mappedClasses);
        }
      }

      WSDDBeanMapping m = new WSDDBeanMapping();
      m.setLanguageSpecificType(clazz);
      Package p = clazz.getPackage();
      if (p == null) {
        // arrayちゃんと処理できてる?
        // System.out.println(clazz);
      }
      String packageName = p != null ? p.getName() : "";
      String simpleName = clazz.getSimpleName();
      boolean qnameSet = false;
      for (Pair<String, String> n : namespaceMappings) {
        if (packageName.startsWith(n.getFirst())) {
          String rest = packageName.substring(n.getFirst().length()).replace('.', '/');
          String nsPrefix = n.getSecond();
          if (rest.length() > 0) {
            rest = rest + "/";
            if (nsPrefix.endsWith("/") && rest.charAt(0) == '/') {
              rest = rest.substring(1);
            }
          }
          m.setQName(new QName(n.getSecond() + rest, simpleName));
          qnameSet = true;
          break;
        }
      }
      if (!qnameSet) {
        m.setQName(new QName("uri:" + packageName + "/", simpleName));
      }
      m.setSerializer(WSDDConstants.BEAN_SERIALIZER_FACTORY);
      m.setDeserializer(WSDDConstants.BEAN_DESERIALIZER_FACTORY);
      service.addTypeMapping(m);

      clazz = clazz.getSuperclass();
    }
  }