private JAXBContext newJAXBContext(final Class<?>... pClasses) throws JAXBException { Class<?>[] classList; final Class<?> clazz = getDeclaringClass(); final XmlSeeAlso seeAlso = clazz.getAnnotation(XmlSeeAlso.class); if ((seeAlso != null) && (seeAlso.value().length > 0)) { final Class<?>[] seeAlsoClasses = seeAlso.value(); classList = new Class<?>[seeAlsoClasses.length + pClasses.length]; System.arraycopy(seeAlsoClasses, 0, classList, 0, seeAlsoClasses.length); System.arraycopy(pClasses, 0, classList, seeAlsoClasses.length, pClasses.length); } else { classList = pClasses; } return JAXBContext.newInstance(classList); }
static AnnotationDesc create(Class cls) { AnnotationDescImpl aDesc = new AnnotationDescImpl(); // XMLSeeAlso is part of JAXB 2.1.2. // The assumption is that this is a prereq for JAXWS 2.1; thus // we can safely reference this class XmlSeeAlso xmlSeeAlso = (XmlSeeAlso) getAnnotation(cls, XmlSeeAlso.class); if (xmlSeeAlso != null) { aDesc._XmlSeeAlsoClasses = xmlSeeAlso.value(); } QName qName = XMLRootElementUtil.getXmlRootElementQName(cls); if (qName != null) { aDesc._hasXmlRootElement = true; aDesc._XmlRootElementName = qName.getLocalPart(); aDesc._XmlRootElementNamespace = qName.getNamespaceURI(); } qName = XMLRootElementUtil.getXmlTypeQName(cls); if (qName != null) { aDesc._hasXmlType = true; aDesc._XmlTypeName = qName.getLocalPart(); aDesc._XmlTypeNamespace = qName.getNamespaceURI(); } return aDesc; }
/** * @param ar abstract resource * @param path resources path * @return resource * @see * org.glassfish.jersey.server.wadl.WadlGenerator#createResource(org.glassfish.jersey.server.model.Resource, * String) */ public Resource createResource(org.glassfish.jersey.server.model.Resource ar, String path) { for (Class<?> resClass : ar.getHandlerClasses()) { XmlSeeAlso seeAlso = (XmlSeeAlso) resClass.getAnnotation(XmlSeeAlso.class); if (seeAlso != null) { Collections.addAll(seeAlsoClasses, seeAlso.value()); } } return wadlGeneratorDelegate.createResource(ar, path); }
private void addClass(Class<?> cls) { if (Throwable.class.isAssignableFrom(cls)) { if (!Throwable.class.equals(cls) && !Exception.class.equals(cls)) { walkReferences(cls); } addClass(String.class); } else { cls = JAXBUtils.getValidClass(cls); if (null != cls) { if (classes.contains(cls)) { return; } if (!cls.isInterface()) { classes.add(cls); } XmlSeeAlso xsa = cls.getAnnotation(XmlSeeAlso.class); if (xsa != null) { for (Class<?> c : xsa.value()) { addClass(c); } } XmlJavaTypeAdapter xjta = cls.getAnnotation(XmlJavaTypeAdapter.class); if (xjta != null) { // has an adapter. We need to inspect the adapter and then // return as the adapter will handle the superclass // and interfaces and such Type t = getTypeFromXmlAdapter(xjta); if (t != null) { addType(t); } return; } if (cls.getSuperclass() != null) { // JAXB should do this, but it doesn't always. // in particular, older versions of jaxb don't addClass(cls.getSuperclass()); } if (!cls.isInterface()) { walkReferences(cls); } } } }
void addClass(Class<?> claz) { if (Throwable.class.isAssignableFrom(claz)) { if (!Throwable.class.equals(claz) && !Exception.class.equals(claz)) { walkReferences(claz); } addClass(String.class); } else if (claz.getName().startsWith("java.") || claz.getName().startsWith("javax.")) { return; } else { Class<?> cls = JAXBUtils.getValidClass(claz); if (cls == null && ReflectionUtil.getDeclaredConstructors(claz).length > 0 && !Modifier.isAbstract(claz.getModifiers())) { if (LOG.isLoggable(Level.INFO)) { LOG.info( "Class " + claz.getName() + " does not have a default constructor which JAXB requires."); } // there is no init(), but other constructors Object factory = createFactory(claz, ReflectionUtil.getDeclaredConstructors(claz)[0]); unmarshallerProperties.put("com.sun.xml.bind.ObjectFactory", factory); cls = claz; } if (null != cls) { if (classes.contains(cls)) { return; } if (!cls.isInterface()) { classes.add(cls); } XmlSeeAlso xsa = cls.getAnnotation(XmlSeeAlso.class); if (xsa != null) { for (Class<?> c : xsa.value()) { addClass(c); } } XmlJavaTypeAdapter xjta = cls.getAnnotation(XmlJavaTypeAdapter.class); if (xjta != null) { // has an adapter. We need to inspect the adapter and then // return as the adapter will handle the superclass // and interfaces and such Type t = Utils.getTypeFromXmlAdapter(xjta); if (t != null) { addType(t); } return; } if (cls.getSuperclass() != null) { // JAXB should do this, but it doesn't always. // in particular, older versions of jaxb don't addClass(cls.getSuperclass()); } if (!cls.isInterface()) { walkReferences(cls); } } } }