среда, 10 августа 2011 г.

SOAPFaultException на платформах .NET и Java, опыт работы с JAX-WS

На днях поимел опыт работы с вебсервисами из коробки-моробки 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, который будет тупо преобразовывать абстрактный класс в интерфейс. 




Комментариев нет:

Отправить комментарий