Как ввести автоматически сгенерированные классы?

1

Я использую CXF для автогенерации некоторых классов клиента webservice. Результат выглядит примерно так:

@WebServiceClient
public class TheService extends Service {
}

До сих пор я использовал эти службы с помощью new TheService(), но поскольку я использую Spring я также хотел бы ввести мои автогенерированные классы. Очевидно, что не рекомендуется редактировать созданные классы, поскольку они могут быть восстановлены в будущем (например, при обновлении webservice). Поэтому я не могу их аннотировать, например, с помощью @Service.

Но как я могу использовать @Autowired private TheService service? Разве это невозможно?

Теги:
spring
web-services

1 ответ

1
Лучший ответ

Каждый раз, когда генерируется клиентский класс, если есть возможность изменить имя класса (я столкнулся с этим изменением имени класса при обновлении с 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.

  • 0
    Это отличная идея, используя xml config вместо аннотаций.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню