Willem

Can you add SNIPPET tags in:
   public @interface MyXPath

And add it to the xpath wiki page, then end users can better read and
understand how to create their own xpath annotation with their
namespaces.



On Tue, May 12, 2009 at 6:58 AM,  <ningji...@apache.org> wrote:
> Author: ningjiang
> Date: Tue May 12 04:58:13 2009
> New Revision: 773781
>
> URL: http://svn.apache.org/viewvc?rev=773781&view=rev
> Log:
> CAMEL-1602 support to get the namespces from a customerized XPath
>
> Added:
>    
> camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/xslt/MyXPath.java
>    (with props)
> Modified:
>    
> camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/XPathAnnotationExpressionFactory.java
>    
> camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitterPojoTest.java
>    
> camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/xslt/TestBean.java
>
> Modified: 
> camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/XPathAnnotationExpressionFactory.java
> URL: 
> http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/XPathAnnotationExpressionFactory.java?rev=773781&r1=773780&r2=773781&view=diff
> ==============================================================================
> --- 
> camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/XPathAnnotationExpressionFactory.java
>  (original)
> +++ 
> camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/XPathAnnotationExpressionFactory.java
>  Tue May 12 04:58:13 2009
> @@ -17,6 +17,7 @@
>  package org.apache.camel.component.bean;
>
>  import java.lang.annotation.Annotation;
> +import java.lang.reflect.Method;
>
>  import org.apache.camel.CamelContext;
>  import org.apache.camel.Expression;
> @@ -24,6 +25,7 @@
>  import org.apache.camel.language.LanguageAnnotation;
>  import org.apache.camel.language.NamespacePrefix;
>  import org.apache.camel.language.XPath;
> +import org.apache.camel.util.ObjectHelper;
>
>  /**
>  * Factory for the XPath expression annotations.
> @@ -36,15 +38,23 @@
>     public Expression createExpression(CamelContext camelContext, Annotation 
> annotation, LanguageAnnotation languageAnnotation, Class 
> expressionReturnType) {
>         String xpath = getExpressionFromAnnotation(annotation);
>         XPathBuilder builder = XPathBuilder.xpath(xpath);
> -        if (annotation instanceof XPath) {
> -            XPath xpathAnnotation = (XPath) annotation;
> -            NamespacePrefix[] namespaces = xpathAnnotation.namespaces();
> -            if (namespaces != null) {
> -                for (NamespacePrefix namespacePrefix : namespaces) {
> -                    builder = builder.namespace(namespacePrefix.prefix(), 
> namespacePrefix.uri());
> -                }
> +        NamespacePrefix[] namespaces = 
> getExpressionNameSpacePrefix(annotation);
> +        if (namespaces != null) {
> +            for (NamespacePrefix namespacePrefix : namespaces) {
> +                builder = builder.namespace(namespacePrefix.prefix(), 
> namespacePrefix.uri());
>             }
> +
>         }
>         return builder;
>     }
> +
> +    protected NamespacePrefix[] getExpressionNameSpacePrefix(Annotation 
> annotation) {
> +        try {
> +            Method method = annotation.getClass().getMethod("namespaces");
> +            Object value = ObjectHelper.invokeMethod(method, annotation);
> +            return (NamespacePrefix[])value;
> +        } catch (NoSuchMethodException e) {
> +            throw new IllegalArgumentException("Cannot determine the 
> annotation: " + annotation + " as it does not have an namespaces() method");
> +        }
> +    }
>  }
>
> Modified: 
> camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitterPojoTest.java
> URL: 
> http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitterPojoTest.java?rev=773781&r1=773780&r2=773781&view=diff
> ==============================================================================
> --- 
> camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitterPojoTest.java
>  (original)
> +++ 
> camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitterPojoTest.java
>  Tue May 12 04:58:13 2009
> @@ -121,6 +121,7 @@
>             // to access the message header and body at same time,
>             // then create the message that we want, splitter will
>             // take care rest of them.
> +            // *NOTE* this feature requires Camel version >= 1.6.1
>             List<Message> answer = new ArrayList<Message>();
>             String[] parts = header.split(",");
>             for (String part : parts) {
>
> Added: 
> camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/xslt/MyXPath.java
> URL: 
> http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/xslt/MyXPath.java?rev=773781&view=auto
> ==============================================================================
> --- 
> camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/xslt/MyXPath.java
>  (added)
> +++ 
> camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/xslt/MyXPath.java
>  Tue May 12 04:58:13 2009
> @@ -0,0 +1,37 @@
> +/**
> + * 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.xslt;
> +
> +import java.lang.annotation.ElementType;
> +import java.lang.annotation.Retention;
> +import java.lang.annotation.RetentionPolicy;
> +import java.lang.annotation.Target;
> +
> +import org.apache.camel.component.bean.XPathAnnotationExpressionFactory;
> +import org.apache.camel.language.LanguageAnnotation;
> +import org.apache.camel.language.NamespacePrefix;
> +
> +...@retention(RetentionPolicy.RUNTIME)
> +...@target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER})
> +...@languageannotation(language = "xpath", factory = 
> XPathAnnotationExpressionFactory.class)
> +public @interface MyXPath {
> +    String value();
> +
> +    NamespacePrefix[] namespaces() default {
> +   �...@namespaceprefix(prefix = "n1", uri = "http://example.org/ns1";),
> +   �...@namespaceprefix(prefix = "n2", uri = "http://example.org/ns2";)};
> +}
>
> Propchange: 
> camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/xslt/MyXPath.java
> ------------------------------------------------------------------------------
>    svn:eol-style = native
>
> Propchange: 
> camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/xslt/MyXPath.java
> ------------------------------------------------------------------------------
>    svn:keywords = Rev Date
>
> Modified: 
> camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/xslt/TestBean.java
> URL: 
> http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/xslt/TestBean.java?rev=773781&r1=773780&r2=773781&view=diff
> ==============================================================================
> --- 
> camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/xslt/TestBean.java
>  (original)
> +++ 
> camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/xslt/TestBean.java
>  Tue May 12 04:58:13 2009
> @@ -16,7 +16,6 @@
>  */
>  package org.apache.camel.component.xslt;
>
> -import org.apache.camel.language.XPath;
>
>  /**
>  * @version $Revision$
> @@ -24,7 +23,7 @@
>  public class TestBean {
>     private String subject;
>
> -    public void onMethod(@XPath("/*/@subject")String subject) {
> +    public void onMethod(@MyXPath("/*/@subject")String subject) {
>         this.subject = subject;
>     }
>
>
>
>



-- 
Claus Ibsen
Apache Camel Committer

Open Source Integration: http://fusesource.com
Blog: http://davsclaus.blogspot.com/
Twitter: http://twitter.com/davsclaus
Apache Camel Reference Card:
http://refcardz.dzone.com/refcardz/enterprise-integration
Interview with me:
http://architects.dzone.com/articles/interview-claus-ibsen-about?mz=7893-progress

Reply via email to