- 浏览: 555872 次
- 性别:
文章分类
- 全部博客 (337)
- WEB前端@HTML (4)
- WEB前端@CSS (5)
- WEB前端@javascript (31)
- WEB前端@DHTML (8)
- WEB前端@jQuery (3)
- WEB前端@Flex4 (19)
- WEB前端@BootStrap3 (21)
- 数据交换@JSON (1)
- 模板标签@JSTL (1)
- 模板标签@Thymeleaf (1)
- 模板标签@XSL-FO (3)
- WEB后台@JavaSE (75)
- WEB后台@JAX-WS (27)
- WEB后台@HttpClient (0)
- WEB后台@SSO (2)
- 框架@Spring3 (3)
- 框架@spring_MVC (8)
- 框架@Hibernate (26)
- 框架@play framework (18)
- 框架@sl4j (4)
- 数据库@ (2)
- 数据库@JDBC (0)
- 服务器@Linux (14)
- 服务器@Tomcat (2)
- 第三方jar@dom4j (1)
- 第三方jar@POI (2)
- 第三方jar@CXF (5)
- 项目管理@Maven (22)
- 项目管理@SVN (1)
- 缓存管理@ehcache (1)
- 系统设计@设计模式 (10)
- 单元测试@JunitTest (1)
- 开发工具 (3)
- BUG收录 (1)
- 学习之路 (6)
- 面试之道 (1)
- 我的项目 (2)
最新评论
-
superich2008:
logback配置文件的改动会导致应用重新加载,多改动几次后就 ...
Chapter 3: Logback configuration -
chenzhihui:
不是可以在log4j中配置以控制台或者文件方式保存日志的?
play记录日志 -
smilease:
很棒,正缺这个,非常感谢
bootstrap3-typeahead 自动补全 -
guangling13345:
[size=x-small][/size]
二级联动菜单 -
jacksondesign:
有,和YAML的格式有关,不知道有没有什么好的YAML格式的验 ...
(四)play之yabe项目【页面】
开发流程:
1.先写schema或者wsdl文件
2.根据这个文件生成客户端代码
3.编写实现类(在实现类上指定wsdlLocation)
4.发布服务
src下创建META-INF目录,再该目录下创建wsdl文件夹,使用向导创建一个wsdl文件
一、编写type
二、编写Message
三、编写portType
四、编写bingding
五、编写service
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://www.example.org/my/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="myServiceImplService" targetNamespace="http://www.example.org/my/"> <!-- TYPE --> <wsdl:types> <!-- 定义schema,通过tns引用该schema中的元素 --> <xsd:schema targetNamespace="http://www.example.org/my/"> <xsd:element name="add" type="tns:addType"/> <xsd:element name="addResponse" type="tns:addResponseType"/> <xsd:complexType name="addType"> <xsd:sequence> <xsd:element name="a" type="xsd:int"/> <xsd:element name="b" type="xsd:int"/> </xsd:sequence> </xsd:complexType> <xsd:complexType name="addResponseType"> <xsd:sequence> <xsd:element name="addResult" type="xsd:int"/> </xsd:sequence> </xsd:complexType> </xsd:schema> </wsdl:types> <!-- MESSAGE --> <wsdl:message name="add"> <wsdl:part element="tns:add" name="parameters"/> </wsdl:message> <wsdl:message name="addResponse"> <wsdl:part element="tns:addResponse" name="parameters"/> </wsdl:message> <!-- PORTTYPE 指定接口和方法 --> <wsdl:portType name="IMyservice"> <wsdl:operation name="add"> <wsdl:input message="tns:add"/> <wsdl:output message="tns:addResponse"/> </wsdl:operation> </wsdl:portType> <!-- BINDING 指定编码方式 --> <wsdl:binding name="MyServiceImplPortBinding" type="tns:IMyservice"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> <wsdl:operation name="add"> <wsdl:input> <soap:body use="literal"/> </wsdl:input> <wsdl:output> <soap:body use="literal"/> </wsdl:output> </wsdl:operation> </wsdl:binding> <!-- SERVICE服务 注意:service name必须与wsdl definition中的name一致 --> <wsdl:service name="MyServiceImplService"> <wsdl:port binding="tns:MyServiceImplPortBinding" name="MyServiceImplPort"> <!-- 指定服务发布的地址 --> <soap:address location="http://localhost:7777/ms"/> </wsdl:port> </wsdl:service> </wsdl:definitions>
使用wsimport将wsdl转换为java代码
只保留IMyservice接口(利用接口以及定义好的注解-对参数的映射配置),其它都删除(因为服务端不用那些java文件)
编写IMyservice的实现类
wsimport -d E:\technology-hqh\proj\webservice\JAX-WS\wsimport_03 -keep my.wsdl
package org.example.my; import javax.jws.WebMethod; import javax.jws.WebParam; import javax.jws.WebResult; import javax.jws.WebService; import javax.xml.bind.annotation.XmlSeeAlso; import javax.xml.ws.RequestWrapper; import javax.xml.ws.ResponseWrapper; /** * 接口 */ /** * This class was generated by the JAX-WS RI. * JAX-WS RI 2.1.6 in JDK 6 * Generated source version: 2.1 * */ @WebService(name = "IMyservice", targetNamespace = "http://www.example.org/my/") public interface IMyservice { /** * * @param b * @param a * @return * returns int */ @WebMethod @WebResult(name = "addResult", targetNamespace = "") @RequestWrapper(localName = "add", targetNamespace = "http://www.example.org/my/", className = "org.example.my.AddType") @ResponseWrapper(localName = "addResponse", targetNamespace = "http://www.example.org/my/", className = "org.example.my.AddResponseType") public int add( @WebParam(name = "a", targetNamespace = "") int a, @WebParam(name = "b", targetNamespace = "") int b); }
package org.example.my; import javax.jws.WebService; /** * 实现类 * 指定wsdlLocation="META-INF/wsdl/my.wsdl",使用本地以及编写好的wsdl文件 */ @WebService(endpointInterface="org.example.my.IMyservice", targetNamespace = "http://www.example.org/my/", wsdlLocation="META-INF/wsdl/my.wsdl") public class MyServiceImpl implements IMyservice { @Override public int add(int a, int b) { System.out.println("MyServiceImpl.add()"); return a+b; } }
开启服务端的服务
package org.example.my; import javax.xml.ws.Endpoint; public class MyServer { public static void main(String[] args) { String address = "http://localhost:7777/ms"; IMyservice implementor = new MyServiceImpl(); Endpoint.publish(address, implementor); } }
客户端通过wsimport将发布的wsdl文件转换为本地的代码
wsimport -d E:\technology-hqh\proj\webservice\JAX-WS\wsimport_03 -keep http://localhost:7777/ms?wsdl
客户端调用服务
package org.example.my.test; import static org.junit.Assert.*; import org.example.my.IMyservice; import org.example.my.MyServiceImplService; public class Test { @org.junit.Test public void test() { MyServiceImplService serviceImpl = new MyServiceImplService(); IMyservice service = serviceImpl.getMyServiceImplPort(); int result = service.add(1, 2); System.out.println(result); } }
服务端发布新的wsdl,客户端必须根据wsdl更新本地代码
发表评论
-
实际应用-使用xsd定义Model对象
2014-02-27 02:24 1316使用schema定义Model 好 ... -
XJC 将schema转换为java类
2013-08-28 09:55 1855使用xjc(xml java change)将schema转 ... -
Webservice中获取Servlet的相关对象
2013-08-15 17:44 2883第一种方式: 通过注入WebServiceContex ... -
JAX与spring的无缝集成---增加Handler和Exception(二)
2013-08-15 16:00 1998客户端也使用spring集成JAX-WS。但是有一个问题需 ... -
Exception处理:服务端返回对象与客户端类型不一致XXX cannot be cast to XXX
2013-08-15 13:52 2613描述: 服务端向客户端返回数据时,发生类型转 ... -
JAX与spring的无缝集成(一)
2013-08-13 13:45 6625JAX-WS与spring集成有几 ... -
使用契约优先---重要注意事项
2013-08-11 22:23 1015使用契约优先编写schema和wsdl文件时,一般都是在ws ... -
通过HEADER传递信息-做权限控制
2013-08-08 18:11 2023通过HEADER而不是BODY传递“LICENSE” ... -
webservice传递二进制数据(文件)
2013-08-08 16:14 2299将二进制数据放到Attachment中进行传递,而不是放到 ... -
发布webservice到tomcat
2013-08-07 09:39 3052目标: 基于契约优先的webservice功能开发 ... -
基于契约优先的隐式头信息处理
2013-08-03 20:05 1230<?xml version="1.0&qu ... -
通过Handler添加HEADER
2013-08-03 14:05 2045LogicHandler 只能获取SOAPBody的信息 ... -
SOAP异常处理
2013-08-03 14:00 1009接口 package com.hqh.soap; imp ... -
深入SOAP发送消息的过程(SAAJ)
2013-07-28 18:54 2104SOAP结构体 SOAPMessage SOAPPa ... -
使用Transformer更新XML
2013-07-27 14:46 2783package com.hqh.stax; impo ... -
使用XMLStreamWriter写XML
2013-07-27 14:10 4027package com.hqh.stax; im ... -
使用java提供的XPATH处理xml
2013-07-27 13:10 981books.xml <?xml version=&q ... -
使用Stax处理XML
2013-07-27 10:57 1284java提供的XML处理 Stax处 ... -
使用JAXB完成XML与java对象的转换
2013-07-27 10:05 2154SAX 处理超大xml时使用 do ... -
XML_Schema
2013-07-22 16:27 1372Schema的好处 schema出现的目的:通过一个更加合理的 ...
相关推荐
本文将详细解析基于契约优先的WSDL(Web Services Description Language)的SOAP服务开发流程,同时结合“webservice_005_wsdl”这个压缩包中的文件,我们将深入探讨这一主题。 首先,WSDL是SOAP服务的核心组成部分...
WSDL契约优先的方法意味着首先编写服务的接口描述(WSDL文件),这个文件详细定义了服务的输入、输出、操作及协议。这种方式强调服务的接口定义先于实现,确保服务提供者和消费者之间的通信协议明确,降低了集成的...
1. **Spring-WS**: 是Spring WebService的核心模块,它支持基于XML Schema的契约优先(Contract-First)开发方式。这意味着首先定义服务接口的XML Schema,然后根据Schema生成服务代码。 2. **Axiom**: Apache ...
在契约优先模式中,首先定义服务的契约(WSDL),然后基于契约生成服务实现。这种方式有助于确保服务的互操作性和独立性。 5. **消息转换与数据绑定** Spring WebService支持多种消息转换器,如JAXB(Java ...
- **Spring-WS**:Spring提供的用于构建SOAP Web服务的模块,它基于WSDL第一类公民的模型,支持契约优先的开发方式。 - **JAX-WS**:Java API for XML Web Services,是Java平台上的标准,用于创建和消费SOAP Web...
它支持基于XML和基于契约优先的开发模式,也可以与Spring Boot结合使用。 本资源的"Java的webservice入门"视频教程很可能涵盖了以下内容: - Web Service的基本概念和工作原理 - 如何创建和发布一个简单的SOAP或...
在Web服务框架方面,我们提到了CXF、Axis和Metro,这些都是Java中广泛使用的Web服务实现库,提供了丰富的功能,如契约优先的开发模式、异常处理等。契约优先的开发方式意味着先定义服务的接口(通常是WSDL或Schema)...
Spring-WS是Spring框架的一个扩展模块,专注于提供一种契约优先的Web服务设计方法,强调文档驱动的服务构建方式。相比传统的代码驱动模型,Spring-WS的优点在于它能够更好地实现服务契约与内部服务接口之间的解耦,...
此外,Spring框架也提供了对WebService的支持,如Spring-WS,它允许更灵活的XML消息处理和契约优先的开发方式。 在实验中,"SOA与WebService技术实验资料包+书pdf"可能包含了关于如何设计、实现和测试SOA服务以及...
Spring-WS提供了基于XML Schema的契约优先(Contract-First)方法,意味着我们先定义服务接口的XML Schema,然后根据Schema生成Java代码。 1. **设置项目环境**:首先,你需要一个包含Spring和Spring-WS的开发环境...
它支持契约优先的开发方法,这意味着你可以从WSDL(Web服务描述语言)开始,然后生成相应的Java代码。Spring WS 2.0引入了许多改进,包括对XML Schema的支持、增强了错误处理和更强大的数据绑定机制。 2. **契约...
1. **契约优先(Contract-First)**:这种方法从WSDL(Web Services Description Language)契约开始,根据契约生成相应的Java类以实现服务。这要求开发者对WSDL和XML Schema Definition(XSD)有深入的理解。 2. *...
在开发 Web Service 时,通常有两种方法:Contract-First(契约优先)和 Contract-Last(契约后置)。Contract-First 方法鼓励先定义服务接口(通常是 WSDL 文件),然后再实现具体的业务逻辑。 **2.2 Object/XML ...
Spring-WS的核心特性是基于XML Schema的契约优先方法,这意味着首先定义服务的契约(即XSD),然后根据契约生成服务接口。这种方式有利于实现松耦合,因为服务提供者和消费者可以独立地开发和更新,只要契约不变。 ...
- **契约优先或代码优先**:客户端开发可以选择契约优先(基于WSDL生成客户端代码)或代码优先(基于Java接口生成WSDL)的方式。 ### 4. RESTful服务与CXF 除了传统的SOAP服务,CXF还支持RESTful API的开发。你可以...
2. **Spring-WS的特点与优势**:Spring-WS基于契约优先和文档驱动的Web服务设计理念,这与传统以代码驱动的服务设计模式相对。这种设计模式可以实现服务契约与内部服务接口的松耦合,使得服务能够快速适应业务需求...
Spring-WS专注于创建基于WSDL的契约优先的Web服务,而Spring-Integration则关注于企业级应用集成。 在Spring-WS中,你可以定义XML Schema来描述服务接口,Spring会自动生成WSDL文件。然后,通过配置XML或者注解方式...
"spring-webservice-example"项目恰好为我们提供了一个基于Spring框架构建Web服务的实例,这将帮助我们深入理解Spring如何处理Web服务的创建和交互。以下是对该项目的详细解析。 首先,我们要明确的是,Web服务是一...
本文将详细介绍ROP框架如何应对这些挑战,并通过对比两种主要的Web服务开发模式——代码优先和契约优先,来探讨ROP在实际开发中的优势。 ##### 代码优先 VS 契约优先 - **代码优先**:这种模式下,开发者首先编写...
Spring-WS是一个基于XML的SOAP(Simple Object Access Protocol)Web服务开发框架,它强调契约优先(Contract-First)的开发方式,这意味着先定义WSDL(Web Services Description Language)文件,再根据WSDL生成...