WebService客户端调用的本质就是将SAOP格式的XML通过通信协议发送到WebService的服务器端,然后接收服务器端返回的XML.
本文简单介绍一下如何通过Spring提供的WebServiceTemplate访问 Webservice,WebServiceTemplate与调用webservice的客户端已及webservice服务器端示意图如下(图片来源 于Spring in Action):
这里以SOAP over HTTP为例,开发步骤如下:
1,在Spring的配置文件中配置WebServiceTemplate,最简单的配置如下:
<bean id="webServiceTemplate" class="org.springframework.ws.client.core.WebServiceTemplate"> <property name="defaultUri" value="http://localhost:8080/prjCXFWS/services/SimpleServicePort"/> </bean>
*这种配置省略了MessageFactory和messageSender的配置,Spring默认会使用SaajSoapMessageFactory和HttpUrlConnectionMessageSender.等同于下面的配置
<bean id="messageFactory" class="org.springframework.ws.soap.saaj.SaajSoapMessageFactory"/> <bean id="webServiceTemplate" class="org.springframework.ws.client.core.WebServiceTemplate"> <constructor-arg ref="messageFactory"/> <property name="messageSender"> <bean class="org.springframework.ws.transport.http.HttpUrlConnectionMessageSender"/> </property> <property name="defaultUri" value="http://localhost:8080/prjCXFWS/services/SimpleServicePort" /> </bean>
还可以使用CommonsHttpMessageSender作为messageSender,它提供了设置timeout,用户名,密码等选项的功能.(需要使用commons-httpclient.jar和commons-codec.jar)
MessageFactory还可以使用AxiomSoapMessageFactory和DomPoxMessageFactory.
<bean id="webServiceTemplate" class="org.springframework.ws.client.core.WebServiceTemplate"> <property name="messageSender"> <bean class="org.springframework.ws.transport.http.CommonsHttpMessageSender"> <property name="readTimeout" value="0" /> </bean> </property> <property name="defaultUri" value="http://localhost:8080/prjCXFWS/services/SimpleServicePort" /> </bean>
2,Java调用代码:传输的是SOAP XML.
private static final String MESSAGE = "<queryPeopleByID xmlns=\"http://test.cxfws.com\">1231ss</queryPeopleByID> "; public static void test() { ApplicationContext ac = new ClassPathXmlApplicationContext("conf/wsAppcontext.xml"); WebServiceTemplate simpleService = (WebServiceTemplate) ac.getBean("webServiceTemplate"); StreamSource source = new StreamSource(new StringReader(MESSAGE)); StreamResult result = new StreamResult(System.out); simpleService.sendSourceAndReceiveToResult(source, result); }
*MESSAGE为需要发送到webservice服务器端的XML payload内容,SOAP body之内的XML内容.
Spring调用Webservice的另一种方法是通过Spring提供的JaxWsPortProxyFactoryBean,示意图如下(图片来源于Spring in Action):
Spring的配置如下:
<bean id="simpleService" class="org.springframework.remoting.jaxws.JaxWsPortProxyFactoryBean"> <property name="serviceInterface" value="com.cxfclient.test.SimpleService" /> <property name="wsdlDocumentUrl" value="http://localhost:8080/prjCXFWS/services/SimpleServicePort?WSDL" /> <property name="namespaceUri" value="http://test.cxfws.com/" /> <property name="serviceName" value="SimpleServiceService" /> <property name="portName" value="SimpleServicePort" /> </bean>
**这种方式需要用工具通过Webservice 的wsdl文件生成客户端需要的一些Java类,如service的interface,参数类等等(如下面代码中的SimpleService,People类).
Java调用代码如下
ApplicationContext ac = new ClassPathXmlApplicationContext("conf/wsAppcontext.xml"); SimpleService simpleService = (SimpleService) ac.getBean("simpleService"); People people = simpleService.queryPeopleByID("test"); System.out.println(people.getAge() + people.getName() + people.getPid());
关于更多客户端如何调用webservice,参照http://blog.csdn.net/kkdelta/article/details/3987591
对于服务器端,其本质也是接收符合SOAP规范的XML消息,解析XML,返回符合SOAP规范的XML,这里用一个servlet模拟webservice,代码如下:
public class WSSimulator extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { System.out.println("doGet"); BufferedReader in = new BufferedReader(new InputStreamReader( request.getInputStream())); String str; while ((str = in.readLine()) != null) { System.out.println(str); ##1 } in.close(); String soapHeader = "<SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\">" +"<SOAP-ENV:Header/><SOAP-ENV:Body>"; String soapPayload = "<xxx>yyy</xxx>"; String soapTail = "</SOAP-ENV:Body></SOAP-ENV:Envelope>"; response.getWriter().write(soapHeader + soapPayload + soapTail); ##2 } public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { System.out.println("doPost"); doGet(request, response); } }
通过WebServiceTemplate将消息发送到这个servlet监听的url,可以更深理解Webservice的本质.
##1 str就是从客户端传输到服务器端的XML.##2将SOAP消息返回给客户端.
更多服务器端webservice的开发请参照http://blog.csdn.net/kkdelta/article/details/3984312
相关推荐
- Spring.NET提供了`WebServiceTemplate`类,方便在客户端测试SOAP服务。 - 对于RESTful服务,可以使用HTTP客户端库(如HttpClient)进行单元测试和集成测试。 6. **部署和发布**: - 将Spring.NET应用打包成ASP...
Spring MVC 是一个强大的Java Web开发框架,用于构建可维护、...通过理解Spring MVC的MVC模式,掌握Web服务的基本原理,以及学习如何在Spring环境中配置和调用Web服务,开发者可以构建更加灵活和可扩展的Web应用程序。
配置完成后,我们可以通过依赖注入获取到Web服务客户端,然后通过WebServiceTemplate调用Web服务方法。例如: ```csharp [Dependency] public IMyWebService MyWebService { get; set; } public void ...
1. **Spring SOAP Web Service**: 使用Spring的`WebServiceTemplate`或JAX-WS的`@WebService`注解创建SOAP服务。服务端通过定义接口和实现类,客户端通过调用这些接口实现数据交互。 2. **Spring配置文件**:XML...
Spring Cloud Feign是Spring Cloud生态系统中的一个组件,它作为一个声明式的服务调用客户端,使得编写Web服务客户端变得简单。Feign的设计灵感来源于Netflix的Feign库,它的主要目的是简化微服务之间的通信,使得...
在IT行业中,Spring框架是Java开发领域中广泛使用的开源框架,尤其在企业级应用开发中扮演着核心角色。它提供了一种优雅的方式来管理应用程序的组件,实现依赖注入,以及为各种服务提供支持,包括Web服务。Web服务是...
在这个场景中,描述中提到的是基于Apache Axis的实现,这可能涉及到Spring与Apache Axis的集成,Axis是一个流行的SOAP(简单对象访问协议)Web服务框架。 1. **Spring与Apache Axis的集成**: - Spring与Apache ...
一旦添加了相应的依赖,如`spring-boot-starter-web-services`,Spring Boot 将自动配置必要的bean,如WebServiceTemplate,用于发送和接收SOAP消息。同时,它也支持XSD schema的定义和验证,确保数据交换的正确性。...
1. **配置Spring上下文**:在Spring配置文件中,你需要声明一个WebServiceTemplate或Endpoint,这是Spring与Web Service交互的核心组件。例如,对于SOAP服务,你可以使用JaxWsPortProxyFactoryBean来配置服务端点。 ...
Apache CXF和Spring提供了丰富的扩展点,可以集成如Spring Security来控制访问权限,使用Spring AOP来处理事务,以及通过CXF的拦截器机制来实现自定义的日志、验证等功能。 总结来说,Apache CXF 2与Spring 2.5的...
spring中配置webservice及其基础开发(java).pdf
本文档主要讲述的是spring中配置webservice及其基础开发(java);
Spring Web Services 是基于 Spring 框架的 Web 服务框架,主要侧重于基于文档驱动的Web服务,提供 SOAP 服务开发,允许通过多种方式创建 Web 服务。本章利用Apache CXF构建和开发webservice. 1. webservice远程...
【标题】"spring+webserviceClient"涉及到的关键技术是Spring框架与Web服务客户端的整合,主要探讨如何在Spring环境中创建和使用Web Service客户端。Web Service是一种基于SOAP协议的跨平台、跨语言的通信方式,而...
Spring WS 是一个强大的Java库,专门用于构建基于SOAP(简单对象访问协议)的Web服务。它为开发人员提供了一个简洁的API,使得在Spring框架内创建和消费Web服务变得更为容易。Spring WS的核心特性包括契约优先的方法...
3. **创建Endpoint**: 实现服务业务逻辑,Spring-WS会自动将SOAP请求映射到相应的Java方法。 4. **配置并启动服务器**: 在Spring配置文件中配置Web服务,如端口、marshaller等,并部署到应用服务器。 5. **客户端...
Spring 3引入了更多的改进,包括对JSR-330注解的支持,增强了AOP(面向切面编程)功能,以及更强大的数据访问组件。 3. **CXF与Spring集成的优势**: - **依赖注入(DI)**:Spring的DI允许CXF组件轻松地接收来自...
标题中的“axis2+spring webservice”指的是使用Apache Axis2框架与Spring框架集成来开发Web服务。Apache Axis2是Java环境中广泛使用的Web服务引擎,它提供了高性能、灵活且可扩展的架构。Spring框架则是一个全面的...
在本文中,我们将深入探讨如何使用Apache CXF 2与Spring 2.5框架来开发Web服务实例。Apache CXF是一个流行的开源项目,它提供了一种简单且强大的方式来实现和消费SOAP和RESTful Web服务。Spring框架则以其模块化、...
Spring.NET是中国开源社区基于.NET Framework开发的一款轻量级企业级应用框架,它为.NET开发者提供了类似于Java Spring...同时,这也展示了如何将ORM工具如Nhibernate集成到Webservice项目中,以实现更高效的数据访问。