<!--
/*
 * $Id$
 *
 * 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.
 */
-->
<body>
<p>
The new xslt view supports an extensible Java XML adapter framework that makes
it easy to customize the XML rendering of objects and to incorporate structured
XML text and arbitarary DOM fragments into the output.
</p>
<p>
The XSLTResult class now uses an extensible adapter factory for rendering the
Struts action Java object tree to an XML DOM for consumption by the
stylesheet.  Users can easily register their own adapters to produce custom XML
views of Java types or simply extend a default "String" adapter and return
plain or XML text to be incorporated into the DOM.  The new adapter mechanism
is capable of proxying existing DOM trees and incorporating them into the
results, so you can freely mix DOMs produced from other sources into your
result tree.
</p>
<p>
A default java.util.Map adapter is also now provided to render Maps to XML.
</p>
<p>
Please see the javadoc on the AdapterFactory for more details.
</p>

</body>
