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(); } }