001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: */
017: package org.apache.pluto.descriptors.services.castor;
018:
019: import org.apache.pluto.descriptors.services.Constants;
020: import org.apache.pluto.descriptors.services.WebAppDescriptorService;
021: import org.apache.pluto.descriptors.servlet.WebAppDD;
022: import org.exolab.castor.mapping.Mapping;
023: import org.exolab.castor.mapping.MappingException;
024: import org.exolab.castor.xml.Marshaller;
025:
026: import java.io.IOException;
027: import java.io.InputStream;
028: import java.io.OutputStream;
029: import java.net.URL;
030:
031: /**
032: * Abstract Implementation of the Web Application Deployment
033: * Descriptor service. Provides default implementation of
034: * the service; requiring only that subclasses provide the
035: * input streams to/from the actual descriptor.
036: *
037: * @version $Id: WebAppDescriptorServiceImpl.java 156743 2005-03-10 05:50:30Z ddewolf $
038: * @since Mar 5, 2005
039: */
040: public class WebAppDescriptorServiceImpl extends
041: AbstractCastorDescriptorService implements
042: WebAppDescriptorService {
043:
044: public static final String WEB_XML_MAPPING = "castor-web-xml-mapping.xml";
045:
046: /**
047: * Read the Web Application Deployment Descriptor.
048: *
049: * @return WebAppDD instance representing the descriptor.
050: * @throws IOException
051: */
052: public WebAppDD read(InputStream in) throws IOException {
053: WebAppDD webApp = (WebAppDD) readInternal(in);
054: return webApp;
055: }
056:
057: /**
058: * Write the deployment descriptor.
059: * @param webApp
060: * @throws IOException
061: */
062: public void write(WebAppDD webApp, OutputStream out)
063: throws IOException {
064: writeInternal(webApp, out);
065: }
066:
067: /**
068: * Retrieve the Web Application Deployment
069: * descriptor's public Id.
070: * @return
071: */
072: protected String getPublicId() {
073: return Constants.WEB_XML_PUBLIC_ID;
074: }
075:
076: /**
077: * Retrieve the Web Application Deployment
078: * descriptor's DTD uri.
079: * @return
080: */
081: protected String getDTDUri() {
082: return Constants.WEB_XML_DTD;
083: }
084:
085: /**
086: * Read and Retrieve the Web Application's Castor Mapping
087: * resource.
088: *
089: * @return
090: * @throws IOException
091: * @throws MappingException
092: */
093: protected Mapping getCastorMapping() throws IOException,
094: MappingException {
095: URL url = getClass().getResource(WEB_XML_MAPPING);
096: if (url == null)
097: throw new NullPointerException(
098: "Configuration Error. Resource: "
099: + WEB_XML_MAPPING + " not found.");
100: Mapping mapping = new Mapping();
101: mapping.loadMapping(url);
102: return mapping;
103: }
104:
105: protected void setCastorMarshallerOptions(Marshaller marshaller,
106: Object beingMarshalled) {
107: String servletVersion = ((WebAppDD) beingMarshalled)
108: .getServletVersion();
109: if ("2.3".equals(servletVersion)) {
110: marshaller.setDoctype(getPublicId(), getDTDUri());
111: }
112: }
113:
114: }
|