PageRenderTime 34ms CodeModel.GetById 18ms app.highlight 14ms RepoModel.GetById 1ms app.codeStats 0ms

/jboss-as-7.1.1.Final/webservices/server-integration/src/main/java/org/jboss/as/webservices/metadata/AbstractMetaDataBuilderEJB.java

#
Java | 176 lines | 82 code | 26 blank | 68 comment | 18 complexity | ea23ddbc8e8b7394b6ca4d43bc18623b MD5 | raw file
Possible License(s): LGPL-2.1, Apache-2.0
  1/*
  2 * JBoss, Home of Professional Open Source.
  3 * Copyright 2011, Red Hat Middleware LLC, and individual contributors
  4 * as indicated by the @author tags. See the copyright.txt file in the
  5 * distribution for a full listing of individual contributors.
  6 *
  7 * This is free software; you can redistribute it and/or modify it
  8 * under the terms of the GNU Lesser General Public License as
  9 * published by the Free Software Foundation; either version 2.1 of
 10 * the License, or (at your option) any later version.
 11 *
 12 * This software is distributed in the hope that it will be useful,
 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 15 * Lesser General Public License for more details.
 16 *
 17 * You should have received a copy of the GNU Lesser General Public
 18 * License along with this software; if not, write to the Free
 19 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
 20 * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
 21 */
 22package org.jboss.as.webservices.metadata;
 23
 24import static org.jboss.as.webservices.WSLogger.ROOT_LOGGER;
 25
 26import java.util.List;
 27
 28import org.jboss.as.webservices.metadata.model.EJBEndpoint;
 29import org.jboss.ws.common.integration.WSHelper;
 30import org.jboss.wsf.spi.deployment.Deployment;
 31import org.jboss.wsf.spi.metadata.j2ee.EJBArchiveMetaData;
 32import org.jboss.wsf.spi.metadata.j2ee.EJBMetaData;
 33import org.jboss.wsf.spi.metadata.j2ee.EJBSecurityMetaData;
 34import org.jboss.wsf.spi.metadata.j2ee.PublishLocationAdapter;
 35import org.jboss.wsf.spi.metadata.j2ee.SLSBMetaData;
 36import org.jboss.wsf.spi.metadata.webservices.JBossPortComponentMetaData;
 37import org.jboss.wsf.spi.metadata.webservices.JBossWebserviceDescriptionMetaData;
 38import org.jboss.wsf.spi.metadata.webservices.JBossWebservicesMetaData;
 39
 40/**
 41 * @author <a href="mailto:ropalka@redhat.com">Richard Opalka</a>
 42 */
 43abstract class AbstractMetaDataBuilderEJB {
 44
 45    /**
 46     * Builds universal EJB meta data model that is AS agnostic.
 47     *
 48     * @param dep
 49     *            webservice deployment
 50     * @return universal EJB meta data model
 51     */
 52    final EJBArchiveMetaData create(final Deployment dep) {
 53        ROOT_LOGGER.creatingEjbDeployment(dep.getSimpleName());
 54        final EJBArchiveMetaData ejbArchiveMD = new EJBArchiveMetaData();
 55
 56        this.buildEnterpriseBeansMetaData(dep, ejbArchiveMD);
 57        this.buildWebservicesMetaData(dep, ejbArchiveMD);
 58
 59        return ejbArchiveMD;
 60    }
 61
 62    /**
 63     * Template method for build enterprise beans meta data.
 64     *
 65     * @param dep
 66     *            webservice deployment
 67     * @param ejbMetaData
 68     *            universal EJB meta data model
 69     */
 70    protected abstract void buildEnterpriseBeansMetaData(Deployment dep, EJBArchiveMetaData ejbMetaData);
 71
 72    /**
 73     * Builds webservices meta data. This methods sets:
 74     * <ul>
 75     *   <li>context root</li>
 76     *   <li>wsdl location resolver</li>
 77     *   <li>config name</li>
 78     *   <li>config file</li>
 79     * </ul>
 80     *
 81     * @param dep webservice deployment
 82     * @param ejbArchiveMD universal EJB meta data model
 83     */
 84    private void buildWebservicesMetaData(final Deployment dep, final EJBArchiveMetaData ejbArchiveMD)
 85    {
 86       final JBossWebservicesMetaData webservicesMD = WSHelper.getOptionalAttachment(dep, JBossWebservicesMetaData.class);
 87
 88       if (webservicesMD == null) return;
 89
 90       // set context root
 91       final String contextRoot = webservicesMD.getContextRoot();
 92       ejbArchiveMD.setWebServiceContextRoot(contextRoot);
 93       ROOT_LOGGER.settingContextRoot(contextRoot);
 94
 95       // set config name
 96       final String configName = webservicesMD.getConfigName();
 97       ejbArchiveMD.setConfigName(configName);
 98       ROOT_LOGGER.settingConfigName(configName);
 99
100       // set config file
101       final String configFile = webservicesMD.getConfigFile();
102       ejbArchiveMD.setConfigFile(configFile);
103       ROOT_LOGGER.settingConfigFile(configFile);
104
105       // set wsdl location resolver
106       final JBossWebserviceDescriptionMetaData[] wsDescriptionsMD = webservicesMD.getWebserviceDescriptions();
107       final PublishLocationAdapter resolver = new PublishLocationAdapterImpl(wsDescriptionsMD);
108       ejbArchiveMD.setPublishLocationAdapter(resolver);
109    }
110
111    protected JBossPortComponentMetaData getPortComponent(final String ejbName, final JBossWebservicesMetaData jbossWebservicesMD) {
112        if (jbossWebservicesMD == null) return null;
113
114        for (final JBossPortComponentMetaData jbossPortComponentMD : jbossWebservicesMD.getPortComponents()) {
115            if (ejbName.equals(jbossPortComponentMD.getEjbName())) return jbossPortComponentMD;
116        }
117
118        return null;
119    }
120
121    /**
122     * Builds JBoss agnostic EJB meta data.
123     *
124     * @param wsEjbsMD
125     *            jboss agnostic EJBs meta data
126     */
127    protected void buildEnterpriseBeanMetaData(final List<EJBMetaData> wsEjbsMD, final EJBEndpoint ejbEndpoint, final JBossWebservicesMetaData jbossWebservicesMD) {
128        final EJBMetaData wsEjbMD = new SLSBMetaData();
129
130        // set EJB name and class
131        wsEjbMD.setEjbName(ejbEndpoint.getName());
132        wsEjbMD.setEjbClass(ejbEndpoint.getClassName());
133
134        final JBossPortComponentMetaData portComponentMD = getPortComponent(ejbEndpoint.getName(), jbossWebservicesMD);
135        if (portComponentMD != null) {
136            // set port component meta data
137            wsEjbMD.setPortComponentName(portComponentMD.getPortComponentName());
138            wsEjbMD.setPortComponentURI(portComponentMD.getPortComponentURI());
139        }
140        // set security meta data
141        buildSecurityMetaData(wsEjbMD, ejbEndpoint, portComponentMD);
142
143        wsEjbsMD.add(wsEjbMD);
144    }
145
146    private static void buildSecurityMetaData(final EJBMetaData wsEjbMD, final EJBEndpoint ejbEndpoint, final JBossPortComponentMetaData portComponentMD) {
147        final EJBSecurityMetaData smd = new EJBSecurityMetaData();
148        // auth method
149        final String authMethod = getAuthMethod(ejbEndpoint, portComponentMD);
150        smd.setAuthMethod(authMethod);
151        // transport guarantee
152        final String transportGuarantee = getTransportGuarantee(ejbEndpoint, portComponentMD);
153        smd.setTransportGuarantee(transportGuarantee);
154        // secure wsdl access
155        final boolean secureWsdlAccess = isSecureWsdlAccess(ejbEndpoint, portComponentMD);
156        smd.setSecureWSDLAccess(secureWsdlAccess);
157        // propagate
158        wsEjbMD.setSecurityMetaData(smd);
159    }
160
161    private static String getAuthMethod(final EJBEndpoint ejbEndpoint, final JBossPortComponentMetaData portComponentMD) {
162        if (ejbEndpoint.getAuthMethod() != null) return ejbEndpoint.getAuthMethod();
163        return portComponentMD != null ? portComponentMD.getAuthMethod() : null;
164    }
165
166    private static String getTransportGuarantee(final EJBEndpoint ejbEndpoint, final JBossPortComponentMetaData portComponentMD) {
167        if (ejbEndpoint.getTransportGuarantee() != null) return ejbEndpoint.getTransportGuarantee();
168        return portComponentMD != null ? portComponentMD.getTransportGuarantee() : null;
169    }
170
171    private static boolean isSecureWsdlAccess(final EJBEndpoint ejbEndpoint, final JBossPortComponentMetaData portComponentMD) {
172        if (ejbEndpoint.isSecureWsdlAccess()) return true;
173        return (portComponentMD != null && portComponentMD.getSecureWSDLAccess() != null) ? portComponentMD.getSecureWSDLAccess() : false;
174    }
175
176}