近日阅读到《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
此时项目的结构如下图:
关键点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;
}
保证上面的关键点,测试的时候就能测试成功了:
扫描二维码关注公众号,回复:
6091312 查看本文章
探索这个部分内容,真是有些挑战,如下两篇文章对我很有帮助,感谢: