2011-04-08 5 views
4

CXF스프링을 사용하여 JBoss 5.1에 내 웹 서비스를 게시하고 사용할 수 있습니다. 모두 잘 작동합니다. 잭스 - WS를 넣어 : applicationContext.xml의 모든 WebService에 대한 엔드 포인트 태그<jaxws : endpoint /> 주석이 있습니까?

그러나, 나는 매우 지루한 생각의 일이있다.

실제로 특수 효과를 사용하여이를 수행 할 방법이 없습니까? 감사합니다.

답변

2

<jaxws:endpoint>에 넣을 수있는 내용을 구성하려면 some annotations이 있습니다. 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... 
+0

될 것 끝점에 대한 주석이 있으면 아주 멋지다. 나는 이것이 어떻게 아직 만들어지지 않았는지 이해하지 못한다. –

1

시간이 패스로, 새로운 가능성이 발생한다.

CXF/SpringBoot (SpringBoot : 1.2.3, CXF : 3.10, Spring : 4.1.6)와 함께 cxf-servlet.xml의 jaxws : 끝점 구성을 없애기위한 좋은 대안이 있습니다. 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 주석이있는 클래스입니다. 그런 다음이 끝점은 "localhost : 8080/api/MyService"와 같은 URL에 대해 호출됩니다.

물론 이러한 @Bean 선언은 다른 스프링 구성 클래스에 배치 될 수 있습니다. 나는 ") (새 SpringBus"대신 직접의 팩토리 메소드를 사용하여 버스 (CXF-콩)를 인스턴스화하는 것이 좋습니다 복사 된 원래의 솔루션에 반하는에서

: 당신이 말한 것처럼

BusFactory.newInstance().createBus() 
관련 문제