tl  tr
  Home | Tutorials | Articles | Videos | Products | Tools | Search
Interviews | Open Source | Tag Cloud | Follow Us | Bookmark | Contact   
 Tools and Libs > JXPath > Exception handling with Lenient Mode

Exception handling with Lenient Mode 

JXPath is a java library for Object Graph Navigation using the XPath syntax. This requires the libraries commons-jxpath-1.3.jar, commons-beanutils.jar and commons-logging.jar to be in classpath. The following example shows exception handling in JXPath. If the given XPath doesn't exist JXPath throws JXPathNotFoundException. We can change this behavior by enabling lenient flag. If the context is in the lenient mode, then getValue() returns null for inexistent paths.

File Name  :  
com/bethecoder/tutorials/jxpath/common/Book.java 
   
package com.bethecoder.tutorials.jxpath.common;

public class Book {
  
  private String title;
  private double price;
  private Author author;

  public Book(String title, double price, Author author) {
    super();
    this.title = title;
    this.price = price;
    this.author = author;
  }

  public String getTitle() {
    return title;
  }
  public void setTitle(String title) {
    this.title = title;
  }
  public double getPrice() {
    return price;
  }
  public void setPrice(double price) {
    this.price = price;
  }
  
  public String toString() {
    return "Book[" + title + "]";
  }

  public Author getAuthor() {
    return author;
  }

  public void setAuthor(Author author) {
    this.author = author;
  }
}
   

File Name  :  
com/bethecoder/tutorials/jxpath/common/BookStore.java 
   
package com.bethecoder.tutorials.jxpath.common;

import java.util.List;

public class BookStore {
  
  private List<Book> books;
  
  public BookStore(List<Book> books) {
    super();
    this.books = books;
  }

  public List<Book> getBooks() {
    return books;
  }
  public void setBooks(List<Book> books) {
    this.books = books;
  }
}
   

File Name  :  
com/bethecoder/tutorials/jxpath/LenientModeTest.java 
Author  :  Sudhakar KV
Email  :  [email protected]
   
package com.bethecoder.tutorials.jxpath;

import java.util.Arrays;

import org.apache.commons.jxpath.JXPathContext;
import org.apache.commons.jxpath.JXPathNotFoundException;

import com.bethecoder.tutorials.jxpath.common.Author;
import com.bethecoder.tutorials.jxpath.common.Book;
import com.bethecoder.tutorials.jxpath.common.BookStore;

public class LenientModeTest {

  /**
   @param args
   */
  public static void main(String[] args) {
    BookStore bookStore = new BookStore(
        Arrays.asList(
            new Book("A1"11.11new Author("X1")),
            new Book("B2"22.22new Author("X2")),
            new Book("C3"33.33new Author("X3")),
            new Book("D4"44.44new Author("X4"))
        )
    );

    //Create JXPathContext with BookStore instance as ROOT node
    JXPathContext context = JXPathContext.newContext(bookStore);

    //Get the book with title 'ABCD' 
    try {
      System.out.println(context.getValue("/books[@title='ABCD']"));
    catch (JXPathNotFoundException e) {
      System.out.println(e);
    }

    //Enable Lenient mode
    context.setLenient(true);
    System.out.println(context.getValue("/books[@title='ABCD']"));
  }

}
   

It gives the following output,
org.apache.commons.jxpath.
	JXPathNotFoundException: No value for xpath: /books[@title='ABCD']
null



 
  


  
bl  br