В веб-приложении java мне нужно вызвать удаленный сервис мыла, и я пытаюсь использовать клиент, сгенерированный CXF 2.5.0. Служба soap предоставляется конкретным поставщиком ERP, и его wsdl является чудовищным, тысячи типов, десятки импортов xsd и т. Д. Wsdl2java генерирует клиента нормально, благодаря флагу -autoNameResolution. Но во время выполнения он извлекает удаленный wsdl дважды, один раз, когда я создаю объект службы, и снова, когда я создаю объект порта.
MyService_Service myService = new MyService_Service(giantWsdlUrl); // fetches giantWsdl
MyService myPort = myService.getMyServicePort(); // fetches giantWsdl again
Почему это? Я могу понять, как его извлекать при создании myService, вы хотите видеть, что он соответствует клиенту, которым я сейчас пользуюсь, или позволить расположению wsdl среды выполнения определять адрес конечной точки и т. Д. Но я не понимаю, почему запрос на порт перезагрузит все это просто вышло на провод для. Я что-то упустил?
Так как это в веб-приложении, и я не могу быть уверен, что myPort является поточно-безопасным , тогда мне придется создать порт для каждого потока, за исключением того, что это слишком медленно, 6 8 секунд благодаря чудовищному WSDL. Или добавьте мое собственное объединение, создайте группу заранее, и сделайте проверки и проверки. Тьфу.
Для справки, маршрут создания JaxWsProxyFactoryBean не не когда-либо извлекает wsdl, и это хорошо для моей ситуации. На первый create () все еще уходит много времени, затем на последующие create () примерно четверть секунды, и даже это меньше, чем хотелось бы. И я не знаю ... это похоже на то, что я под капюшоном разогреваю вещь, а не поворачиваю ключ. :)