Inheritance 抽象类型只能通过附加类型信息进行实例化-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。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) 代码如下: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
**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;
重要的