Just wondering.  Your definition uses long serialVersionUID =
9179138257757325575L;  This is an implicit type cast from Long to long.
Have you tried using a primitive long in the value, e.g. long
serialVersionUID = 9179138257757325575l;

On Thu, Jan 28, 2016 at 7:20 AM José Manuel Prieto <
[email protected]> wrote:

> HI,
>
> I Test with Jetty my CXF service implementation.
> At the end I comment the method "convertFaultBean", of class
> org.apache.cxf.interceptor.ClientFaultConverter.
>
> My test method is:
> ...
> @Test
> public void testMyWebService() {
> try {
> String address = "http://localhost:9000/ServiciosDocumento";;
> JaxWsServerFactoryBean svrFactory = new JaxWsServerFactoryBean();
> svrFactory.setServiceClass(ServiciosDocumento.class);
> svrFactory.setAddress(address);
> svrFactory.setServiceBean(serviciosDocumentoClass);
> svrFactory.create();
>
> JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
> factory.setServiceClass(ServiciosDocumento.class);
> factory.setAddress(address);
> ServiciosDocumento client = (ServiciosDocumento) factory.create();
>
> Documento doc = client.obtenerDocumento("1", 1);
> Assert.assertNotNull(doc);
> } catch (ServiceException e) {
> Assert.assertTrue(ExceptionUtils.getRootCauseMessage(e), false);
> }
> }
> ...
>
> Error in console:
>
> 13:06:56.872 [main] INFO  o.a.c.i.ClientFaultConverter - Exception occurred
> while creating exception: Can not set static final long field
> es.trafico.scgd.comun.exception.ServiceException.serialVersionUID to
> java.lang.Long
> java.lang.IllegalAccessException: Can not set static final long field
> es.trafico.scgd.comun.exception.ServiceException.serialVersionUID to
> java.lang.Long
> at
>
> sun.reflect.UnsafeFieldAccessorImpl.throwFinalFieldIllegalAccessException(UnsafeFieldAccessorImpl.java:76)
> ~[na:1.8.0_65]
> at
>
> sun.reflect.UnsafeFieldAccessorImpl.throwFinalFieldIllegalAccessException(UnsafeFieldAccessorImpl.java:80)
> ~[na:1.8.0_65]
> at
>
> sun.reflect.UnsafeQualifiedStaticLongFieldAccessorImpl.set(UnsafeQualifiedStaticLongFieldAccessorImpl.java:77)
> ~[na:1.8.0_65]
> at java.lang.reflect.Field.set(Field.java:764) ~[na:1.8.0_65]
> at
>
> org.apache.cxf.interceptor.ClientFaultConverter.convertFaultBean(ClientFaultConverter.java:348)
> [cxf-core-3.1.4.jar:3.1.4]
> ...
>
> My exception class, implements Serializable:
>
> @WebFault(faultBean = "es.trafico.scgd.comun.dto.ServiceExceptionDetails",
> name = "ServiceExceptionDetails", targetNamespace = "
> http://scgd.trafico.es/servicios";)
> public class ServiceException extends Exception implements Serializable {
>
> /**
> * UID
> */
> private static final long serialVersionUID = 9179138257757325575L;
> private ServiceExceptionDetails faultInfo;
>
> public ServiceException(String message) {
> super(message);
> }
> ...
>
> The class org.apache.cxf.interceptor.ClientFaultConverter:
> in the method:
>
>     private Exception convertFaultBean(Class<?> exClass, Object faultBean,
> Fault fault) throws Exception {
>         Constructor<?> constructor = exClass.getConstructor(new
> Class[]{String.class});
> // my coment: all Exception must be a constructor with String. I dont know
> why.
>         Exception e = (Exception)constructor.newInstance(new
> Object[]{fault.getMessage()});
>
>         //Copy fault bean fields to exception
>         for (Class<?> obj = exClass; !obj.equals(Object.class);  obj =
> obj.getSuperclass()) {
>             Field[] fields = obj.getDeclaredFields();
>             for (Field f : fields) {
>                 try {
>                     Field beanField =
> faultBean.getClass().getDeclaredField(f.getName());
> // my comment: should be an IF, question about parameter: if has get/set or
> if it is "static final"
>                     ReflectionUtil.setAccessible(beanField);
>                     ReflectionUtil.setAccessible(f);
>                     f.set(e, beanField.get(faultBean));
> // my comment: ¿why try to set a private field serialVersionUID?
>                 } catch (NoSuchFieldException e1) {
>                     //do nothing
>                 }
>             }
>         }
>
> Thanks in advance.
> Jose Manuel Prieto
>

Reply via email to