Я использую CXF
для автогенерации некоторых классов клиента webservice. Результат выглядит примерно так:
@WebServiceClient
public class TheService extends Service {
}
До сих пор я использовал эти службы с помощью new TheService()
, но поскольку я использую Spring
я также хотел бы ввести мои автогенерированные классы. Очевидно, что не рекомендуется редактировать созданные классы, поскольку они могут быть восстановлены в будущем (например, при обновлении webservice). Поэтому я не могу их аннотировать, например, с помощью @Service
.
Но как я могу использовать @Autowired private TheService service
? Разве это невозможно?
Каждый раз, когда генерируется клиентский класс, если есть возможность изменить имя класса (я столкнулся с этим изменением имени класса при обновлении с Axis 1.1 до Axis 2 для генерации заглушки клиента webservice), вы можете попробовать его с помощью конфигурации Spring XML вместо аннотаций.
<bean id="clientStub" class="com.package1.TheService">
....
</bean>
Обратитесь к этому id (clientstub) в класс, к которому вы хотите получить доступ.
<bean id="accessingClass" class="com.package2.AccessingClass">
<property name="service" ref="clientStub" />
</bean>
Public class AccessingClass{
private Service service;
....
}
Только место, которое вам нужно, чтобы изменение было в классе (с именем сгенерированного класса) определения bean-компонента с id = "clientStub". Таким образом, любые изменения в ClassName TheService будут поглощены, и вам не придется вносить изменения в класс, обращающийся к этому клиентскому узлу, как Spring позаботится об изменении по id.