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 */
017package org.apache.camel.model.language;
018
019import javax.xml.bind.annotation.XmlAccessType;
020import javax.xml.bind.annotation.XmlAccessorType;
021import javax.xml.bind.annotation.XmlAttribute;
022import javax.xml.bind.annotation.XmlRootElement;
023import javax.xml.bind.annotation.XmlTransient;
024
025import org.apache.camel.spi.Metadata;
026
027/**
028 * Evaluate an XQuery expressions against an XML payload.
029 */
030@Metadata(firstVersion = "1.0.0", label = "language,xml", title = "XQuery")
031@XmlRootElement(name = "xquery")
032@XmlAccessorType(XmlAccessType.FIELD)
033public class XQueryExpression extends NamespaceAwareExpression {
034    @XmlAttribute
035    private String type;
036    @XmlTransient
037    private Class<?> resultType;
038    @XmlAttribute
039    private String headerName;
040
041    public XQueryExpression() {
042    }
043
044    public XQueryExpression(String expression) {
045        super(expression);
046    }
047
048    @Override
049    public String getLanguage() {
050        return "xquery";
051    }
052
053    public String getType() {
054        return type;
055    }
056
057    /**
058     * Sets the class name of the result type (type from output)
059     * <p/>
060     * The default result type is NodeSet
061     */
062    public void setType(String type) {
063        this.type = type;
064    }
065
066    public Class<?> getResultType() {
067        return resultType;
068    }
069
070    /**
071     * Sets the class of the result type (type from output).
072     * <p/>
073     * The default result type is NodeSet
074     */
075    public void setResultType(Class<?> resultType) {
076        this.resultType = resultType;
077    }
078
079    public String getHeaderName() {
080        return headerName;
081    }
082
083    /**
084     * Name of header to use as input, instead of the message body
085     */
086    public void setHeaderName(String headerName) {
087        this.headerName = headerName;
088    }
089
090}