복붙노트

[SPRING] @WebService 봄 인식 방법

SPRING

@WebService 봄 인식 방법

변수를 Autowire하려고하는 웹 서비스가 있습니다. 다음은 클래스입니다.

package com.xetius.isales.pr7.service;

import java.util.Arrays;
import java.util.List;

import javax.jws.WebService;

import org.springframework.beans.factory.annotation.Autowired;

import com.xetius.isales.pr7.domain.PR7Product;
import com.xetius.isales.pr7.domain.PR7Upgrade;
import com.xetius.isales.pr7.logic.UpgradeControllerInterface;

@WebService(serviceName="ProductRulesService",
            portName="ProductRulesPort",
            endpointInterface="com.xetius.isales.pr7.service.ProductRulesWebService",
            targetNamespace="http://pr7.isales.xetius.com")
public class ProductRulesWebService implements ProductRulesWebServiceInterface {

    @Autowired
    private UpgradeControllerInterface upgradeController;

    @Override
    public List<PR7Product> getProducts() {
        if (upgradeController == null) {
            return Arrays.asList(new PR7Product("Fail"));
        }
        return upgradeController.getProducts();
    }

    @Override
    public List<PR7Upgrade> getUpgrades() {
        if (upgradeController == null) {
            return Arrays.asList(new PR7Upgrade("Fail"));
        }
        return upgradeController.getUpgrades();
    }

    @Override
    public List<PR7Product> getProductsForUpgradeWithName(String upgradeName) {
        if (upgradeController == null) {
            return Arrays.asList(new PR7Product("Fail"));
        }
        return getProductsForUpgradeWithName(upgradeName);
    }

}

그러나 웹 서비스에 액세스하려고하면 failController가 반환됩니다. 즉, upgradeController가 자동 실행되고 있지 않습니다. 다음은 내 applicationContext입니다.

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
                        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
                        http://www.springframework.org/schema/context
                        http://www.springframework.org/schema/context/spring-context-3.0.xsd">
    <context:component-scan base-package="com.xetius.isales.pr7" />
    <context:annotation-config />

    <bean id="upgradeController" class="com.xetius.isales.pr7.logic.UpgradeController" />

</beans>

@WebService 클래스가 스프링을 인식하고 자동 와이어 링이 발생하도록 어떻게 만들 수 있습니까?

해결법

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

    1.자동 와이어 링을 원하면 ProductRulesWebService가 SpringBeanAutowiringSupport를 확장해야합니다.

    자동 와이어 링을 원하면 ProductRulesWebService가 SpringBeanAutowiringSupport를 확장해야합니다.

    해당 클래스를 확장하면 UpgradeController를 자동으로 사용할 수 있습니다.

  2. ==============================

    2.기본적으로 Spring을 지원하는 CXF와 같은 스택을 사용하면 기본적으로 다음과 같은 작업을 수행 할 수 있습니다.

    기본적으로 Spring을 지원하는 CXF와 같은 스택을 사용하면 기본적으로 다음과 같은 작업을 수행 할 수 있습니다.

    <bean id="aService" class="com.xetius.isales.pr7.service.ProductRulesWebService " />
    
    <jaxws:endpoint id="aServiceEndpoint" implementor="#aService" address="/aService" />
    
  3. ==============================

    3.컨테이너 버전이나 Spring에 따라 WSDL을 노출하기위한 쉬운 솔루션을 제공합니다.

    컨테이너 버전이나 Spring에 따라 WSDL을 노출하기위한 쉬운 솔루션을 제공합니다.

    @PostConstruct
    SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
    
  4. from https://stackoverflow.com/questions/5041154/how-to-make-an-webservice-spring-aware by cc-by-sa and MIT license