2012-02-20 6 views
1

Мне нужно сериализовать объект типа uknown (только JDBC типов) в GWT. У меня есть объект, который содержит список объектов uknown «jdbc», и мне нужно, чтобы он был перенесен с клиента на сервер и обратно. Если этот объект сериализуется для файла не в среде клиента gwt, я могу удерживать эти объекты uknown в списке Object. Но GWT не может сериализовать объекты типа Object. Как я могу это достичь? Любые предложенияСериализация типов JDBC в GWT

+0

Все ли они GWT сериализуемы? Эти классы созданы вами? – Strelok

+0

Созданные мной классы являются Serializable, а также типы JDBC (типы Java, которые представляют типы баз данных) также являются Serializable (см. Http://db.apache.org/ojb/docu/guides/jdbc-types.html), возможно, кроме Blob и Clob, но я не работаю с ними – maks

ответ

0

См. GWT JRE Emulation Reference, нет класса Object, и GWT не может его сериализовать, поэтому вы должны создать свой собственный объект передачи, который реализует интерфейс маркера IsSerializable. Вкратце, RPC не может сериализовать java.lang.Object. Проверьте ссылки: GWT Sending type OBJECT Via RPC и хорошая нить здесь: Serialize object и Why is GWT serialization so complicated?

+0

Я знаю, что класс Object не сериализуется GWT. Это цель моего вопроса, чтобы узнать, как я могу сериализовать объект uknown с общим супертипом как Object – maks

+0

Нет GWT-RPC не может сериализовать java.lang.Object, кроме этого списка, Map также не может быть сериализован –

4

Вы можете работать с проблемами, если эти типы JDBC не возвращаются любой из других ваших RPC методов.

Если, например, ваш класс Foo не отправляется через RPC любым методом, отличным от того, который возвращает List [Object], то GWT не знает во время компиляции (когда он генерирует белый список RPC), что Foo является класс, который должен генерировать код для сериализации. Это особенно важно для сгенерированного JavaScript, где важно избегать раздувания кода из неиспользуемых типов.

Вы можете обойти это, вручную добавив в противном случае классы без ссылок (все возможные типы возврата из JDBC) в фиктивный класс, который отправляется через RPC. How do I add a type to GWT's Serialization Policy whitelist?

В качестве альтернативы вы можете написать собственный генератор RemoteService для использования, который добавляет типы без требуемого класса Dummy. http://code.google.com/webtoolkit/doc/latest/DevGuideCodingBasicsDeferred.html#generator

+0

Даже если я пишу такие Класс Dummy, могу ли я использовать 'List serviceMethod()' для возврата этих типов в этот список? – maks

2

Вы можете вернуть их

List<Serializable> serviceMethod(); 

Если вы гарантировать, что все они Сериализуемый. Просто верните все из них в Serializable, прежде чем вернуться из метода службы.