Cuando se utiliza JAX-WS está utilizando un JAXB aplicación para serializar los objetos de Java para XML .
Entonces, el 'problema' es cómo funciona JAXB.
Para utilizar JAXB , es necesario crear un JAXBContext pasándolo todas las clases que pueden ser movilizados/unmarshaled. Al crear el contexto, JAXB comprobará que todas las clases dadas tengan un constructor no-arg. Si al menos una de esas clases no tiene este tipo de constructor, el contexto no se creará.
¿Por qué JAXB hacer esto? Necesita este constructor no arg SOLAMENTE cuando se transforma de XML a Object (desmaterialización), pero el problema es que cuando se crea el contexto, JAXB no sabe lo que se quiere hacer (¡mariscal o unmarshal)!
Conclusión: JAXB aceptará solo las clases que pueda reunir Y anular. Más información here
Sabiendo esto, ¿qué ocurre en JAX-WS?
Cuando se declara una @WebMethod
los parámetros se añadirán y valor de retorno clases a un contexto JAXB. Y es debido a esto que todas las clases relacionadas con la entrada y salida de un servicio web necesitan un constructor sin argumentos.
Conclusión: es culpa JAXB ;-)
Pero lo que si necesito utilizar una clase que no tiene un constructor sin argumentos?
Puede usar un XMLAdapter! Consulte this post para obtener más información ...
Por lo tanto, parece que el problema es que JAXB no distingue entre las clases que tiene para clasificar o desmarcar. Si esta característica era compatible, entonces JAX-WS podría construir un JAXBContext correspondiente. Creo que sería una buena solicitud de características para una próxima especificación JAXB. – Stefan
Estoy totalmente de acuerdo con usted. En realidad, los chicos de MOXy (una implementación JAXB de EclipseLink) tienen un boleto abierto para agregar compatibilidad con constructores de varias arias: https://bugs.eclipse.org/bugs/show_bug.cgi?id=328951 – ggarciao