You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by gk...@apache.org on 2007/05/05 15:02:51 UTC

svn commit: r535518 - in /cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-components/src/main: java/org/apache/cocoon/servletservice/postable/components/ resources/META-INF/cocoon/spring/

Author: gkossakowski
Date: Sat May  5 06:02:50 2007
New Revision: 535518

URL: http://svn.apache.org/viewvc?view=rev&rev=535518
Log:
COCOON-2050: Implementation of ServletServiceTransformer.

Added:
    cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-components/src/main/java/org/apache/cocoon/servletservice/postable/components/ServletServiceTransformer.java   (with props)
    cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-components/src/main/resources/META-INF/cocoon/spring/cocoon-servlet-service-transformer.xml   (with props)

Added: cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-components/src/main/java/org/apache/cocoon/servletservice/postable/components/ServletServiceTransformer.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-components/src/main/java/org/apache/cocoon/servletservice/postable/components/ServletServiceTransformer.java?view=auto&rev=535518
==============================================================================
--- cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-components/src/main/java/org/apache/cocoon/servletservice/postable/components/ServletServiceTransformer.java (added)
+++ cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-components/src/main/java/org/apache/cocoon/servletservice/postable/components/ServletServiceTransformer.java Sat May  5 06:02:50 2007
@@ -0,0 +1,98 @@
+/*
+ * 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.
+ */
+package org.apache.cocoon.servletservice.postable.components;
+
+import java.io.IOException;
+import java.io.StringReader;
+
+import org.apache.avalon.framework.parameters.ParameterException;
+import org.apache.cocoon.ProcessingException;
+import org.apache.cocoon.components.source.util.SourceUtil;
+import org.apache.cocoon.core.xml.SAXParser;
+import org.apache.cocoon.servletservice.postable.PostableSource;
+import org.apache.cocoon.sitemap.DisposableSitemapComponent;
+import org.apache.cocoon.transformation.AbstractSAXTransformer;
+import org.apache.cocoon.util.avalon.CLLoggerWrapper;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.excalibur.source.SourceException;
+import org.xml.sax.SAXException;
+
+public class ServletServiceTransformer extends AbstractSAXTransformer implements DisposableSitemapComponent {
+	private Log logger = LogFactory.getLog(getClass());
+	
+	private SAXParser saxParser;
+	
+	private PostableSource servletSource;
+	
+    public void init() {
+        this.enableLogging(new CLLoggerWrapper(this.logger));
+    }
+	
+	public void setupTransforming() throws IOException, ProcessingException, SAXException {
+		super.setupTransforming();
+		
+		String service;
+		try {
+			service = parameters.getParameter("service");
+		} catch (ParameterException e) {
+			throw new ProcessingException(e);
+		}
+		
+        try {
+        	servletSource = (PostableSource)resolver.resolveURI(service);
+        } catch (ClassCastException e) {
+        	throw new ProcessingException("Resolved '" + service + "' to source that is not postable. Use servlet: protocol for service calls.");            
+        } catch (SourceException se) {
+            throw SourceUtil.handle("Error during resolving of '" + service + "'.", se);
+        }
+        
+        if (logger.isDebugEnabled()) {
+        	logger.debug("Source " + service + " resolved to " + servletSource.getURI());
+        }
+		
+		startSerializedXMLRecording(null);
+	}
+	
+	public void endDocument() throws SAXException {
+		super.endDocument();
+		try {
+			String xml = endSerializedXMLRecording();
+			IOUtils.copy(new StringReader(xml), servletSource.getOutputStream());
+			SourceUtil.parse(saxParser, servletSource, contentHandler);
+		}
+		catch (Exception e) {
+			throw new SAXException("Exception occured while calling servlet service", e);
+		}
+	}
+	
+	public void dispose() {
+		if (servletSource != null)
+			resolver.release(servletSource);
+		super.dispose();
+	}
+
+	public SAXParser getSaxParser() {
+		return saxParser;
+	}
+
+	public void setSaxParser(SAXParser saxParser) {
+		this.saxParser = saxParser;
+	}
+
+}

Propchange: cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-components/src/main/java/org/apache/cocoon/servletservice/postable/components/ServletServiceTransformer.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-components/src/main/resources/META-INF/cocoon/spring/cocoon-servlet-service-transformer.xml
URL: http://svn.apache.org/viewvc/cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-components/src/main/resources/META-INF/cocoon/spring/cocoon-servlet-service-transformer.xml?view=auto&rev=535518
==============================================================================
--- cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-components/src/main/resources/META-INF/cocoon/spring/cocoon-servlet-service-transformer.xml (added)
+++ cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-components/src/main/resources/META-INF/cocoon/spring/cocoon-servlet-service-transformer.xml Sat May  5 06:02:50 2007
@@ -0,0 +1,27 @@
+<?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.
+-->
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
+
+  <bean name="org.apache.cocoon.transformation.Transformer/servletService"
+      class="org.apache.cocoon.servletservice.postable.components.ServletServiceTransformer" init-method="init" scope="prototype">
+    <property name="saxParser" ref="org.apache.cocoon.core.xml.SAXParser"/>
+  </bean>
+
+</beans>

Propchange: cocoon/trunk/core/cocoon-servlet-service/cocoon-servlet-service-components/src/main/resources/META-INF/cocoon/spring/cocoon-servlet-service-transformer.xml
------------------------------------------------------------------------------
    svn:eol-style = native