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.camel.model.dataformat;
018    
019    import javax.xml.bind.annotation.XmlAccessType;
020    import javax.xml.bind.annotation.XmlAccessorType;
021    import javax.xml.bind.annotation.XmlAttribute;
022    import javax.xml.bind.annotation.XmlRootElement;
023    import javax.xml.bind.annotation.XmlTransient;
024    
025    import org.apache.camel.model.DataFormatDefinition;
026    import org.apache.camel.spi.DataFormat;
027    import org.apache.camel.spi.RouteContext;
028    import org.apache.camel.util.ObjectHelper;
029    
030    @XmlRootElement(name = "json")
031    @XmlAccessorType(XmlAccessType.FIELD)
032    public class JsonDataFormat extends DataFormatDefinition {
033        
034        @XmlAttribute(required = false)
035        private Boolean prettyPrint;
036    
037        @XmlAttribute(required = false)
038        private JsonLibrary library = JsonLibrary.XStream;
039    
040        @XmlAttribute(required = false)
041        private String unmarshalTypeName;
042    
043        @XmlTransient
044        private Class<?> unmarshalType;
045    
046        public JsonDataFormat() {
047        }
048    
049        public JsonDataFormat(JsonLibrary library) {
050            this.library = library;
051        }
052    
053        public Boolean getPrettyPrint() {
054            return prettyPrint;
055        }
056    
057        public void setPrettyPrint(Boolean prettyPrint) {
058            this.prettyPrint = prettyPrint;
059        }
060    
061        public Class<?> getUnmarshalType() {
062            return unmarshalType;
063        }
064    
065        public void setUnmarshalType(Class<?> unmarshalType) {
066            this.unmarshalType = unmarshalType;
067        }
068    
069        @Override
070        protected DataFormat createDataFormat(RouteContext routeContext) {
071            if (library == JsonLibrary.XStream) {
072                setProperty(this, "dataFormatName", "org.apache.camel.dataformat.xstream.JsonDataFormat");
073            } else {
074                setProperty(this, "dataFormatName", "org.apache.camel.component.jackson.JacksonDataFormat");
075            }
076    
077            if (unmarshalType == null && unmarshalTypeName != null) {
078                try {
079                    unmarshalType = routeContext.getCamelContext().getClassResolver().resolveMandatoryClass(unmarshalTypeName);
080                } catch (ClassNotFoundException e) {
081                    throw ObjectHelper.wrapRuntimeCamelException(e);
082                }
083            }
084    
085            return super.createDataFormat(routeContext);
086        }
087    
088        @Override
089        protected void configureDataFormat(DataFormat dataFormat) {
090            if (unmarshalType != null) {
091                setProperty(dataFormat, "unmarshalType", unmarshalType);
092            }
093        }
094    
095    }