Hi With the latest source from trunk. I get this build error when doing a full build mvn clean install -Dtest=false
[ERROR] Failed to execute goal org.apache.felix:maven-bundle-plugin:2.3.4:bundle (default-bundle) on project camel-fop: Internal error in maven-bundle-plugin: Illegal repetition near index 0 [ERROR] ${camel\.osgi\.export\.pkg} [ERROR] ^ [ERROR] -> [Help 1] Do others get this problem as well? On Tue, Mar 6, 2012 at 2:10 AM, <bibr...@apache.org> wrote: > Author: bibryam > Date: Tue Mar 6 01:10:05 2012 > New Revision: 1297313 > > URL: http://svn.apache.org/viewvc?rev=1297313&view=rev > Log: > CAMEL-3551: Added new camel-fop component. > > Added: > camel/trunk/components/camel-fop/ > camel/trunk/components/camel-fop/pom.xml > camel/trunk/components/camel-fop/src/ > camel/trunk/components/camel-fop/src/main/ > camel/trunk/components/camel-fop/src/main/java/ > camel/trunk/components/camel-fop/src/main/java/org/ > camel/trunk/components/camel-fop/src/main/java/org/apache/ > camel/trunk/components/camel-fop/src/main/java/org/apache/camel/ > camel/trunk/components/camel-fop/src/main/java/org/apache/camel/component/ > > camel/trunk/components/camel-fop/src/main/java/org/apache/camel/component/fop/ > > camel/trunk/components/camel-fop/src/main/java/org/apache/camel/component/fop/FopComponent.java > > camel/trunk/components/camel-fop/src/main/java/org/apache/camel/component/fop/FopConstants.java > > camel/trunk/components/camel-fop/src/main/java/org/apache/camel/component/fop/FopEndpoint.java > > camel/trunk/components/camel-fop/src/main/java/org/apache/camel/component/fop/FopProducer.java > camel/trunk/components/camel-fop/src/main/resources/ > camel/trunk/components/camel-fop/src/main/resources/META-INF/ > camel/trunk/components/camel-fop/src/main/resources/META-INF/services/ > camel/trunk/components/camel-fop/src/main/resources/META-INF/services/org/ > > camel/trunk/components/camel-fop/src/main/resources/META-INF/services/org/apache/ > > camel/trunk/components/camel-fop/src/main/resources/META-INF/services/org/apache/camel/ > > camel/trunk/components/camel-fop/src/main/resources/META-INF/services/org/apache/camel/component/ > > camel/trunk/components/camel-fop/src/main/resources/META-INF/services/org/apache/camel/component/fop > camel/trunk/components/camel-fop/src/test/ > camel/trunk/components/camel-fop/src/test/data/ > camel/trunk/components/camel-fop/src/test/data/conf/ > camel/trunk/components/camel-fop/src/test/data/conf/testcfg.xml > camel/trunk/components/camel-fop/src/test/data/xml/ > camel/trunk/components/camel-fop/src/test/data/xml/data.xml > camel/trunk/components/camel-fop/src/test/java/ > camel/trunk/components/camel-fop/src/test/java/org/ > camel/trunk/components/camel-fop/src/test/java/org/apache/ > camel/trunk/components/camel-fop/src/test/java/org/apache/camel/ > camel/trunk/components/camel-fop/src/test/java/org/apache/camel/component/ > > camel/trunk/components/camel-fop/src/test/java/org/apache/camel/component/fop/ > > camel/trunk/components/camel-fop/src/test/java/org/apache/camel/component/fop/FopComponentTest.java > > camel/trunk/components/camel-fop/src/test/java/org/apache/camel/component/fop/FopEndpointTest.java > > camel/trunk/components/camel-fop/src/test/java/org/apache/camel/component/fop/FopHelper.java > camel/trunk/components/camel-fop/src/test/resources/ > camel/trunk/components/camel-fop/src/test/resources/xslt/ > camel/trunk/components/camel-fop/src/test/resources/xslt/template.xsl > Modified: > camel/trunk/apache-camel/src/main/descriptors/common-bin.xml > camel/trunk/components/pom.xml > camel/trunk/parent/pom.xml > camel/trunk/platforms/karaf/features/pom.xml > camel/trunk/platforms/karaf/features/src/main/resources/bundles.properties > camel/trunk/platforms/karaf/features/src/main/resources/features.xml > > Modified: camel/trunk/apache-camel/src/main/descriptors/common-bin.xml > URL: > http://svn.apache.org/viewvc/camel/trunk/apache-camel/src/main/descriptors/common-bin.xml?rev=1297313&r1=1297312&r2=1297313&view=diff > ============================================================================== > --- camel/trunk/apache-camel/src/main/descriptors/common-bin.xml (original) > +++ camel/trunk/apache-camel/src/main/descriptors/common-bin.xml Tue Mar 6 > 01:10:05 2012 > @@ -62,6 +62,7 @@ > <include>org.apache.camel:camel-eventadmin</include> > <include>org.apache.camel:camel-exec</include> > <include>org.apache.camel:camel-flatpack</include> > + <include>org.apache.camel:camel-fop</include> > <include>org.apache.camel:camel-freemarker</include> > <include>org.apache.camel:camel-ftp</include> > <include>org.apache.camel:camel-gae</include> > > Added: camel/trunk/components/camel-fop/pom.xml > URL: > http://svn.apache.org/viewvc/camel/trunk/components/camel-fop/pom.xml?rev=1297313&view=auto > ============================================================================== > --- camel/trunk/components/camel-fop/pom.xml (added) > +++ camel/trunk/components/camel-fop/pom.xml Tue Mar 6 01:10:05 2012 > @@ -0,0 +1,75 @@ > +<?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. > +--> > +<project xmlns="http://maven.apache.org/POM/4.0.0" > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 > http://maven.apache.org/maven-v4_0_0.xsd"> > + > + <modelVersion>4.0.0</modelVersion> > + > + <parent> > + <groupId>org.apache.camel</groupId> > + <artifactId>camel-parent</artifactId> > + <version>2.10-SNAPSHOT</version> > + <relativePath>../../parent</relativePath> > + </parent> > + > + <artifactId>camel-fop</artifactId> > + <packaging>bundle</packaging> > + <name>Camel :: FOP</name> > + <description>Camel FOP support</description> > + > + <dependencies> > + <dependency> > + <groupId>org.apache.camel</groupId> > + <artifactId>camel-core</artifactId> > + </dependency> > + <dependency> > + <groupId>org.apache.xmlgraphics</groupId> > + <artifactId>fop</artifactId> > + <version>${fop-version}</version> > + </dependency> > + > + <!-- for testing --> > + <dependency> > + <groupId>org.apache.camel</groupId> > + <artifactId>camel-test</artifactId> > + <scope>test</scope> > + </dependency> > + <dependency> > + <groupId>org.apache.pdfbox</groupId> > + <artifactId>pdfbox</artifactId> > + <version>1.6.0</version> > + <scope>test</scope> > + </dependency> > + > + <!-- logging --> > + <dependency> > + <groupId>org.slf4j</groupId> > + <artifactId>slf4j-api</artifactId> > + </dependency> > + <dependency> > + <groupId>org.slf4j</groupId> > + <artifactId>slf4j-log4j12</artifactId> > + <scope>test</scope> > + </dependency> > + <dependency> > + <groupId>log4j</groupId> > + <artifactId>log4j</artifactId> > + <scope>test</scope> > + </dependency> > + </dependencies> > +</project> > > Added: > camel/trunk/components/camel-fop/src/main/java/org/apache/camel/component/fop/FopComponent.java > URL: > http://svn.apache.org/viewvc/camel/trunk/components/camel-fop/src/main/java/org/apache/camel/component/fop/FopComponent.java?rev=1297313&view=auto > ============================================================================== > --- > camel/trunk/components/camel-fop/src/main/java/org/apache/camel/component/fop/FopComponent.java > (added) > +++ > camel/trunk/components/camel-fop/src/main/java/org/apache/camel/component/fop/FopComponent.java > Tue Mar 6 01:10:05 2012 > @@ -0,0 +1,35 @@ > +/** > + * 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.camel.component.fop; > + > +import java.util.Map; > + > +import org.apache.camel.Endpoint; > +import org.apache.camel.impl.DefaultComponent; > + > +/** > + * Represents the component that manages {@link FopEndpoint}. > + */ > +public class FopComponent extends DefaultComponent { > + > + protected Endpoint createEndpoint(String uri, String remaining, > Map<String, Object> parameters) > + throws Exception { > + FopEndpoint endpoint = new FopEndpoint(uri, this, remaining); > + setProperties(endpoint, parameters); > + return endpoint; > + } > +} > > Added: > camel/trunk/components/camel-fop/src/main/java/org/apache/camel/component/fop/FopConstants.java > URL: > http://svn.apache.org/viewvc/camel/trunk/components/camel-fop/src/main/java/org/apache/camel/component/fop/FopConstants.java?rev=1297313&view=auto > ============================================================================== > --- > camel/trunk/components/camel-fop/src/main/java/org/apache/camel/component/fop/FopConstants.java > (added) > +++ > camel/trunk/components/camel-fop/src/main/java/org/apache/camel/component/fop/FopConstants.java > Tue Mar 6 01:10:05 2012 > @@ -0,0 +1,23 @@ > +/** > + * 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.camel.component.fop; > + > +public interface FopConstants { > + String CAMEL_FOP_RENDER = "CamelFop.Render."; > + String CAMEL_FOP_ENCRYPT = "CamelFop.Encrypt."; > + String CAMEL_FOP_OUTPUT_FORMAT = "CamelFop.Output.Format"; > +} > > Added: > camel/trunk/components/camel-fop/src/main/java/org/apache/camel/component/fop/FopEndpoint.java > URL: > http://svn.apache.org/viewvc/camel/trunk/components/camel-fop/src/main/java/org/apache/camel/component/fop/FopEndpoint.java?rev=1297313&view=auto > ============================================================================== > --- > camel/trunk/components/camel-fop/src/main/java/org/apache/camel/component/fop/FopEndpoint.java > (added) > +++ > camel/trunk/components/camel-fop/src/main/java/org/apache/camel/component/fop/FopEndpoint.java > Tue Mar 6 01:10:05 2012 > @@ -0,0 +1,86 @@ > +/** > + * 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.camel.component.fop; > + > +import java.io.IOException; > + > +import org.xml.sax.SAXException; > + > +import org.apache.avalon.framework.configuration.Configuration; > +import org.apache.avalon.framework.configuration.ConfigurationException; > +import org.apache.avalon.framework.configuration.DefaultConfigurationBuilder; > +import org.apache.camel.Consumer; > +import org.apache.camel.Processor; > +import org.apache.camel.Producer; > +import org.apache.camel.impl.DefaultEndpoint; > +import org.apache.fop.apps.FOPException; > +import org.apache.fop.apps.FopFactory; > + > +/** > + * Represents a Fop endpoint. > + */ > +public class FopEndpoint extends DefaultEndpoint { > + private String userConfigURL; > + private FopFactory fopFactory; > + private String remaining; > + > + public FopEndpoint(String uri, FopComponent component, String remaining) > { > + super(uri, component); > + this.remaining = remaining; > + this.fopFactory = FopFactory.newInstance(); > + } > + > + public Producer createProducer() throws Exception { > + return new FopProducer(this, fopFactory, remaining); > + } > + > + public Consumer createConsumer(Processor processor) throws Exception { > + throw new UnsupportedOperationException("Consumer not supported for > FOP endpoint"); > + } > + > + public boolean isSingleton() { > + return true; > + } > + > + FopFactory getFopFactory() { > + return fopFactory; > + } > + > + public void setUserConfigURL(String userConfigURL) { > + this.userConfigURL = userConfigURL; > + updateConfigurations(); > + } > + > + private void updateConfigurations() { > + DefaultConfigurationBuilder cfgBuilder = new > DefaultConfigurationBuilder(); > + Configuration cfg; > + try { > + cfg = cfgBuilder.buildFromFile(this.userConfigURL); > + } catch (SAXException e) { > + throw new RuntimeException(e); > + } catch (IOException e) { > + throw new RuntimeException(e); > + } catch (ConfigurationException e) { > + throw new RuntimeException(e); > + } > + try { > + fopFactory.setUserConfig(cfg); > + } catch (FOPException e) { > + throw new RuntimeException(e); > + } > + } > +} > > Added: > camel/trunk/components/camel-fop/src/main/java/org/apache/camel/component/fop/FopProducer.java > URL: > http://svn.apache.org/viewvc/camel/trunk/components/camel-fop/src/main/java/org/apache/camel/component/fop/FopProducer.java?rev=1297313&view=auto > ============================================================================== > --- > camel/trunk/components/camel-fop/src/main/java/org/apache/camel/component/fop/FopProducer.java > (added) > +++ > camel/trunk/components/camel-fop/src/main/java/org/apache/camel/component/fop/FopProducer.java > Tue Mar 6 01:10:05 2012 > @@ -0,0 +1,106 @@ > +/** > + * 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.camel.component.fop; > + > +import java.io.ByteArrayOutputStream; > +import java.io.OutputStream; > +import java.util.Map; > +import javax.xml.transform.Result; > +import javax.xml.transform.Source; > +import javax.xml.transform.Transformer; > +import javax.xml.transform.TransformerException; > +import javax.xml.transform.TransformerFactory; > +import javax.xml.transform.sax.SAXResult; > +import javax.xml.transform.stream.StreamSource; > + > +import org.apache.camel.Exchange; > +import org.apache.camel.RuntimeExchangeException; > +import org.apache.camel.impl.DefaultProducer; > +import org.apache.camel.util.IntrospectionSupport; > +import org.apache.fop.apps.FOPException; > +import org.apache.fop.apps.FOUserAgent; > +import org.apache.fop.apps.Fop; > +import org.apache.fop.apps.FopFactory; > +import org.apache.fop.pdf.PDFEncryptionParams; > + > +/** > + * The Fop producer. > + */ > +public class FopProducer extends DefaultProducer { > + private final FopFactory fopFactory; > + private final String remaining; > + > + public FopProducer(FopEndpoint endpoint, FopFactory fopFactory, String > remaining) { > + super(endpoint); > + this.fopFactory = fopFactory; > + this.remaining = remaining; > + } > + > + public void process(Exchange exchange) throws Exception { > + FOUserAgent userAgent = fopFactory.newFOUserAgent(); > + Map<String, Object> headers = exchange.getIn().getHeaders(); > + setRenderParameters(userAgent, headers); > + setEncryptionParameters(userAgent, headers); > + > + String outputFormat = getOutputFormat(exchange); > + Source src = exchange.getIn().getBody(StreamSource.class); > + > + OutputStream out = transform(userAgent, outputFormat, src); > + exchange.getOut().setBody(out); > + } > + > + private String getOutputFormat(Exchange exchange) { > + String outputFormat = exchange.getIn() > + .getHeader(FopConstants.CAMEL_FOP_OUTPUT_FORMAT, > this.remaining, String.class); > + if (outputFormat == null) { > + throw new RuntimeExchangeException("Missing output format", > exchange); > + } > + > + return outputFormat; > + } > + > + private OutputStream transform(FOUserAgent userAgent, String > outputFormat, Source src) > + throws FOPException, TransformerException { > + OutputStream out = new ByteArrayOutputStream(); > + Fop fop = fopFactory.newFop(outputFormat, userAgent, out); > + TransformerFactory factory = TransformerFactory.newInstance(); > + Transformer transformer = factory.newTransformer(); > + > + Result res = new SAXResult(fop.getDefaultHandler()); > + transformer.transform(src, res); > + return out; > + } > + > + private void setEncryptionParameters(FOUserAgent userAgent, Map<String, > Object> headers) > + throws Exception { > + Map<String, Object> encryptionParameters = IntrospectionSupport > + .extractProperties(headers, FopConstants.CAMEL_FOP_ENCRYPT); > + if (!encryptionParameters.isEmpty()) { > + PDFEncryptionParams encryptionParams = new PDFEncryptionParams(); > + IntrospectionSupport.setProperties(encryptionParams, > encryptionParameters); > + userAgent.getRendererOptions().put("encryption-params", > encryptionParams); > + } > + } > + > + private void setRenderParameters(FOUserAgent userAgent, Map<String, > Object> headers) throws Exception { > + Map<String, Object> parameters = IntrospectionSupport > + .extractProperties(headers, FopConstants.CAMEL_FOP_RENDER); > + if (!parameters.isEmpty()) { > + IntrospectionSupport.setProperties(userAgent, parameters); > + } > + } > +} > > Added: > camel/trunk/components/camel-fop/src/main/resources/META-INF/services/org/apache/camel/component/fop > URL: > http://svn.apache.org/viewvc/camel/trunk/components/camel-fop/src/main/resources/META-INF/services/org/apache/camel/component/fop?rev=1297313&view=auto > ============================================================================== > --- > camel/trunk/components/camel-fop/src/main/resources/META-INF/services/org/apache/camel/component/fop > (added) > +++ > camel/trunk/components/camel-fop/src/main/resources/META-INF/services/org/apache/camel/component/fop > Tue Mar 6 01:10:05 2012 > @@ -0,0 +1,18 @@ > +# > +# 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. > +# > + > +class=org.apache.camel.component.fop.FopComponent > > Added: camel/trunk/components/camel-fop/src/test/data/conf/testcfg.xml > URL: > http://svn.apache.org/viewvc/camel/trunk/components/camel-fop/src/test/data/conf/testcfg.xml?rev=1297313&view=auto > ============================================================================== > --- camel/trunk/components/camel-fop/src/test/data/conf/testcfg.xml (added) > +++ camel/trunk/components/camel-fop/src/test/data/conf/testcfg.xml Tue Mar > 6 01:10:05 2012 > @@ -0,0 +1,42 @@ > +<?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. > +--> > +<fop version="1.0"> > + > + <!-- Strict user configuration --> > + <strict-configuration>true</strict-configuration> > + > + <!-- Strict FO validation --> > + <strict-validation>true</strict-validation> > + > + <!-- Base URL for resolving relative URLs --> > + <base>./</base> > + > + <!-- Font Base URL for resolving relative font URLs --> > + <font-base>./</font-base> > + > + <!-- Source resolution in dpi (dots/pixels per inch) for determining the > size of pixels in SVG and bitmap images, default: 72dpi --> > + <source-resolution>96</source-resolution> > + <!-- Target resolution in dpi (dots/pixels per inch) for specifying the > target resolution for generated bitmaps, default: 72dpi --> > + <target-resolution>72</target-resolution> > + > + <!-- default page-height and page-width, in case > + value is specified as auto --> > + <default-page-settings height="11in" width="8.26in"/> > + > + <!-- etc. etc..... --> > +</fop> > > Added: camel/trunk/components/camel-fop/src/test/data/xml/data.xml > URL: > http://svn.apache.org/viewvc/camel/trunk/components/camel-fop/src/test/data/xml/data.xml?rev=1297313&view=auto > ============================================================================== > --- camel/trunk/components/camel-fop/src/test/data/xml/data.xml (added) > +++ camel/trunk/components/camel-fop/src/test/data/xml/data.xml Tue Mar 6 > 01:10:05 2012 > @@ -0,0 +1,45 @@ > +<?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. > +--> > +<projectteam> > + <projectname>The Killer Application</projectname> > + <member> > + <name>John Doe</name> > + <function>lead</function> > + <email>jon....@killerapp.fun</email> > + </member> > + <member> > + <name>Paul Coder</name> > + <function>dev</function> > + <email>paul.co...@killerapp.fun</email> > + </member> > + <member> > + <name>Max Hacker</name> > + <function>dev</function> > + <email>max.hac...@killerapp.fun</email> > + </member> > + <member> > + <name>Donna Book</name> > + <function>doc</function> > + <email>donna.b...@killerapp.fun</email> > + </member> > + <member> > + <name>Henry Tester</name> > + <function>qa</function> > + <email>henry.tes...@killerapp.fun</email> > + </member> > +</projectteam> > > Added: > camel/trunk/components/camel-fop/src/test/java/org/apache/camel/component/fop/FopComponentTest.java > URL: > http://svn.apache.org/viewvc/camel/trunk/components/camel-fop/src/test/java/org/apache/camel/component/fop/FopComponentTest.java?rev=1297313&view=auto > ============================================================================== > --- > camel/trunk/components/camel-fop/src/test/java/org/apache/camel/component/fop/FopComponentTest.java > (added) > +++ > camel/trunk/components/camel-fop/src/test/java/org/apache/camel/component/fop/FopComponentTest.java > Tue Mar 6 01:10:05 2012 > @@ -0,0 +1,67 @@ > +/** > + * 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.camel.component.fop; > + > +import java.io.FileInputStream; > + > +import org.apache.camel.EndpointInject; > +import org.apache.camel.Exchange; > +import org.apache.camel.Produce; > +import org.apache.camel.ProducerTemplate; > +import org.apache.camel.builder.RouteBuilder; > +import org.apache.camel.component.mock.MockEndpoint; > +import org.apache.camel.test.junit4.CamelTestSupport; > +import org.apache.pdfbox.pdmodel.PDDocument; > +import org.junit.Test; > + > +public class FopComponentTest extends CamelTestSupport { > + > + @EndpointInject(uri = "mock:result") > + protected MockEndpoint resultEndpoint; > + > + @Produce(uri = "direct:start") > + protected ProducerTemplate template; > + > + @Test > + public void createPdfUsingXmlDataAndXsltTransformation() throws > Exception { > + resultEndpoint.expectedMessageCount(1); > + FileInputStream inputStream = new > FileInputStream("src/test/data/xml/data.xml"); > + > + template.sendBody(inputStream); > + resultEndpoint.assertIsSatisfied(); > + > + PDDocument document = PDDocument.load("target/data/result.pdf"); > + String pdfText = FopHelper.extractTextFrom(document); > + assertTrue(pdfText.contains("Project")); //from xsl template > + assertTrue(pdfText.contains("John Doe")); //from data xml > + } > + > + @Override > + protected RouteBuilder createRouteBuilder() { > + return new RouteBuilder() { > + public void configure() { > + from("direct:start") > + .to("xslt:xslt/template.xsl") > + .to("fop:application/pdf") > + .setHeader(Exchange.FILE_NAME, > constant("result.pdf")) > + .to("file:target/data") > + .to("mock:result"); > + > + } > + }; > + } > +} > > Added: > camel/trunk/components/camel-fop/src/test/java/org/apache/camel/component/fop/FopEndpointTest.java > URL: > http://svn.apache.org/viewvc/camel/trunk/components/camel-fop/src/test/java/org/apache/camel/component/fop/FopEndpointTest.java?rev=1297313&view=auto > ============================================================================== > --- > camel/trunk/components/camel-fop/src/test/java/org/apache/camel/component/fop/FopEndpointTest.java > (added) > +++ > camel/trunk/components/camel-fop/src/test/java/org/apache/camel/component/fop/FopEndpointTest.java > Tue Mar 6 01:10:05 2012 > @@ -0,0 +1,101 @@ > +/** > + * 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.camel.component.fop; > + > +import java.io.IOException; > +import java.io.InputStream; > + > +import org.apache.camel.Endpoint; > +import org.apache.camel.Exchange; > +import org.apache.camel.Producer; > +import org.apache.camel.impl.DefaultExchange; > +import org.apache.camel.test.junit4.CamelTestSupport; > +import org.apache.fop.apps.MimeConstants; > +import org.apache.pdfbox.cos.COSName; > +import org.apache.pdfbox.pdmodel.PDDocument; > +import org.junit.Test; > + > +public class FopEndpointTest extends CamelTestSupport { > + > + @Test > + public void generatePdfFromXslfoWithSpecificText() throws Exception { > + Endpoint endpoint = context().getEndpoint("fop:application/pdf"); > + Producer producer = endpoint.createProducer(); > + Exchange exchange = new DefaultExchange(context); > + exchange.getIn().setBody(FopHelper.decorateTextWithXSLFO("Test > Content")); > + > + producer.process(exchange); > + PDDocument document = getDocumentFrom(exchange); > + String content = FopHelper.extractTextFrom(document); > + assertEquals("Test Content", content); > + } > + > + @Test > + public void specifyCustomUserConfigurationFile() throws Exception { > + FopEndpoint customConfiguredEndpoint = context() > + > .getEndpoint("fop:application/pdf?userConfigURL=src/test/data/conf/testcfg.xml", > + FopEndpoint.class); > + float customSourceResolution = > customConfiguredEndpoint.getFopFactory().getSourceResolution(); > + assertEquals(96.0, customSourceResolution, 0.1); > + } > + > + @Test > + public void setPDFRenderingMetadataPerDocument() throws Exception { > + Endpoint endpoint = context().getEndpoint("fop:application/pdf"); > + Producer producer = endpoint.createProducer(); > + Exchange exchange = new DefaultExchange(context); > + exchange.getIn().setHeader("CamelFop.Render.Creator", "Test User"); > + exchange.getIn().setBody(FopHelper.decorateTextWithXSLFO("Test > Content")); > + > + producer.process(exchange); > + PDDocument document = getDocumentFrom(exchange); > + String creator = FopHelper.getDocumentMetadataValue(document, > COSName.CREATOR); > + assertEquals("Test User", creator); > + } > + > + @Test > + public void encryptPdfWithUserPassword() throws Exception { > + Endpoint endpoint = context().getEndpoint("fop:application/pdf"); > + Producer producer = endpoint.createProducer(); > + Exchange exchange = new DefaultExchange(context); > + exchange.getIn().setHeader("CamelFop.Encrypt.userPassword", > "secret"); > + exchange.getIn().setBody(FopHelper.decorateTextWithXSLFO("Test > Content")); > + > + producer.process(exchange); > + PDDocument document = getDocumentFrom(exchange); > + assertTrue(document.isEncrypted()); > + } > + > + @Test > + public void overridePdfOutputFormatToPlainText() throws Exception { > + String defaultOutputFormat = "application/pdf"; > + Endpoint endpoint = context().getEndpoint("fop:" + > defaultOutputFormat); > + Producer producer = endpoint.createProducer(); > + Exchange exchange = new DefaultExchange(context); > + exchange.getIn().setHeader(FopConstants.CAMEL_FOP_OUTPUT_FORMAT, > MimeConstants.MIME_PLAIN_TEXT); > + exchange.getIn().setBody(FopHelper.decorateTextWithXSLFO("Test > Content")); > + > + producer.process(exchange); > + String plainText = exchange.getOut().getBody(String.class).trim(); > + assertEquals("Test Content", plainText); > + } > + > + private PDDocument getDocumentFrom(Exchange exchange) throws IOException > { > + InputStream inputStream = > exchange.getOut().getBody(InputStream.class); > + return PDDocument.load(inputStream); > + } > +} > > Added: > camel/trunk/components/camel-fop/src/test/java/org/apache/camel/component/fop/FopHelper.java > URL: > http://svn.apache.org/viewvc/camel/trunk/components/camel-fop/src/test/java/org/apache/camel/component/fop/FopHelper.java?rev=1297313&view=auto > ============================================================================== > --- > camel/trunk/components/camel-fop/src/test/java/org/apache/camel/component/fop/FopHelper.java > (added) > +++ > camel/trunk/components/camel-fop/src/test/java/org/apache/camel/component/fop/FopHelper.java > Tue Mar 6 01:10:05 2012 > @@ -0,0 +1,75 @@ > +/** > + * 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.camel.component.fop; > + > +import java.io.IOException; > +import java.io.StringWriter; > +import java.io.Writer; > + > +import org.apache.pdfbox.cos.COSName; > +import org.apache.pdfbox.exceptions.CryptographyException; > +import org.apache.pdfbox.pdmodel.PDDocument; > +import org.apache.pdfbox.pdmodel.PDDocumentInformation; > +import org.apache.pdfbox.pdmodel.encryption.BadSecurityHandlerException; > +import org.apache.pdfbox.pdmodel.encryption.DecryptionMaterial; > +import org.apache.pdfbox.pdmodel.encryption.StandardDecryptionMaterial; > +import org.apache.pdfbox.util.PDFTextStripper; > + > +public final class FopHelper { > + private FopHelper() { > + } > + > + //decryption requires additional libraries > + public static void decryptPDFN(PDDocument document, String password) > throws > + IOException, CryptographyException, BadSecurityHandlerException { > + if (document.isEncrypted()) { > + DecryptionMaterial decryptionMaterial = new > StandardDecryptionMaterial(password); > + document.openProtection(decryptionMaterial); > + } else { > + throw new RuntimeException("Document not encrypted"); > + } > + } > + > + public static String extractTextFrom(PDDocument document) throws > IOException { > + Writer output = new StringWriter(); > + PDFTextStripper stripper = new PDFTextStripper(); > + stripper.writeText(document, output); > + return output.toString().trim(); > + } > + > + public static String getDocumentMetadataValue(PDDocument document, > COSName name) { > + PDDocumentInformation info = document.getDocumentInformation(); > + return info.getDictionary().getString(name); > + } > + > + public static String decorateTextWithXSLFO(String text) { > + return "<fo:root xmlns:fo=\"http://www.w3.org/1999/XSL/Format\">\n" > + + " <fo:layout-master-set>\n" > + + " <fo:simple-page-master master-name=\"only\">\n" > + + " <fo:region-body region-name=\"xsl-region-body\" > margin=\"0.7in\" padding=\"0\" />\n" > + + " <fo:region-before region-name=\"xsl-region-before\" > extent=\"0.7in\" />\n" > + + " <fo:region-after region-name=\"xsl-region-after\" > extent=\"0.7in\" />\n" > + + " </fo:simple-page-master>\n" > + + " </fo:layout-master-set>\n" > + + " <fo:page-sequence master-reference=\"only\">\n" > + + " <fo:flow flow-name=\"xsl-region-body\">\n" > + + " <fo:block>" + text + "</fo:block>\n" > + + " </fo:flow>\n" > + + " </fo:page-sequence>\n" > + + "</fo:root>"; > + } > +} > > Added: camel/trunk/components/camel-fop/src/test/resources/xslt/template.xsl > URL: > http://svn.apache.org/viewvc/camel/trunk/components/camel-fop/src/test/resources/xslt/template.xsl?rev=1297313&view=auto > ============================================================================== > --- camel/trunk/components/camel-fop/src/test/resources/xslt/template.xsl > (added) > +++ camel/trunk/components/camel-fop/src/test/resources/xslt/template.xsl Tue > Mar 6 01:10:05 2012 > @@ -0,0 +1,82 @@ > +<?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. > +--> > +<xsl:stylesheet version="1.1" > xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > xmlns:fo="http://www.w3.org/1999/XSL/Format" exclude-result-prefixes="fo"> > + <xsl:output method="xml" version="1.0" omit-xml-declaration="no" > indent="yes"/> > + <xsl:param name="versionParam" select="'1.0'"/> > + <!-- ========================= --> > + <!-- root element: projectteam --> > + <!-- ========================= --> > + <xsl:template match="projectteam"> > + <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"> > + > + <fo:layout-master-set> > + <fo:simple-page-master master-name="simpleA4" page-height="29.7cm" > page-width="21cm" margin-top="2cm" margin-bottom="2cm" margin-left="2cm" > margin-right="2cm"> > + <fo:region-body/> > + </fo:simple-page-master> > + </fo:layout-master-set> > + <fo:page-sequence master-reference="simpleA4"> > + <fo:flow flow-name="xsl-region-body"> > + <fo:block font-size="16pt" font-weight="bold" > space-after="5mm">Project: <xsl:value-of select="projectname"/> > + > + </fo:block> > + <fo:block font-size="12pt" space-after="5mm">Version <xsl:value-of > select="$versionParam"/> > + </fo:block> > + <fo:block font-size="10pt"> > + <fo:table table-layout="fixed" width="100%" > border-collapse="separate"> > + <fo:table-column column-width="4cm"/> > + <fo:table-column column-width="4cm"/> > + <fo:table-column column-width="5cm"/> > + > + <fo:table-body> > + <xsl:apply-templates select="member"/> > + </fo:table-body> > + </fo:table> > + </fo:block> > + </fo:flow> > + </fo:page-sequence> > + </fo:root> > + </xsl:template> > + > + <!-- ========================= --> > + <!-- child element: member --> > + <!-- ========================= --> > + <xsl:template match="member"> > + <fo:table-row> > + <xsl:if test="function = 'lead'"> > + <xsl:attribute name="font-weight">bold</xsl:attribute> > + </xsl:if> > + > + <fo:table-cell> > + <fo:block> > + <xsl:value-of select="name"/> > + </fo:block> > + </fo:table-cell> > + <fo:table-cell> > + <fo:block> > + <xsl:value-of select="function"/> > + </fo:block> > + </fo:table-cell> > + <fo:table-cell> > + <fo:block> > + <xsl:value-of select="email"/> > + </fo:block> > + </fo:table-cell> > + </fo:table-row> > + </xsl:template> > +</xsl:stylesheet> > + > > Modified: camel/trunk/components/pom.xml > URL: > http://svn.apache.org/viewvc/camel/trunk/components/pom.xml?rev=1297313&r1=1297312&r2=1297313&view=diff > ============================================================================== > --- camel/trunk/components/pom.xml (original) > +++ camel/trunk/components/pom.xml Tue Mar 6 01:10:05 2012 > @@ -76,6 +76,7 @@ > <module>camel-eventadmin</module> > <module>camel-exec</module> > <module>camel-flatpack</module> > + <module>camel-fop</module> > <module>camel-freemarker</module> > <module>camel-ftp</module> > <module>camel-gae</module> > > Modified: camel/trunk/parent/pom.xml > URL: > http://svn.apache.org/viewvc/camel/trunk/parent/pom.xml?rev=1297313&r1=1297312&r2=1297313&view=diff > ============================================================================== > --- camel/trunk/parent/pom.xml (original) > +++ camel/trunk/parent/pom.xml Tue Mar 6 01:10:05 2012 > @@ -69,6 +69,7 @@ > <easymock-version>3.0</easymock-version> > <ehcache-bundle-version>2.4.3_1</ehcache-bundle-version> > <flatpack-version>3.2.0_1</flatpack-version> > + <fop-version>1.0</fop-version> > <ftpserver-version>1.0.5</ftpserver-version> > <freemarker-version>2.3.18</freemarker-version> > <geronimo-el-spec-version>1.0.1</geronimo-el-spec-version> > @@ -391,6 +392,11 @@ > </dependency> > <dependency> > <groupId>org.apache.camel</groupId> > + <artifactId>camel-fop</artifactId> > + <version>${project.version}</version> > + </dependency> > + <dependency> > + <groupId>org.apache.camel</groupId> > <artifactId>camel-freemarker</artifactId> > <version>${project.version}</version> > </dependency> > > Modified: camel/trunk/platforms/karaf/features/pom.xml > URL: > http://svn.apache.org/viewvc/camel/trunk/platforms/karaf/features/pom.xml?rev=1297313&r1=1297312&r2=1297313&view=diff > ============================================================================== > --- camel/trunk/platforms/karaf/features/pom.xml (original) > +++ camel/trunk/platforms/karaf/features/pom.xml Tue Mar 6 01:10:05 2012 > @@ -60,6 +60,7 @@ > <flatpack-bundle-version>3.2.0_2</flatpack-bundle-version> > <felix-configadmin-version>1.2.4</felix-configadmin-version> > <felix-framework-version>2.0.5</felix-framework-version> > + <fop-bundle-version>1.0_2</fop-bundle-version> > <freemarker-bundle-version>2.3.18_1</freemarker-bundle-version> > <geronimo-el-version>1.0.1</geronimo-el-version> > > <geronimo-ws-metadata-spec-version>1.1.3</geronimo-ws-metadata-spec-version> > > Modified: > camel/trunk/platforms/karaf/features/src/main/resources/bundles.properties > URL: > http://svn.apache.org/viewvc/camel/trunk/platforms/karaf/features/src/main/resources/bundles.properties?rev=1297313&r1=1297312&r2=1297313&view=diff > ============================================================================== > --- > camel/trunk/platforms/karaf/features/src/main/resources/bundles.properties > (original) > +++ > camel/trunk/platforms/karaf/features/src/main/resources/bundles.properties > Tue Mar 6 01:10:05 2012 > @@ -40,6 +40,7 @@ org.apache.servicemix.bundles/org.apache > org.apache.servicemix.bundles/org.apache.servicemix.bundles.commons-io/${commons-io-bundle-version}/jar > org.apache.servicemix.bundles/org.apache.servicemix.bundles.dom4j/${dom4j-bundle-version}/jar > org.apache.servicemix.bundles/org.apache.servicemix.bundles.flatpack/${flatpack-bundle-version}/jar > +org.apache.servicemix.bundles/org.apache.servicemix.bundles.fop/${fop-bundle-version}/jar > org.apache.servicemix.bundles/org.apache.servicemix.bundles.freemarker/${freemarker-bundle-version}/jar > org.apache.servicemix.bundles/org.apache.servicemix.bundles.hamcrest/${hamcrest-bundle-version}/jar > org.apache.servicemix.bundles/org.apache.servicemix.bundles.hapi/${hapi-bundle-version}/jar > > Modified: camel/trunk/platforms/karaf/features/src/main/resources/features.xml > URL: > http://svn.apache.org/viewvc/camel/trunk/platforms/karaf/features/src/main/resources/features.xml?rev=1297313&r1=1297312&r2=1297313&view=diff > ============================================================================== > --- camel/trunk/platforms/karaf/features/src/main/resources/features.xml > (original) > +++ camel/trunk/platforms/karaf/features/src/main/resources/features.xml Tue > Mar 6 01:10:05 2012 > @@ -276,6 +276,11 @@ > <bundle > dependency='true'>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.flatpack/${flatpack-bundle-version}</bundle> > <bundle>mvn:org.apache.camel/camel-flatpack/${project.version}</bundle> > </feature> > + <feature name='camel-fop' version='${pom.version}' resolver='(obr)' > start-level='50'> > + <feature version='${project.version}'>camel-core</feature> > + <bundle > dependency='true'>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.fop/${fop-bundle-version}</bundle> > + <bundle>mvn:org.apache.camel/camel-fop/${project.version}</bundle> > + </feature> > <feature name='camel-freemarker' version='${project.version}' > resolver='(obr)' start-level='50'> > <feature version='${project.version}'>camel-core</feature> > <bundle > dependency='true'>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.freemarker/${freemarker-bundle-version}</bundle> > > -- Claus Ibsen ----------------- FuseSource Email: cib...@fusesource.com Web: http://fusesource.com Twitter: davsclaus, fusenews Blog: http://davsclaus.blogspot.com/ Author of Camel in Action: http://www.manning.com/ibsen/