На днях поимел опыт работы с вебсервисами из коробки-моробки JAX-WS.
1. Все исключения выбрасываемые эндпоинтом нужно делать кастомными и аннотировать
@WebFault(name = "CRUDSoapException", targetNamespace = "wsdl.xxx")
см. блог Eben Hewitt
Иначе на клиента вываливается SOAPFaultException с кускокм строкового говна, который как бы описывает иксэпшн.
2. Все исключения выбрасываемые эндпоинтом приходят на платформу .NET в виде строкового
говна (обёрнутого в SOAPFaultException) в не зависимости от способа объявления на эндпоинте.
3.JAX-B может зажевать исключения возникающие при сериализации, и чтобы таки их увидеть нужно включить такой параметр в запуск программы -Djavax.net.debug=all
4. JAX-B не умеет сериализовать прокси объекты Hibernate (да и вообще - наверное любые сгенерённые прокси). Бороть так converting-hibernate-proxy-to-real-object
5. JAX-B не умеет сериализовать интерфейсы. Если есть необходимость использовать интерфейс можно сделать абстрактный класс реализующий этот интерфейс и обвесить его JAX-B аннотациями(@XmlSeeAlso - с указанием классов). В дальнейшем в коде можно будет использовать этот интерфейс добавив для него частный @XmlJavaTypeAdapter, который будет тупо преобразовывать абстрактный класс в интерфейс.