Here is the stack trace:
g! e
java.lang.ClassCastException: java.lang.String cannot be cast to
[Ljava.lang.String;
at org.apache.felix.gogo.command.Basic.getCommands(Basic.java:384)
at org.apache.felix.gogo.command.Basic.help(Basic.java:211)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at
org.apache.felix.gogo.runtime.Reflective.method(Reflective.java:136)
at
org.apache.felix.gogo.runtime.CommandProxy.execute(CommandProxy.java:82)
at
org.apache.felix.gogo.runtime.Closure.executeCmd(Closure.java:469)
at
org.apache.felix.gogo.runtime.Closure.executeStatement(Closure.java:395)
at org.apache.felix.gogo.runtime.Pipe.run(Pipe.java:108)
at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:183)
at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:120)
at
org.apache.felix.gogo.runtime.CommandSessionImpl.execute(CommandSessionImpl.jav
a:89)
at org.apache.felix.gogo.shell.Console.run(Console.java:62)
at org.apache.felix.gogo.shell.Shell.console(Shell.java:203)
at org.apache.felix.gogo.shell.Shell.gosh(Shell.java:128)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at
org.apache.felix.gogo.runtime.Reflective.method(Reflective.java:136)
at
org.apache.felix.gogo.runtime.CommandProxy.execute(CommandProxy.java:82)
at
org.apache.felix.gogo.runtime.Closure.executeCmd(Closure.java:469)
at
org.apache.felix.gogo.runtime.Closure.executeStatement(Closure.java:395)
at org.apache.felix.gogo.runtime.Pipe.run(Pipe.java:108)
at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:183)
at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:120)
at
org.apache.felix.gogo.runtime.CommandSessionImpl.execute(CommandSessionImpl.jav
a:89)
at
org.apache.felix.shell.remote.Shell.startGogoShell(Shell.java:108)
at org.apache.felix.shell.remote.Shell.run(Shell.java:81)
at java.lang.Thread.run(Unknown Source)
g!
On Thu, Jun 16, 2011 at 1:39 AM, Derek Baum <[email protected]> wrote:
> Have you got a stack trace?
>
> Type 'e' in gogo after an exception is reported to see the stack trace
>
> 'e' is actually a function:
> g! type e
> e is function { $exception printStackTrace }
>
> which simply invokes the printStackTrace() method on the Exception object
> stored in the gogo exception variable.
>
> Derek
>
> On 16 June 2011 06:35, Mike Veksler <[email protected]> wrote:
>
> > I am trying to go through tutorial from OSGI and Apache Felix 3.0 book
> and
> > one of the the examples is to use IPOJO Annotation and Meta.xml. When I
> > deploy application to Felix the application runs fine but if i try to
> > lookup
> > help iside Felix Gogo shell, I get error: gogo: ClassCastException:
> > java.lang.String cannot be cast to [Ljava.lang.String;
> >
> > Here is the code with annotation:
> >
> > package com.packtpub.felix.bookshelf.service.tui;
> >
> > import com.packtpub.felix.bookshelf.inventory.api.Book;
> > import
> > com.packtpub.felix.bookshelf.inventory.api.BookAlreadyExistsException;
> > import com.packtpub.felix.bookshelf.inventory.api.BookNotFoundException;
> > import com.packtpub.felix.bookshelf.inventory.api.InvalidBookException;
> > import com.packtpub.felix.bookshelf.service.api.BookshelfService;
> > import
> > com.packtpub.felix.bookshelf.service.api.InvalidCredentialsException;
> > import
> com.packtpub.felix.bookshelf.service.tui.api.BookshelfServiceProxy;
> > import org.apache.felix.ipojo.annotations.Component;
> > import org.apache.felix.ipojo.annotations.Provides;
> > import org.apache.felix.ipojo.annotations.Requires;
> > import org.apache.felix.ipojo.annotations.ServiceProperty;
> > import org.apache.felix.service.command.Descriptor;
> > //import org.osgi.framework.BundleContext;
> > import org.osgi.framework.ServiceReference;
> >
> > import java.util.HashSet;
> > import java.util.Set;
> >
> >
> > @Component(name = "BookshelfServiceProxy")
> > @Provides
> > public class BookshelfServiceProxyImpl implements BookshelfServiceProxy{
> > public static final String SCOPE = "book";
> >
> > @ServiceProperty(name = "osgi.command.scope", value = SCOPE)
> > public String gogoScope;
> >
> > public static final String[] FUNCTIONS = new String[] {
> > "add", "search"
> > };
> >
> > public static final String FUNCTIONS_STR ="search";
> > @ServiceProperty(name = "osgi.command.function", value =
> FUNCTIONS_STR)
> > public String gogoFunctions;
> >
> > //private BundleContext context;
> > @Requires
> > private BookshelfService bookshelf;
> >
> > // public BookshelfServiceProxyImpl(BundleContext context){
> > // this.context = context;
> > // }
> > public BookshelfServiceProxyImpl(){
> > }
> >
> > @Descriptor("Search books by author, title, or category")
> > public Set<Book> search(
> > @Descriptor("username")
> > String username,
> > @Descriptor("password")
> > String password,
> > @Descriptor(
> > "search on attribute: author, title, or category"
> > )
> > String attribute,
> > @Descriptor(
> > "match like (use % at the beginning or end of <like>"
> +
> > " for wild-card)")
> > String filter) throws InvalidCredentialsException{
> >
> > BookshelfService service = lookupService();
> >
> > String sessionid = service.login(username,password.toCharArray());
> > Set<String> results;
> >
> > if("title".equals(attribute)){
> > results = service.searchBooksByTitle(sessionid,filter);
> > }
> > else if("author".equals(attribute)){
> > results = service.searchBooksByAuthor(sessionid,filter);
> > }
> > else if("category".equals(attribute)){
> > results = service.searchBooksByCategory(sessionid,filter);
> > }
> > else{
> > throw new RuntimeException(
> > "Invalid attribute, expecting one of { 'title', " +
> > "'author', 'category' } got '"+attribute+"'");
> > }
> > return getBooks(sessionid,service,results);
> >
> > }
> >
> > @Descriptor("Search books by rating")
> > public Set<Book> search(
> > @Descriptor("username")
> > String username,
> > @Descriptor("password")
> > String password,
> > @Descriptor("search on attribute rating")
> > String attribute,
> > @Descriptor("lower rating limit (inclusive)")
> > int lower,
> > @Descriptor("upper rating limit (inclusive)")
> > int upper) throws InvalidCredentialsException {
> >
> > if(!"rating".equals(attribute)){
> > throw new RuntimeException(
> > "Invalid attribute, expecting 'rating' got '"+
> > attribute+"'");
> > }
> >
> > BookshelfService service = lookupService();
> > String sessionid = service.login(username,password.toCharArray());
> > Set<String> results =
> > service.searchBooksByRating(sessionid,lower,upper);
> > return getBooks(sessionid,service,results);
> > }
> >
> > @Descriptor("Add book to the inventory")
> > public String add(
> > @Descriptor("username") String username,
> > @Descriptor("password") String password,
> > @Descriptor("ISBN") String isbn,
> > @Descriptor("Title") String title,
> > @Descriptor("Author") String author,
> > @Descriptor("Category") String category,
> > @Descriptor("Rating (0..10)") int rating)
> > throws InvalidCredentialsException,
> > BookAlreadyExistsException,
> > InvalidBookException{
> > BookshelfService service = lookupService();
> > String sessionId = service.login(username,password.toCharArray());
> > service.addBook(sessionId,isbn,title,author,category,rating);
> > return isbn;
> > }
> >
> > private BookshelfService lookupService(){
> > // ServiceReference reference = context.getServiceReference(
> > // BookshelfService.class.getName());
> > // if(reference==null){
> > // throw new RuntimeException("BookshelfService not
> > registered,cannot invoke "+
> > // "operation");
> > // }
> > // BookshelfService service = (BookshelfService)
> > this.context.getService(reference);
> > // if(service==null){
> > // throw new RuntimeException(
> > // "BookshelfService not registered, cannot invoke "+
> > // "operation");
> > // }
> > // return service;
> > return this.bookshelf;
> > }
> >
> > private Set<Book> getBooks(
> > String sessionid, BookshelfService service,
> > Set<String> results) {
> > Set<Book> books = new HashSet<Book>();
> > for(String isbn: results){
> > Book book;
> > try{
> > book = service.getBook(sessionid,isbn);
> > books.add(book);
> > } catch (BookNotFoundException e) {
> > System.out.println("ISBN "+ isbn +
> > " referenced but not found");
> > }
> > }
> > return books;
> > }
> > }
> >
> >
> > Here is meta.xml:
> >
> > <?xml version="1.0" encoding="UTF-8"?>
> > <ipojo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> > xsi:schemaLocation="org.apache.felix.ipojo
> > http://felix.apache.org/ipojo/schemas/CURRENT/core.xsd"
> > xmlns="org.apache.felix.ipojo">
> >
> > <instance component="BookshelfServiceProxy"
> > name="bookshelf.service.tui"/>
> > </ipojo>
> >
>