복붙노트

[SPRING] JBoss 6 + Spring 3.0.5 + JAX-WS / CXF

SPRING

JBoss 6 + Spring 3.0.5 + JAX-WS / CXF

Spring 3.0.5와 함께 JBoss 6에서 프로젝트를 실행하고 있습니다. JAX-WS로 일부 웹 서비스를 구현하기 전까지 모든 것이 순조롭게 진행되었습니다. 몇 가지 간단한 WS (2 숫자 추가)를 시도하면 그냥 작동합니다. 주석을 달고 주석이 달린 클래스를 서블릿으로 추가합니다. 그러나 JAX-WS 클래스에 의존성이 채워지려고하면 상황이 더 어려워진다.

내 코드는 다음과 같습니다.

@WebService(name = "principal")
public class PrincipalWebService extends SpringBeanAutowiringSupport {

    @Autowired
    private PrincipalManager manager;

    @WebMethod
    public int add(int a, int b) {
        return a + b;
    }

    @WebMethod
    public Principal getById(int i) {
            return manager.getById(i);
    }

}

메소드 추가가 작동하지만 NPE로 getById가 실패합니다. SpringBeanAutowiringSupport를 디버깅했습니다. ContextLoader.getCurrentWebApplicationContext ()가 null을 반환하는 것처럼 보입니다. 컨텍스트가 초기화되기 전에 SpringBeanAutowiringSupport 생성자가 호출되고 있음을 의미합니다.

나는 봄과 함께 애플 리케이션을 실행하는 CXF 지침에 따라 노력 해왔다. 지금 당장은이 코드가 없지만 PrincipalWebService를 bean으로 등록하고 CXF를 구성 할 스프링 파일을 작성한 다음이 bean을 ID를 통해 엔드 포인트로 추가했습니다. Jetty는 좋았지 만 JBoss에서는 실패했습니다. CXF를 구성하는 방법에 따라 다른 종류의 예외가 발생했지만 근본 원인은 동일합니다. JBoss 6 CXF 버전은 Spring 2.5에 대해 컴파일되므로 라이브러리 불일치가있었습니다.

JBoss 6에서 Jax-ws 서비스를 위해 IoC를 사용하려는 사람이 있습니까?

해결법

  1. ==============================

    1.좋아, 해결 방법을 찾았습니다. 우리가해야 할 일은 의존성 주입을 @PostConstruct 메서드로 옮기는 것뿐입니다.

    좋아, 해결 방법을 찾았습니다. 우리가해야 할 일은 의존성 주입을 @PostConstruct 메서드로 옮기는 것뿐입니다.

    @PostConstruct
    public void init() {
        SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
    }
    
  2. ==============================

    2.jaxws : endpoint를 사용하여 Spring 컨텍스트에서 끝점을 등록하고 implementor 특성을 사용하여 bean을 참조해야합니다. 예 :

    jaxws : endpoint를 사용하여 Spring 컨텍스트에서 끝점을 등록하고 implementor 특성을 사용하여 bean을 참조해야합니다. 예 :

    <jaxws:endpoint id="NotificationImpl"
                    implementorClass="com.foo.ws.notification.NotificationImpl"
                    implementor="#notificationImpl"
                    serviceName="notification:Notification"
                    address="/notification"
                    xmlns:notification="http://notification.ws.foo.com">
    

    엔드 포인트 구현 :

    @Component("notificationImpl")
    @WebService(endpointInterface="com.foo.ws.notification.Notification")
    public class NotificationImpl implements Notification  {
    
      @Autowired MessagingService messagingService = null;
    
      //...
    }
    
  3. ==============================

    3.동일한 문제가 있지만 WebLogic에서는 https://jira.springsource.org/browse/SPR-5652에 설명 된대로 해결했습니다.

    동일한 문제가 있지만 WebLogic에서는 https://jira.springsource.org/browse/SPR-5652에 설명 된대로 해결했습니다.

  4. from https://stackoverflow.com/questions/5350723/jboss-6-spring-3-0-5-jax-ws-cxf by cc-by-sa and MIT license