JAX-WS: Изменение targetNamespace в рантайме.
От: Legus79 Россия  
Дата: 23.06.10 06:46
Оценка:
Доброго времени суток.
Помогите советом.

У меня есть 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.
Может кто сталкивался с такой задачей? Или я что-то не так делаю?
Re: JAX-WS: Изменение targetNamespace в рантайме.
От: C0s Россия  
Дата: 23.06.10 09:20
Оценка:
Здравствуйте, Legus79, Вы писали:

L>Помогите советом.


точечно помочь не могу, могу рассказать как я бы решал такую задачу
я обычно пользуюсь spring-ws с маршаллингом через jaxb, для чего у меня имеется ant-скрипт, который извлекает xsd из wsdl и по нему генерит классы маппинга
в описанной ситуации я бы с помощью xslt генерил бы две схемы (одну как в wsdl namespace, другую — с заменённым namespace), а для запуска клиента в зависимости от ситуации (тест или нормальный режим) выбирал бы нужный jar

ps. на самом деле я бы заглушку сделал идентичной настоящему ws, но это отдельный разговор
Re[2]: JAX-WS: Изменение targetNamespace в рантайме.
От: Legus79 Россия  
Дата: 23.06.10 12:32
Оценка:
Здравствуйте, C0s, Вы писали:

C0s>Здравствуйте, Legus79, Вы писали:


L>>Помогите советом.


C0s>точечно помочь не могу, могу рассказать как я бы решал такую задачу

C0s>я обычно пользуюсь spring-ws с маршаллингом через jaxb, для чего у меня имеется ant-скрипт, который извлекает xsd из wsdl и по нему генерит классы маппинга
C0s>в описанной ситуации я бы с помощью xslt генерил бы две схемы (одну как в wsdl namespace, другую — с заменённым namespace), а для запуска клиента в зависимости от ситуации (тест или нормальный режим) выбирал бы нужный jar

Да, так сделать можно, но если будет третий вариант namespace'а... Сейчас я могу оба варианта маппинга положить в один jar, а имя используемого интерфейса (или пакета) брать из настроек. Тогда при новом варианте также можно будет jar с новым маппингом подолжить и настройку поменять. Ну это все требует некоторых усилий от внедренцев. Хотелось бы этого избежать.

C0s>ps. на самом деле я бы заглушку сделал идентичной настоящему ws, но это отдельный разговор

Я бы тоже сделал так

Спасибо аз ответ.
Re: JAX-WS: Изменение targetNamespace в рантайме.
От: Blazkowicz Россия  
Дата: 23.06.10 13:31
Оценка:
Здравствуйте, Legus79, Вы писали:

L>Для клиента использую JAX-WS 2.2.1 RI на JDK5.

L>Может кто сталкивался с такой задачей? Или я что-то не так делаю?
namespace он на то и namespace. Другой namespace, это уже другая WSDL и другой сервис. Так что я бы в первую очередь объяснить хостеру тестового сервиса что такое namespace и что он не должен авто генерироваться в зависимости от того где установлен сервер.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.