Spring集成JAX-WS——发布和使用WEB服务(WebService)【实践详细记录】

近日阅读到《Spring in Action》第十五章的“发布和使用Web服务”,记录下自己实践的详细过程。

为实践这部分内容,建立了两个应用(详细代码在github上):服务端应用(SpringRPCServiceSpittrJAXWS)客户端应用(SpringRPCClientSpittrJAXWS)

一、开发服务端应用

关键点1.1:不要配置DispatcherServlet。如下Spring的java配置方案:

/**
 * 配置Spring
 * @Date 2019-04-20
 * @Author lifei
 */
public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

    /**
     * 配置 ContextLoaderListener 上下文
     * @return
     */
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{RootConfig.class};
    }

    /**
     * 配置 DispatcherServlet 上下文
     * @return
     */
    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[0];
    }

    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
}

关键点1.2:导出独立的JAX-WS端点,port地址要和tomcat的port不一样:

tomcat的port为8080

    @Bean
    public SimpleJaxWsServiceExporter jaxWsServiceExporter(){
        SimpleJaxWsServiceExporter exporter = new SimpleJaxWsServiceExporter();
        exporter.setBaseAddress("http://localhost:8088/services/");
        return exporter;
    }

此时启动tomcat,在页面上能访问到如下页面(说明服务端应用配置成功):

服务端应用配置成功

二、开发客户端

关键点2.1:手动执行“ $Java_HOME/bin/wsimport *** *** ”命令,将生成的Java文件拷贝到客户端应用中

wsimport -keep  -p com.hef.spittr.jaxws.client http://localhost:8088/services/SpitterService?wsdl

执行wsimport

此时项目的结构如下图:

客户端项目结构

关键点2.2:JaxWsPortProxyFactoryBean的serviceInterface属性配置:

@Bean
    public JaxWsPortProxyFactoryBean spitterService() throws MalformedURLException {
        JaxWsPortProxyFactoryBean portProxyFactoryBean = new JaxWsPortProxyFactoryBean();
        portProxyFactoryBean.setWsdlDocumentUrl(new URL("http://localhost:8088/services/SpitterService?wsdl"));
        portProxyFactoryBean.setServiceName("SpitterService");
        portProxyFactoryBean.setPortName("SpitterServiceEndpointPort");
        portProxyFactoryBean.setNamespaceUri("http://jaxws.remoting.spittr.hef.com/");
        portProxyFactoryBean.setServiceInterface(SpitterServiceEndpoint.class);
        return portProxyFactoryBean;
    }

保证上面的关键点,测试的时候就能测试成功了:

测试使用WEB服务

探索这个部分内容,真是有些挑战,如下两篇文章对我很有帮助,感谢:

【1】Introduction to JAX-WS

【2】通过spring JaxWsPortProxyFactoryBean调用webservice接口

猜你喜欢

转载自blog.csdn.net/hefrankeleyn/article/details/89426146
今日推荐