Могу ли я использовать объекты ConstraintViolation или ConstraintViolationException в моих возвращаемых значениях обратного вызова async с помощью RPC (GWT 2.5)?Проверка на стороне сервера GWT и сериализация RPC
Я впервые попробовал ConstraintViolation и GWT не хотел этого, потому что (я думаю) ConstraintViolation не имеет конструктора без параметров.
Я тогда попытался ConstraintViolationException, и он тоже не работает по другой причине (см. Ниже трассировку).
У меня есть необходимость в уловки исключений (ConstraintViolationException) вместо использования возвращаемых значений?
com.google.gwt.user.client.rpc.SerializationException: Type 'org.hibernate.validator.engine.ConstraintViolationImpl' was not included in the set of types which can be serialized by this SerializationPolicy or its Class object could not be loaded. For security purposes, this type will not be serialized.: instance = ConstraintViolationImpl{interpolatedMessage='{contact.validcompanyorperson}', propertyPath=, rootBeanClass=class com.mycompany.shared.foo.bar.MyBean, messageTemplate='{contact.validcompanyorperson}'}
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serialize(ServerSerializationStreamWriter.java:667)
at com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamWriter.writeObject(AbstractSerializationStreamWriter.java:126)
at com.google.gwt.user.client.rpc.core.java.util.Collection_CustomFieldSerializerBase.serialize(Collection_CustomFieldSerializerBase.java:44)
at com.google.gwt.user.client.rpc.core.java.util.HashSet_CustomFieldSerializer.serialize(HashSet_CustomFieldSerializer.java:39)
at com.google.gwt.user.client.rpc.core.java.util.HashSet_CustomFieldSerializer.serializeInstance(HashSet_CustomFieldSerializer.java:51)
at com.google.gwt.user.client.rpc.core.java.util.HashSet_CustomFieldSerializer.serializeInstance(HashSet_CustomFieldSerializer.java:28)
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeImpl(ServerSerializationStreamWriter.java:788)
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serialize(ServerSerializationStreamWriter.java:669)
at com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamWriter.writeObject(AbstractSerializationStreamWriter.java:126)
at javax.validation.ConstraintViolationException_CustomFieldSerializer.serialize(ConstraintViolationException_CustomFieldSerializer.java:49)
at javax.validation.ConstraintViolationException_CustomFieldSerializer.serializeInstance(ConstraintViolationException_CustomFieldSerializer.java:72)
at javax.validation.ConstraintViolationException_CustomFieldSerializer.serializeInstance(ConstraintViolationException_CustomFieldSerializer.java:28)
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeImpl(ServerSerializationStreamWriter.java:788)
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serialize(ServerSerializationStreamWriter.java:669)
at com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamWriter.writeObject(AbstractSerializationStreamWriter.java:126)
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter$ValueWriter$8.write(ServerSerializationStreamWriter.java:153)
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeValue(ServerSerializationStreamWriter.java:587)
at com.google.gwt.user.server.rpc.RPC.encodeResponse(RPC.java:605)
at com.google.gwt.user.server.rpc.RPC.encodeResponseForSuccess(RPC.java:471)
at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:563)
at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:208)
at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:248)
at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:650)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:218)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:442)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1083)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:640)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)
20161114 UPDATE: Я из идей. Я попытался скопировать ConstraintViolationImpl (hibernate-validator-4.1.0's) в свой собственный исходный файл, посылая это по кабелю. Не будет работать, потому что «com.google.gwt.user.client.rpc.SerializationException: тип« com.mycompany.common.gwt.ui.shared.GwtConstraintViolation »не был включен в набор типов, которые могут быть сериализованы этим Объект SerializationPolicy или его объект класса нельзя загрузить ». Более подробная информация приведена ниже (консоль разработки Eclipse Development Mode).
[DEBUG] [foo_bar] - Rebinding com.mycompany.IHM.client.gwt.foo.client.service.FooService
[DEBUG] [foo_bar] - Invoking generator com.google.gwt.user.rebind.rpc.ServiceInterfaceProxyGenerator
[DEBUG] [foo_bar] - Generating client proxy for remote service interface 'com.mycompany.IHM.client.gwt.foo.client.service.FooService'
[DEBUG] [foo_bar] - Analyzing 'com.mycompany.IHM.client.gwt.foo.client.service.FooService' for serializable types
[DEBUG] [foo_bar] - Analyzing methods:
[DEBUG] [foo_bar] - public abstract java.util.Set<com.mycompany.commun.gwt.ui.shared.GwtConstraintViolation<com.mycompany.IHM.client.gwt.foo.shared.pack.MyBean>> getConstraintViolations2(com.mycompany.IHM.client.gwt.foo.shared.pack.MyBean saisie)
[DEBUG] [foo_bar] - Return type: java.util.Set<com.mycompany.commun.gwt.ui.shared.GwtConstraintViolation<com.mycompany.IHM.client.gwt.foo.shared.pack.MyBean>>
[DEBUG] [foo_bar] - java.util.Set<com.mycompany.commun.gwt.ui.shared.GwtConstraintViolation<com.mycompany.IHM.client.gwt.foo.shared.pack.MyBean>>
[DEBUG] [foo_bar] - Verifying instantiability
[DEBUG] [foo_bar] - java.util.TreeSet<com.mycompany.commun.gwt.ui.shared.GwtConstraintViolation<com.mycompany.IHM.client.gwt.foo.shared.pack.MyBean>>
[DEBUG] [foo_bar] - Checking parameters of 'java.util.TreeSet<com.mycompany.commun.gwt.ui.shared.GwtConstraintViolation<com.mycompany.IHM.client.gwt.foo.shared.pack.MyBean>>'
[DEBUG] [foo_bar] - Checking type argument 0 of type 'java.util.TreeSet<E>' because it is directly exposed in this type or in one of its subtypes
[DEBUG] [foo_bar] - com.mycompany.commun.gwt.ui.shared.GwtConstraintViolation<com.mycompany.IHM.client.gwt.foo.shared.pack.MyBean>
[DEBUG] [foo_bar] - Verifying instantiability
[DEBUG] [foo_bar] - com.mycompany.commun.gwt.ui.shared.GwtConstraintViolation<com.mycompany.IHM.client.gwt.foo.shared.pack.MyBean>
[DEBUG] [foo_bar] - Analyzing the fields of type 'com.mycompany.commun.gwt.ui.shared.GwtConstraintViolation<com.mycompany.IHM.client.gwt.foo.shared.pack.MyBean>' that qualify for serialization
[DEBUG] [foo_bar] - private javax.validation.Path propertyPath
[DEBUG] [foo_bar] - javax.validation.Path
[DEBUG] [foo_bar] - Verifying instantiability
[DEBUG] [foo_bar] - com.google.gwt.validation.client.impl.PathImpl
[DEBUG] [foo_bar] - Analyzing the fields of type 'com.google.gwt.validation.client.impl.PathImpl' that qualify for serialization
[WARN] [foo_bar] - Field 'private final java.util.List<javax.validation.Path.Node> nodes' will not be serialized because it is final
GwtConstraintViolation определяется как 'общественный класс GwtConstraintViolation реализует ConstraintViolation, IsSerializable' (Содержимое копипаст из Hibernate Validator). Я прокомментировал поле «Объект», потому что знаю, что GWT это не нравится.
Вы пытались добавить конструктор по умолчанию к своей собственной реализации ConstraintViolationException? – Bob
Я вообще исключил исключения и возвращаю Set of ConstraintViolation (это то же самое, ConstraintViolationException - не что иное, как класс обертки). Yep, GwtConstraintViolation имеет конструктор без параметров. – Toto
Похоже, что пользовательский сериализатор GWT для ConstraintViolationImpl отбрасывает достаточное количество информации (см. Https://github.com/vaadin/gwt/blob/master/user/src/org/hibernate/validator/engine/ConstraintViolationImpl_CustomFieldSerializer.java). Кажется, некоторые из этих полей необходимы для моего кода, созданного редактором/драйвером, для корректного отображения сообщений об ошибках (я тестировал проверку тех же ограничений на стороне клиента, они работают. Затем, размер клиента, я создал «поддельный» неполный ConstrainViolation из полного ConstraintViolation objects: не работает). Мне нужно будет посмотреть, с какими полями я могу работать. – Toto