JAX-WS端点bean创建因ServiceConstructionException而失败

时间:2016-07-18 11:07:23

标签: web-services spring-boot cxf jax-ws

我正在尝试使用webservice

发布spring-boot

以下是我如何设置它。

我有interface有一些methods

@WebService
public interface FirstInterface
{
    @WebMethod
    void method1(@WebParam(name = "id") String id);
    void method2(@WebParam(name = "id2") String id);
}

我还有一个interface还有一些methods 它扩展了FirstInterface

@WebService
public interface SecondInterface extends FirstInterface
{
    @WebMethod
    void method3(@WebParam(name = "id") String id);
    void method4(@WebParam(name = "id2") String id);
}

现在我有一个实现SecondInterface的实现类 并endpointInterface引用我的SecondInterface这样的内容:

@Service
@WebService(endpointInterface = "com.somepackage.SecondInterface")
public class CallBackServicesImpl implements SecondInterface
{
    @Override
    //override all four methods here
}

现在我有一个发布这些服务的配置类

@Configuration
public class WebServiceConfig
{
    @Bean
    public Endpoint endpoint() {
        EndpointImpl endpoint = new EndpointImpl(springBus(), serviceImpl());
        endpoint.publish(SERVICE_NAME_PATH);
        return endpoint;
    }

}

问题 webservice已使用此设置发布,endpointinterface指向FirstInterface,但只有两种方法可供使用。

现在我想要四个方法可供客户端使用,所以我将endpointinterface指向SecodInterface并开始抛出异常Error creating bean with name 'endpoint'org.apache.cxf.service.factory.ServiceConstructionException < / p>

我错过了一些基本的东西吗?我怎样才能实现这种行为?

1 个答案:

答案 0 :(得分:0)

删除impl类

上的@WebService注释

这是工作副本

FirstInterface.java

@WebService
public interface FirstInterface {

    @WebMethod
    void method1(@WebParam(name = "id") String id);
    @WebMethod
    void method2(@WebParam(name = "id2") String id);

}

<强> SecondInterface.java

@WebService
public interface SecondInterface extends FirstInterface {

    @WebMethod
    void method3(@WebParam(name = "id") String id);

    @WebMethod
    void method4(@WebParam(name = "id2") String id);

}

Impl class

@Service
public class KPImpl implements SecondInterface {

    public static final Logger LOG = LoggerFactory.getLogger(KPImpl.class);

    @Override
    public void method3(String id) {

        LOG.info("Method3 {}", id);

    }

    @Override
    public void method4(String id) {
        LOG.info("Method4 {}", id);
    }

    @Override
    public void method1(String id) {
        LOG.info("Method1 {}", id);

    }

    @Override
    public void method2(String id) {

        LOG.info("Method2 {}", id);

    }

}

最后配置文件

@Configuration
public class WsConfiguration {

    @Bean
    public Server getJaxWsServer(SpringBus bus, KPImpl impl) {

        final JaxWsServerFactoryBean serverFctry = new JaxWsServerFactoryBean();
        serverFctry.setAddress("/kp");
        serverFctry.setServiceBean(impl);
        serverFctry.setServiceClass(KPImpl.class);
        serverFctry.getFeatures().add(new LoggingFeature());
        return serverFctry.create();
    }

}