Inheritance 抽象类型只能通过附加类型信息进行实例化-OSGI

Inheritance 抽象类型只能通过附加类型信息进行实例化-OSGI,inheritance,interface,jackson,mapping,osgi,Inheritance,Interface,Jackson,Mapping,Osgi,我在OSGI堆栈上使用MongoJack。以下是我得到的例外情况: 2015年3月29日下午3:12:59 com.mongodb.DBPortPool goterro广告ÊNCIA: 将DBPortPool清空到localhost/127.0.0.1:27017 b/c时出错 org.codehaus.jackson.map。JsonMappingException:无法构造 问题:抽象类型只能实例化 在[Source: de.underuch.bson4jackson.io。LittleEn

我在OSGI堆栈上使用MongoJack。以下是我得到的例外情况:

2015年3月29日下午3:12:59 com.mongodb.DBPortPool goterro广告ÊNCIA: 将DBPortPool清空到localhost/127.0.0.1:27017 b/c时出错 org.codehaus.jackson.map。JsonMappingException:无法构造 问题:抽象类型只能实例化 在[Source: de.underuch.bson4jackson.io。LittleEndianInputStream@4fe0026c;位置: 0] 位于org.codehaus.jackson.map.JsonMappingException.from(JsonMappingException.java:163) 位于org.codehaus.jackson.map.desr.StdDeserializationContext.instantiationException(StdDeserializationContext.java:233) 位于org.codehaus.jackson.map.deser.AbstractDeserializer.deserialize(AbstractDeserializer.java:60) 位于org.codehaus.jackson.map.ObjectMapper.\u readValue(ObjectMapper.java:2704) 位于org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1315) net.vz.mongodb.jackson.internal.stream.JacksonDBDecoder.decode(JacksonDBDecoder.java:62) 位于com.mongodb.Response(Response.java:83) 位于com.mongodb.DBPort.go(DBPort.java:142) 在com.mongodb.DBPort.call上(DBPort.java:92) 位于com.mongodb.DBTCPConnector.innerCall(DBTCPConnector.java:244) 在com.mongodb.DBTCPConnector.call上(DBTCPConnector.java:216) 在com.mongodb.DBApiLayer$MyCollection.\u查找(DBApiLayer.java:288) 在com.mongodb.DBApiLayer$MyCollection上找到(DBApiLayer.java:273) 在com.mongodb.DBCursor.\u检查(DBCursor.java:368) 在com.mongodb.DBCursor.\u hasNext(DBCursor.java:459) 位于com.mongodb.DBCursor.hasNext(DBCursor.java:484) 位于net.vz.mongodb.jackson.DBCursor.hasNext(DBCursor.java:315) 在mongo.BookInventoryMongo.listBooks(BookInventoryMongo.java:44) 在mongo.BookInventoryMongo.start(BookInventoryMongo.java:58) 在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处 位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中 位于java.lang.reflect.Method.invoke(Method.java:497) 位于org.apache.felix.dm.InvocationUtil.invokeMethod(InvocationUtil.java:111) 位于org.apache.felix.dm.InvocationUtil.invokeCallbackMethod(InvocationUtil.java:66) 位于org.apache.felix.dm.impl.ComponentImpl.invokeCallbackMethod(ComponentImpl.java:688) 位于org.apache.felix.dm.impl.ComponentImpl.invoke(ComponentImpl.java:679) 位于org.apache.felix.dm.impl.ComponentImpl.bindService(ComponentImpl.java:624) org.apache.felix.dm.impl.ComponentImpl.access$400(ComponentImpl.java:52) 位于org.apache.felix.dm.impl.ComponentImpl$7.run(ComponentImpl.java:181) 位于org.apache.felix.dm.impl.SerialExecutor$1.run(SerialExecutor.java:47) 位于org.apache.felix.dm.impl.SerialExecutor.scheduleNext(SerialExecutor.java:84) 位于org.apache.felix.dm.impl.SerialExecutor.access$000(SerialExecutor.java:33) 位于org.apache.felix.dm.impl.SerialExecutor$1.run(SerialExecutor.java:50) 位于org.apache.felix.dm.impl.SerialExecutor.scheduleNext(SerialExecutor.java:84) 位于org.apache.felix.dm.impl.SerialExecutor.access$000(SerialExecutor.java:33) 位于org.apache.felix.dm.impl.SerialExecutor$1.run(SerialExecutor.java:50) 位于org.apache.felix.dm.impl.SerialExecutor.scheduleNext(SerialExecutor.java:84) 位于org.apache.felix.dm.impl.SerialExecutor.execute(SerialExecutor.java:68) 位于org.apache.felix.dm.impl.ComponentImpl.calculateStateChanges(ComponentImpl.java:231) 在org.apache.felix.dm.impl.ComponentImpl.start(ComponentImpl.java:399)上 位于org.apache.felix.dm.DependencyManager.add(DependencyManager.java:169) 位于mongo.Activator.init(Activator.java:28) 位于org.apache.felix.dm.DependencyActivatorBase.start(DependencyActivatorBase.java:76) 位于org.apache.felix.framework.util.SecureAction.startActivator(SecureAction.java:645) 位于org.apache.felix.framework.felix.activateBundle(felix.java:2154) 位于org.apache.felix.framework.felix.startBundle(felix.java:2072) 位于org.apache.felix.framework.BundleImpl.start(BundleImpl.java:976) 更新(launcher.java:457) 在aquete.launcher.launcher$1.run(launcher.java:194) 位于java.util.TimerThread.mainLoop(Timer.java:555) 在java.util.TimerThread.run(Timer.java:505)

警告:调用“启动”失败。 (com.mongodb.MongoException$Network:对服务器的读取操作 localhost/127.0.0.1:27017数据库测试失败(DB)

代码如下:

**api bundle**

package api;
public interface Book {
    public String getBookName();
    public void setBookName(String name);
}

package api;
import java.util.List;

public interface BookInventory {
    public void addBook(Book book);
    public List<Book> listBooks();
}



**mongo bundle**

package mongo;

import org.codehaus.jackson.annotate.JsonCreator;
import org.codehaus.jackson.annotate.JsonProperty;
import api.Book;

public class BookMongo implements Book{

    private String _id;
    private String bookName;

    public BookMongo() {
        super();
        // TODO Auto-generated constructor stub
}

@JsonCreator
    public BookMongo(@JsonProperty ("id") String _id, @JsonProperty     ("bName") String bookName) {
    super();
    this._id = _id;
    this.bookName = bookName;
}


@JsonProperty("id")
public String get_id() {
    return _id;
}

public void set_id(String _id) {
    this._id = _id;
}

@Override
@JsonProperty("bName")
public String getBookName() {
    return bookName;
}

@Override
public void setBookName(String name) {
    this.bookName = name;

}


@Override
public String toString() {
    return "BookMongo [_id=" + _id + ", bookName=" + bookName + "]";
}

}


package mongo;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import net.vz.mongodb.jackson.DBCursor;
import net.vz.mongodb.jackson.JacksonDBCollection;
import org.amdatu.mongo.MongoDBService;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.annotate.JsonDeserialize;
import com.mongodb.DBCollection;
import api.Book;
import api.BookInventory;

public class BookInventoryMongo implements BookInventory{

private volatile MongoDBService mongoDBService;

@Override
public void addBook(Book book) {

    DBCollection collection =   mongoDBService.getDB().getCollection("booksColl");
    JacksonDBCollection<Book, Object> books =     JacksonDBCollection.wrap(collection, Book.class);
    addBook
    books.save(book);

}

@Override
@JsonDeserialize(contentAs=BookMongo.class)   
public List<Book> listBooks() {


    DBCollection collection = mongoDBService.getDB().getCollection("booksColl");
    JacksonDBCollection<Book, Object> books = JacksonDBCollection.wrap(collection, Book.class);

    DBCursor<Book> cursor = books.find();

    List<Book> result = new ArrayList<Book>();
    while (cursor.hasNext()) {
        result.add(cursor.next());
    }

    return result;

}

//The start method is the entry point for the app.
public void start(){   

    Book bm = new BookMongo("5","The walking dead");
    addBook(bm);
    System.out.println("****Attention***");
    System.out.println("New book added to mongo");
    System.out.println(listBooks().toString());
    }

}


package mongo;

import java.util.Properties;
import org.amdatu.mongo.MongoDBService;
import org.apache.felix.dm.DependencyActivatorBase;
import org.apache.felix.dm.DependencyManager;
import org.osgi.framework.BundleContext;
import api.BookInventory;

public class Activator extends DependencyActivatorBase{

@Override
public void destroy(BundleContext arg0, DependencyManager arg1)
        throws Exception {
    // TODO Auto-generated method stub

}

@Override
public void init(BundleContext arg0, DependencyManager dm)
        throws Exception {

    Properties props = new Properties();
    props.put("persistent", true);

dm.add(createComponent()
        .setInterface(BookInventory.class.getName(), props)
        .setImplementation(BookInventoryMongo.class)
        .add(createServiceDependency()
                .setService(MongoDBService.class).
                setRequired(true)));

    }

}
**api包**
包装api;
公共接口手册{
公共字符串getBookName();
public void setBookName(字符串名称);
}
包装api;
导入java.util.List;
公共界面图书目录{
公共作废登记簿(登记簿);
公共列表目录();
}
**蒙戈束**
包蒙戈;
导入org.codehaus.jackson.annotate.JsonCreator;
导入org.codehaus.jackson.annotate.JsonProperty;
导入api.Book;
公共类BookMongo实现了Book{
私有字符串_id;
私有字符串书名;
PublicBookMongo(){
超级();
//TODO自动生成的构造函数存根
}
@JsonCreator
public BookMongo(@JsonProperty(“id”)String _id,@JsonProperty(“bName”)String bookName){
超级();
这个。_id=_id;
this.bookName=bookName;
}
@JsonProperty(“id”)
公共字符串get_id(){
返回_id;
}
公共无效集\u id(字符串\u id){
这个。_id=_id;
}
@凌驾
@JsonProperty(“bName”)
公共字符串getBookName(){
返回书名;
}
@凌驾
public void setBookName(字符串名称){
this.bookName=名称;
}
@凌驾
公共字符串toString(){
返回“BookMongo[_id=“+_id+”,bookName=“+bookName+”];
}
}
包蒙戈;
导入java.util.ArrayList;
导入java.util.Collection;
导入java.util.List;
重要的