View Javadoc

1   /*
2    *
3    * The Seasar Software License, Version 1.1
4    *
5    * Copyright (c) 2003-2004 The Seasar Project. All rights reserved.
6    *
7    * Redistribution and use in source and binary forms, with or
8    * without modification, are permitted provided that the following
9    * conditions are met:
10   *
11   * 1. Redistributions of source code must retain the above
12   *    copyright notice, this list of conditions and the following
13   *    disclaimer.
14   *
15   * 2. Redistributions in binary form must reproduce the above
16   *    copyright notice, this list of conditions and the following
17   *    disclaimer in the documentation and/or other materials provided
18   *    with the distribution.
19   *
20   * 3. The end-user documentation included with the redistribution,
21   *    if any, must include the following acknowledgement:
22   *    "This product includes software developed by the
23   *    Seasar Project (http://www.seasar.org/)."
24   *    Alternately, this acknowledgement may appear in the software
25   *    itself, if and wherever such third-party acknowledgements
26   *    normally appear.
27   *
28   * 4. Neither the name "The Seasar Project" nor the names of its
29   *    contributors may be used to endorse or promote products derived
30   *    from this software without specific prior written permission of
31   *    the Seasar Project.
32   *
33   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR
34   * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
35   * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
36   * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE SEASAR PROJECT
37   * OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
38   * INCIDENTAL,SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
39   * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
40   * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
41   * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
42   * WHETHER IN CONTRACT, STRICT LIABILITY,OR TORT (INCLUDING
43   * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
44   * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
45   */
46  package org.seasar.remoting.axis.deployer;
47  
48  import java.io.InputStream;
49  
50  import org.apache.axis.deployment.wsdd.WSDDDocument;
51  import org.apache.axis.utils.XMLUtils;
52  import org.seasar.framework.container.ComponentDef;
53  import org.seasar.framework.container.MetaDef;
54  import org.seasar.framework.log.Logger;
55  import org.seasar.framework.message.MessageFormatter;
56  import org.seasar.framework.util.ResourceUtil;
57  import org.seasar.remoting.axis.DeployFailedException;
58  
59  /***
60   * diconファイル中に記述されたメタ情報で指定されたWSDDファイルをAxisにデプロイします。
61   * 
62   * @author koichik
63   */
64  public class WSDDDeployer implements ItemDeployer {
65      //class fields
66      private static final Logger logger = Logger.getLogger(WSDDDeployer.class);
67  
68      //instance fields
69      protected final AxisDeployer deployer;
70  
71      /***
72       * インスタンスを構築します。
73       * 
74       * @param deployer
75       *            デプロイヤー
76       */
77      public WSDDDeployer(final AxisDeployer deployer) {
78          this.deployer = deployer;
79      }
80  
81      /***
82       * メタ情報で指定されたWSDDファイルをデプロイします。
83       * 
84       * @param componentDef
85       *            コンポーネント定義
86       * @param metaDef
87       *            メタ定義
88       */
89      public void deploy(final ComponentDef componentDef, final MetaDef metaDef) {
90          try {
91              final Object value = metaDef.getValue();
92              if (!(value instanceof String)) {
93                  throw new DeployFailedException(MessageFormatter.getSimpleMessage("EAXS0002",
94                          new Object[] { value }));
95              }
96  
97              final String wsddFileName = (String) value;
98              final InputStream is = ResourceUtil.getResourceAsStream(wsddFileName);
99              final WSDDDocument wsddDocument = new WSDDDocument(XMLUtils.newDocument(is));
100             wsddDocument.deploy(deployer.getDeployment(metaDef.getContainer()));
101 
102             if (logger.isDebugEnabled()) {
103                 logger.log("DAXS0001", new Object[] { wsddFileName });
104             }
105         }
106         catch (final Exception e) {
107             throw new DeployFailedException(e);
108         }
109     }
110 }