Я пытаюсь создать быстрый пример Java-клиента для веб-службы SOAP, которую мы создали с помощью ASP.net.
Схема сообщения веб-службы использует множество абстрактных классов с их реализацией, например, DeviceIdentifier (аннотация), с SerialNumber и ProductNumber (это гипотетические примеры для иллюстрации вопроса)
Я использовал wsimport для создания прокси на стороне клиента, чтобы использовать веб-сервис из моего кода Java:
wsimport -extension -s c:\theservice -d c:\theservice -p theservice http://server/theservice?wsdl
Затем я собираю сообщение следующим образом:
GetDeviceReq request = new GetProductReq();
DeviceIdentifier id = new SerialNumber();
((SerialNumber)id).setUnitIdentifier(id);
GetDeviceResp response = service.GetDevice(request);
Код отлично компилируется и выполняется. Тем не менее, я получаю SOAPFaultException со следующим сообщением от веб-службы ASP.net:
The specified type is abstract: name='DeviceIdentifier', namespace='http://bogus', at <unitIdentifier xmlns='http://bogus'>.
Я понимаю, что означает сообщение об ошибке, но у меня заканчиваются идеи относительно того, почему это происходит в этом случае? Я подозреваю, что это может быть связано с тем, как инструмент wsimport генерировал прокси-код?