Доброго времени суток.
Помогите советом.
У меня есть wsdl некого сервиса (доступа к сервису нет), пишу для него клиента. Есть сервис-заглушка для тестирования клиента. Wsdl заглушки идентичен wsdl'ю рабочего сервиса за исключением адреса endpoint и namespace'ов. Клиентский код я генерю wsimport'ом из wsdl оригинального сервиса, но хочу, например, натравить его на тестовую заглушку (Или наоборот, это не принципиально. Главное не перегенерять клиентский код по wsdl). В клиенте я сделал чтобы endpoint, namespace, имя сервиса, имя порта бралось из настроек. Но вот namespace для методов поменять программно не получается. Упорно генерятся запросы с namespace который сгенерился по wsdl (в анотациях к методам).
Вот мой код инициализации:
MyService s = new MyService(settings.getWsdl(), new QName(settings.getServiceNamespace(), settings.getServiceName()));
MyPort p = s.getPort(new QName(settings.getServiceNamespace(), settings.getServicePortName()), MyPort.class);
((BindingProvider)service).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, settings.getServiceEndpoint());
Для клиента использую JAX-WS 2.2.1 RI на JDK5.
Может кто сталкивался с такой задачей? Или я что-то не так делаю?
Здравствуйте, C0s, Вы писали:
C0s>Здравствуйте, Legus79, Вы писали:
L>>Помогите советом.
C0s>точечно помочь не могу, могу рассказать как я бы решал такую задачу
C0s>я обычно пользуюсь spring-ws с маршаллингом через jaxb, для чего у меня имеется ant-скрипт, который извлекает xsd из wsdl и по нему генерит классы маппинга
C0s>в описанной ситуации я бы с помощью xslt генерил бы две схемы (одну как в wsdl namespace, другую — с заменённым namespace), а для запуска клиента в зависимости от ситуации (тест или нормальный режим) выбирал бы нужный jar
Да, так сделать можно, но если будет третий вариант namespace'а... Сейчас я могу оба варианта маппинга положить в один jar, а имя используемого интерфейса (или пакета) брать из настроек. Тогда при новом варианте также можно будет jar с новым маппингом подолжить и настройку поменять. Ну это все требует некоторых усилий от внедренцев. Хотелось бы этого избежать.
C0s>ps. на самом деле я бы заглушку сделал идентичной настоящему ws, но это отдельный разговор
Я бы тоже сделал так
Спасибо аз ответ.