<?xml version="1.0" encoding="UTF-8" ?>
<!--
/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *  http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
-->
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
    "https://struts.apache.org/dtds/struts-2.5.dtd">

<struts>
    <!-- Set some Struts 2 constants relevant to the OSGi Plugin.
           Note:  The constant definitions specified here (within the demo bundle) may also need to be
                  duplicated in the struts.xml configuration of the outer project that packages the demo
                  bundle JAR file within it.
    -->
    <constant name="struts.objectFactory" value="osgi" />
    <constant name="struts.objectFactory.delegate" value="struts" />
    <constant name="struts.freemarker.manager.classname" value="org.apache.struts2.osgi.BundleFreemarkerManager" />
    <constant name="struts.velocity.manager.classname" value="org.apache.struts2.osgi.VelocityBundleResourceLoader" />
    <constant name="struts.staticContentLoader" value="org.apache.struts2.osgi.loaders.StaticContentBundleResourceLoader" />

    <package name="bundle-demo" namespace="/osgi" extends="osgi-default, velocity-default" strict-method-invocation="true">

        <default-action-ref name="home" />

        <action name="hello-velocity" class="actions.osgi.HelloWorldAction">
            <result type="velocity">/content/osgi/hello.vm</result>
        </action>

        <action name="hello-freemarker" class="actions.osgi.HelloWorldAction">
            <result type="freemarker">/content/osgi/hello.ftl</result>
        </action>

        <action name="home" class="actions.osgi.HelloWorldAction">
            <result type="freemarker">/content/osgi/home.ftl</result>
        </action>

    </package>
</struts>
