Существует ли какая-либо аннотация <jaxws: endpoint />? - PullRequest
4 голосов
/ 08 апреля 2011

Я использую CXF с Spring для публикации и использования моих веб-сервисов в JBoss 5.1 .Все работает нормально.

Однако есть одна вещь, которую я считаю очень утомительной: поместить тег jaxws: endpoint для каждого Web-сервиса в applicationContext.xml .

Нет ли способа сделать это с помощью аннотаций? Спасибо за все.

Ответы [ 2 ]

2 голосов
/ 09 апреля 2011

Есть несколько аннотаций для настройки вещей, которые вы также можете вставить в <jaxws:endpoint>. Замечание для объявления конечной точки CXF было бы неплохо.

Вы можете настроить конечную точку, используя код вместо Spring XML. Это может быть удобно, если у вас много повторяющихся настроек, которые вы можете выделить. Или, если у вас есть определенные конечные точки, настроенные по-разному в разных средах.

Например:

@Autowired var authImpl: Auth = _
@Autowired var faultListener: FaultListener = _

def initWebServices() {
  var sf: JaxWsServerFactoryBean = _

  val propMap = mutable.HashMap[String, AnyRef]("org.apache.cxf.logging.FaultListener"->faultListener.asInstanceOf[AnyRef])

  sf = new JaxWsServerFactoryBean
  sf.setServiceBean(authImpl)
  sf.setAddress("/auth")
  sf.setServiceName(new QName("http://auth.ws.foo.com/", "auth", "AuthService"))
  sf.setProperties(propMap)
  sf.create   

  // more services...
1 голос
/ 21 мая 2015

Со временем возникают новые возможности.

Работа с CXF / SpringBoot (SpringBoot: 1.2.3, CXF: 3.10, Spring: 4.1.6) есть хорошая альтернатива для избавления от конфигурации конечной точки jaxws: в cxf-servlet.xml, как jonashackt. указано в nabble.com . Однако это решение возможно только в том случае, если в приложении имеется только одна конечная точка (по крайней мере, мне не удалось настроить более одной).

public static void main(String[] args) { 
    SpringApplication.run(Application.class, args); 
} 

@Bean 
public ServletRegistrationBean dispatcherServlet() { 
    CXFServlet cxfServlet = new CXFServlet(); 
    return new ServletRegistrationBean(cxfServlet, "/api/*"); 
} 

@Bean(name="cxf") 
public SpringBus springBus() { 
    return new SpringBus(); 
} 

@Bean 
public MyServicePortType myService() { 
    return new MyServiceImpl(); 
} 

@Bean 
public Endpoint endpoint() { 
    EndpointImpl endpoint = new EndpointImpl(springBus(), myService()); 
    endpoint.publish("/MyService"); 
    return endpoint; 
} 

Где MyServicePortType - это класс с аннотацией @WebService. Эта конечная точка затем вызывается для URL-адресов, таких как «localhost: 8080 / api / MyService»

Конечно, эти объявления @Bean могут быть помещены в любой другой класс конфигурации Spring.

В отличие от скопированного исходного решения, я предлагаю создать экземпляр Bus (cxf-Bean), используя фабричный метод вместо прямого "new SpringBus ()":

BusFactory.newInstance().createBus()
...