001 /** 002 * 003 * Copyright 2004 Protique Ltd 004 * 005 * Licensed under the Apache License, Version 2.0 (the "License"); 006 * you may not use this file except in compliance with the License. 007 * 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 **/ 018 package org.codehaus.activesoap.handler; 019 020 import javanet.staxutils.StAXResult; 021 import javanet.staxutils.StAXSource; 022 import org.codehaus.activesoap.Handler; 023 import org.codehaus.activesoap.MessageExchange; 024 025 import javax.xml.stream.XMLStreamReader; 026 import javax.xml.stream.XMLStreamWriter; 027 import javax.xml.transform.Transformer; 028 import javax.xml.transform.TransformerConfigurationException; 029 import javax.xml.transform.TransformerFactory; 030 031 /** 032 * Pipes the input into some kind of transformer to generate the response 033 * 034 * @version $Revision: 1.4 $ 035 */ 036 public class TransformHandler implements Handler { 037 038 private TransformerFactory transformerFactory; 039 040 public TransformHandler(TransformerFactory transformerFactory) { 041 this.transformerFactory = transformerFactory; 042 } 043 044 public void invoke(MessageExchange exchange) throws Exception { 045 XMLStreamReader in = exchange.getIn(); 046 XMLStreamWriter out = exchange.getOut(); 047 Transformer transformer = getTransformer(); 048 transformer.transform(new StAXSource(in), new StAXResult(out)); 049 } 050 051 protected Transformer getTransformer() throws TransformerConfigurationException { 052 // a transformer can only be used by one thread at once, so either 053 // cache this using ThreadLocal or just create a new one each time 054 return transformerFactory.newTransformer(); 055 } 056 }