1313*/
1414package org .eclipse .daanse .xmla .server .adapter .soapmessage ;
1515
16- import jakarta .xml .soap .MessageFactory ;
17- import jakarta .xml .soap .Node ;
18- import jakarta .xml .soap .SOAPBody ;
19- import jakarta .xml .soap .SOAPElement ;
20- import jakarta .xml .soap .SOAPEnvelope ;
21- import jakarta .xml .soap .SOAPException ;
22- import jakarta .xml .soap .SOAPHeader ;
23- import jakarta .xml .soap .SOAPHeaderElement ;
24- import jakarta .xml .soap .SOAPMessage ;
25- import jakarta .xml .soap .SOAPPart ;
16+ import java .util .Arrays ;
17+ import java .util .Iterator ;
18+ import java .util .List ;
19+ import java .util .Map ;
20+ import java .util .Optional ;
21+
22+ import javax .xml .namespace .QName ;
23+
2624import org .eclipse .daanse .xmla .api .RequestMetaData ;
2725import org .eclipse .daanse .xmla .api .UserPrincipal ;
2826import org .eclipse .daanse .xmla .api .XmlaService ;
8987import org .eclipse .daanse .xmla .api .execute .clearcache .ClearCacheResponse ;
9088import org .eclipse .daanse .xmla .api .execute .statement .StatementRequest ;
9189import org .eclipse .daanse .xmla .api .execute .statement .StatementResponse ;
90+ import org .eclipse .daanse .xmla .api .xmla .BeginSession ;
9291import org .eclipse .daanse .xmla .api .xmla .Command ;
92+ import org .eclipse .daanse .xmla .api .xmla .EndSession ;
9393import org .eclipse .daanse .xmla .api .xmla .Session ;
9494import org .eclipse .daanse .xmla .model .record .UserPrincipalR ;
9595import org .eclipse .daanse .xmla .model .record .discover .PropertiesR ;
158158import org .slf4j .Logger ;
159159import org .slf4j .LoggerFactory ;
160160
161- import javax .xml .namespace .QName ;
162- import java .util .Arrays ;
163- import java .util .HashSet ;
164- import java .util .Iterator ;
165- import java .util .List ;
166- import java .util .Map ;
167- import java .util .Optional ;
168- import java .util .Set ;
161+ import jakarta .xml .soap .MessageFactory ;
162+ import jakarta .xml .soap .Node ;
163+ import jakarta .xml .soap .SOAPBody ;
164+ import jakarta .xml .soap .SOAPElement ;
165+ import jakarta .xml .soap .SOAPEnvelope ;
166+ import jakarta .xml .soap .SOAPException ;
167+ import jakarta .xml .soap .SOAPHeader ;
168+ import jakarta .xml .soap .SOAPHeaderElement ;
169+ import jakarta .xml .soap .SOAPMessage ;
170+ import jakarta .xml .soap .SOAPPart ;
169171
170172public class XmlaApiAdapter {
171173 private static final Logger LOGGER = LoggerFactory .getLogger (XmlaApiAdapter .class );
@@ -203,7 +205,7 @@ public XmlaApiAdapter(XmlaService xmlaService) {
203205 private static final String MDSCHEMA_SETS = "MDSCHEMA_SETS" ;
204206 private static final String MDSCHEMA_KPIS = "MDSCHEMA_KPIS" ;
205207 private static final String MDSCHEMA_MEASUREGROUPS = "MDSCHEMA_MEASUREGROUPS" ;
206- private Set < String > sessions = new HashSet <>( );
208+ private static final QName QN_SESSION = new QName ( "urn:schemas-microsoft-com:xml-analysis" , "Session" );
207209
208210 public SOAPMessage handleRequest (SOAPMessage messageRequest , Map <String , Object > headers ) {
209211 try {
@@ -219,18 +221,17 @@ public SOAPMessage handleRequest(SOAPMessage messageRequest, Map<String, Object>
219221 envelopeResponse .addNamespaceDeclaration (Constants .EMPTY .PREFIX , Constants .EMPTY .NS_URN );
220222 envelopeResponse .addNamespaceDeclaration (Constants .XSI .PREFIX , Constants .XSI .NS_URN );
221223
222- SOAPBody bodyResponse = envelopeResponse .getBody ();
223224 Object role = headers .get ("ROLE" );
224225 Object user = headers .get ("USER" );
225- UserPrincipal userPrincipal = new UserPrincipalR (getStringOrNull (user ), getRiles (role ));
226- Optional <Session > ses = SessionUtil . getSession (messageRequest .getSOAPHeader (), sessions );
227- if (ses .isPresent ()) {
226+ UserPrincipal userPrincipal = new UserPrincipalR (getStringOrNull (user ), getRoles (role ));
227+ Optional <Session > oSession = session (messageRequest .getSOAPHeader (),userPrincipal );
228+ if (oSession .isPresent ()) {
228229 SOAPHeader header = envelopeResponse .getHeader ();
229- QName session = new QName ("urn:schemas-microsoft-com:xml-analysis" , "Session" );
230- SOAPHeaderElement sessionElement = header .addHeaderElement (session );
231- sessionElement .addAttribute (new QName ("SessionId" ), ses .get ().sessionId ());
230+ SOAPHeaderElement sessionElement = header .addHeaderElement (QN_SESSION );
231+ sessionElement .addAttribute (new QName ("SessionId" ), oSession .get ().sessionId ());
232232 }
233- RequestMetaData metaData = RequestMetaDataUtils .getRequestMetaData (headers , ses );
233+ RequestMetaData metaData = RequestMetaDataUtils .getRequestMetaData (headers , oSession );
234+ SOAPBody bodyResponse = envelopeResponse .getBody ();
234235 handleBody (messageRequest .getSOAPBody (), bodyResponse , metaData , userPrincipal );
235236 return messageResponse ;
236237 } catch (SOAPException e ) {
@@ -239,7 +240,7 @@ public SOAPMessage handleRequest(SOAPMessage messageRequest, Map<String, Object>
239240 return null ;
240241 }
241242
242- private List <String > getRiles (Object ob ) {
243+ private List <String > getRoles (Object ob ) {
243244 if (ob != null && ob instanceof String str ) {
244245 return Arrays .asList (str .split ("," ));
245246 }
@@ -253,6 +254,31 @@ private String getStringOrNull(Object ob) {
253254 return null ;
254255 }
255256
257+ private Optional <Session > session (SOAPHeader soapRequestHeader , UserPrincipal userPrincipal ) throws SOAPException {
258+ Optional <Session > oSession = Convert .getSession (soapRequestHeader );
259+ if (oSession .isPresent ()) {
260+ boolean checked = xmlaService .session ().checkSession (oSession .get (), userPrincipal );
261+ if (checked ) {
262+ return oSession ;
263+ } else {
264+ Optional .empty ();
265+ }
266+ }
267+
268+ Optional <BeginSession > beginSession = Convert .getBeginSession (soapRequestHeader );
269+ if (beginSession .isPresent ()) {
270+ return xmlaService .session ().beginSession (beginSession .get (), userPrincipal );
271+ }
272+
273+ Optional <EndSession > oEndSession = Convert .getEndSession (soapRequestHeader );
274+ if (oEndSession .isPresent ()) {
275+ xmlaService .session ().endSession (oEndSession .get (), userPrincipal );
276+ return Optional .empty ();
277+ }
278+
279+ return Optional .empty ();
280+ }
281+
256282 private void handleBody (SOAPBody body , SOAPBody responseBody , RequestMetaData metaData , UserPrincipal userPrincipal )
257283 throws SOAPException {
258284 SOAPElement node = null ;
@@ -280,6 +306,7 @@ private void handleBody(SOAPBody body, SOAPBody responseBody, RequestMetaData me
280306
281307 }
282308
309+
283310 private void discover (SOAPElement discover , SOAPBody responseBody , RequestMetaData metaData ,
284311 UserPrincipal userPrincipal ) throws SOAPException {
285312
0 commit comments