Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * JBoss, Home of Professional Open Source.
   * Copyright 2011, Red Hat Middleware LLC, and individual contributors
   * as indicated by the @author tags. See the copyright.txt file in the
   * distribution for a full listing of individual contributors.
   *
   * This is free software; you can redistribute it and/or modify it
   * under the terms of the GNU Lesser General Public License as
   * published by the Free Software Foundation; either version 2.1 of
  * the License, or (at your option) any later version.
  *
  * This software is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  * Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public
  * License along with this software; if not, write to the Free
  * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
  * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
  */
 package org.jboss.as.webservices.deployers;
 
 import static org.jboss.as.ee.component.Attachments.EE_MODULE_DESCRIPTION;
 import static org.jboss.as.webservices.util.ASHelper.getJaxwsDeployment;
 import static org.jboss.as.webservices.util.ASHelper.getRequiredAttachment;
 import static org.jboss.as.webservices.util.DotNames.DECLARE_ROLES_ANNOTATION;
 import static org.jboss.as.webservices.util.DotNames.PERMIT_ALL_ANNOTATION;
 import static org.jboss.as.webservices.util.DotNames.ROLES_ALLOWED_ANNOTATION;
 import static org.jboss.as.webservices.util.DotNames.WEB_CONTEXT_ANNOTATION;
 
 import java.util.List;
 import java.util.Set;
 
 
 import  org.jboss.metadata.ejb.spec.EjbJarMetaData;
 import  org.jboss.metadata.javaee.spec.SecurityRoleMetaData;
 import  org.jboss.metadata.javaee.spec.SecurityRolesMetaData;

Author(s):
Richard Opalka
Jim Ma
 
 public final class WSIntegrationProcessorJAXWS_EJB implements DeploymentUnitProcessor {
 
     @Override
     public void deploy(final DeploymentPhaseContext phaseContextthrows DeploymentUnitProcessingException {
         final DeploymentUnit unit = phaseContext.getDeploymentUnit();
         processAnnotation(unitWebService.class);
         processAnnotation(unitWebServiceProvider.class);
     }
 
     @Override
     public void undeploy(final DeploymentUnit context) {
         // does nothing
     }
     @SuppressWarnings("rawtypes")
     private static void processAnnotation(final DeploymentUnit unit,  final Class annotationType) {
 
         final EEModuleDescription moduleDescription = getRequiredAttachment(unit);
         final JAXWSDeployment jaxwsDeployment = getJaxwsDeployment(unit);
         for (EEModuleClassDescription description : moduleDescription.getClassDescriptions()) {
             @SuppressWarnings("unchecked")
             ClassAnnotationInformation classAnnotationInfo = description.getAnnotationInformation(annotationType);
             if (classAnnotationInfo != null && !classAnnotationInfo.getClassLevelAnnotations().isEmpty()) {
                 Object obj = classAnnotationInfo.getClassLevelAnnotations().get(0);
                 AnnotationTarget target = null;
                 if (obj instanceof WebServiceAnnotationInfo) {
                     target = ((WebServiceAnnotationInfo)obj).getTarget();
                 } else if (obj instanceof WebServiceProviderAnnotationInfo) {
                     target = ((WebServiceProviderAnnotationInfo)obj).getTarget();
                 } else {
                     return;
                 }
                 final ClassInfo webServiceClassInfo = (ClassInfotarget;
                final String webServiceClassName = webServiceClassInfo.name().toString();
                final List<ComponentDescriptioncomponentDescriptions = moduleDescription.getComponentsByClassName(webServiceClassName);
                final List<SessionBeanComponentDescriptionsessionBeans = getSessionBeans(componentDescriptions);
                final Set<StringsecurityRoles = getDeclaredSecurityRoles(unitwebServiceClassInfo); // TODO: assembly processed for each endpoint!
                final WebContextAnnotationWrapper webCtx = getWebContextWrapper(webServiceClassInfo);
                final String authMethod = webCtx.getAuthMethod();
                final boolean isSecureWsdlAccess = webCtx.isSecureWsdlAccess();
                final String transportGuarantee = webCtx.getTransportGuarantee();
                final String realmName = webCtx.getRealmName();
                for (final SessionBeanComponentDescription sessionBean : sessionBeans) {
                    if (sessionBean.isStateless() || sessionBean.isSingleton()) {
                        final EJBViewDescription ejbViewDescription = sessionBean.addWebserviceEndpointView();
                        final ServiceName ejbViewName = ejbViewDescription.getServiceName();
                        jaxwsDeployment.addEndpoint(new EJBEndpoint(sessionBeanejbViewNamesecurityRolesauthMethodrealmNameisSecureWsdlAccesstransportGuarantee));
                    }
                }
            }
        }
    }
    private static WebContextAnnotationWrapper getWebContextWrapper(final ClassInfo webServiceClassInfo) {
        if (!webServiceClassInfo.annotations().containsKey()) return new WebContextAnnotationWrapper(null);
        final AnnotationInstance webContextAnnotation = webServiceClassInfo.annotations().get().get(0);
        return new WebContextAnnotationWrapper(webContextAnnotation);
    }
    private static List<SessionBeanComponentDescriptiongetSessionBeans(final List<ComponentDescriptioncomponentDescriptions) {
        final List<SessionBeanComponentDescriptionsessionBeans = new LinkedList<SessionBeanComponentDescription>();
        for (final ComponentDescription componentDescription : componentDescriptions) {
            if (componentDescription instanceof SessionBeanComponentDescription) {
                sessionBeans.add((SessionBeanComponentDescriptioncomponentDescription);
            }
        }
        return sessionBeans;
    }
    private static Set<StringgetDeclaredSecurityRoles(final DeploymentUnit unitfinal ClassInfo webServiceClassInfo) {
        final Set<StringsecurityRoles = new HashSet<String>();
        // process assembly-descriptor DD section
        final EjbJarMetaData ejbJarMD = unit.getAttachment(.);
        if (ejbJarMD != null && ejbJarMD.getAssemblyDescriptor() != null) {
            final List<SecurityRoleMetaData> securityRoleMetaDatas = ejbJarMD.getAssemblyDescriptor().getAny(SecurityRoleMetaData.class);
            if (securityRoleMetaDatas != null) {
                for (final SecurityRoleMetaData securityRoleMetaData : securityRoleMetaDatas) {
                    securityRoles.add(securityRoleMetaData.getRoleName());
                }
            }
            final SecurityRolesMetaData securityRolesMD = ejbJarMD.getAssemblyDescriptor().getSecurityRoles();
            if (securityRolesMD != null && securityRolesMD.size() > 0) {
                for (final SecurityRoleMetaData securityRoleMD : securityRolesMD) {
                    securityRoles.add(securityRoleMD.getRoleName());
                }
            }
        }
        // process @RolesAllowed annotation
        if (webServiceClassInfo.annotations().containsKey()) {
            final List<AnnotationInstanceallowedRoles = webServiceClassInfo.annotations().get();
            for (final AnnotationInstance allowedRole : allowedRoles) {
                if (allowedRole.target().equals(webServiceClassInfo)) {
                   for (final String roleName : allowedRole.value().asStringArray()) {
                      securityRoles.add(roleName);
                   }
                }
            }
        }
        // process @DeclareRoles annotation
        if (webServiceClassInfo.annotations().containsKey()) {
            final List<AnnotationInstancedeclareRoles = webServiceClassInfo.annotations().get();
            for (final AnnotationInstance declareRole : declareRoles) {
                if (declareRole.target().equals(webServiceClassInfo)) {
                   for (final String roleName : declareRole.value().asStringArray()) {
                      securityRoles.add(roleName);
                   }
                }
            }
        }
        // process @PermitAll annotation
        if (webServiceClassInfo.annotations().containsKey()) {
            for (AnnotationInstance permitAll : webServiceClassInfo.annotations().get()) {
                if (permitAll.target().equals(webServiceClassInfo)) {
                    securityRoles.add("*");
                    break;
                }
            }
        }
        //if there is no class level security annotation, it will delegate to ejb's security check
        if (securityRoles.isEmpty()) {
            securityRoles.add("*");
        }
        return Collections.unmodifiableSet(securityRoles);
    }
    private static final class WebContextAnnotationWrapper {
        private final String authMethod;
        private final String transportGuarantee;
        private final boolean secureWsdlAccess;
        private final String realmName;
        WebContextAnnotationWrapper(final AnnotationInstance annotation) {
             = stringValueOrNull(annotation"authMethod");
             = stringValueOrNull(annotation"transportGuarantee");
             = stringValueOrNull(annotation"realmName");
             = booleanValue(annotation"secureWSDLAccess");
        }
        String getAuthMethod() {
            return ;
        }
        String getTransportGuarantee() {
            return ;
        }
        boolean isSecureWsdlAccess() {
            return ;
        }
        String getRealmName() {
            return ;
        }
        private String stringValueOrNull(final AnnotationInstance annotationfinal String attribute) {
            if (annotation == nullreturn null;
            final AnnotationValue value = annotation.value(attribute);
            return value != null ? value.asString() : null;
        }
        private boolean booleanValue(final AnnotationInstance annotationfinal String attribute) {
            if (annotation == nullreturn false;
            final AnnotationValue value = annotation.value(attribute);
            return value != null ? value.asBoolean() : false;
        }
    }
New to GrepCode? Check out our FAQ X