/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}