View Javadoc

1   /* 
2    * Copyright (c) 2007, Fraunhofer-Gesellschaft
3    * All rights reserved.
4    * 
5    * Redistribution and use in source and binary forms, with or without
6    * modification, are permitted provided that the following conditions are
7    * met:
8    * 
9    * (1) Redistributions of source code must retain the above copyright
10   *     notice, this list of conditions and the disclaimer at the end.
11   *     Redistributions in binary form must reproduce the above copyright
12   *     notice, this list of conditions and the following disclaimer in
13   *     the documentation and/or other materials provided with the
14   *     distribution.
15   * 
16   * (2) Neither the name of Fraunhofer nor the names of its
17   *     contributors may be used to endorse or promote products derived
18   *     from this software without specific prior written permission.
19   * 
20   * DISCLAIMER
21   * 
22   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23   * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24   * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
25   * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
26   * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
27   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
28   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
29   * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
30   * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
31   * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
32   * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33   *  
34   */
35  package org.ogf.graap.wsag.wsrf.handler;
36  
37  import org.apache.muse.core.platform.axis2.AxisEnvironment;
38  import org.apache.muse.core.platform.axis2.AxisIsolationLayer;
39  import org.ogf.graap.wsag.wsrf.bootstrap.WSAG4JAxisEnvironment;
40  
41  /**
42   * MuseMessageHandler
43   * 
44   * This message handler is invoked by AXIS for each WSAG4J call. The message is then forwarded and processed
45   * by the WSRF layer. On first invocation of the handler, the
46   * {@link org.ogf.graap.wsag.wsrf.bootstrap.BootstrapEnvironment} is replaced by the real
47   * {@link AxisEnvironment}.
48   * 
49   * @author Oliver Waeldrich
50   * 
51   */
52  public class MuseMessageHandler extends AxisIsolationLayer
53  {
54  
55      private static boolean isInitialized = false;
56  
57      /**
58       * default constructor
59       */
60      public MuseMessageHandler()
61      {
62          synchronized ( MuseMessageHandler.class )
63          {
64              // The Muse resource router expects an AxisEnvironment
65              // in order to handle Axis2 requests. Since the resource
66              // router was initialized using the WSAG4J bootstrap
67              // environment, we must update the environment on the
68              // first invocation.
69              if ( !isInitialized )
70              {
71                  // After updating the router context, the resource router
72                  // and the resources that are already initialized have
73                  // different environments. This results in inconsistencies
74                  // when storing and retrieving the addressing context.
75                  // BootstrapEnvironment and WSAG4JAxisEnvironment use a
76                  // singleton to store and resolve the AddressingContext
77                  // which solves this problems.
78                  AxisEnvironment env = new WSAG4JAxisEnvironment();
79                  getRouter().setEnvironment( env );
80  
81                  isInitialized = true;
82              }
83          }
84      }
85  
86  }